""" Playground for tuning collider strides depending on maximum velocity. """
from __future__ import print_function

from builtins import range
from yade import timing
import os.path
loadFrom='/tmp/triax.xml'
#if not os.path.exists(loadFrom):
TriaxialTest(numberOfGrains=2000,noFiles=True).generate(loadFrom)
O.load(loadFrom)

collider=typedEngine('InsertionSortCollider')
newton=typedEngine('NewtonIntegrator')

# use striding; say "if 0:" to disable striding and compare to regular runs
if 1:
	# length by which bboxes will be made larger
	collider.verletDist=.2*O.bodies[100].shape.radius

O.step() # filter out initialization
O.timingEnabled=True
totalTime=0
# run a few times 500 steps, show timings to see what is the trend
# notably, the percentage of collider time should decrease as the max velocity decreases as well
for i in range(0,5):
	O.run(1000,True)
	timing.stats()
	totalTime+=sum([e.execTime for e in O.engines])
	print('Number of interactions: %d (real ratio: %g)'%(len(O.interactions),float(O.interactions.countReal())/len(O.interactions)))
	print('=======================================================')
	timing.reset()

print('Total time: %g s'%(totalTime/1e9))
#quit()
