← Back to team overview

yade-users team mailing list archive

[Question #679530]: parallel scenes

 

New question #679530 on Yade:
https://answers.launchpad.net/yade/+question/679530

Hi:
Follow the question 225080. I created 2 yade files and tried to run their scenes independently. But the 2files seems to use 1 omega?

I use the following codes to control my 2 files:
import liboofem
import threading, multiprocessing
import time

def solve1(n):
	for i in range(500):
		omega1.switchToScene(i+n)
		omega1.step()
def solve2(n):
	for i in range(500):
		omega2.switchToScene(i+n)
		omega2.step()

filename1='testyade1'
filename2='testyade2'
m1 = __import__(filename1)
m2 = __import__(filename2)

omega1 = m1.O
omega2 = m2.O
omega1.dt = 0.0001
print(omega2.dt)
#omega2.dt = 0.0001

for i in range(500):
	m1.GenScene(i)
	m2.GenScene(i)

the 2 yade files are exactly the same, and the following codes are one of them(Box.Sphere can be replaced by any sphere pack):
from libyade import yade
from yade import *
from yade import pack, Vector3, Vector3

def readsphere():
	filename = 'Box.Sphere'
	sphere=[]
	a=open(filename).read().split()
	for i in range(int(len(a)/4)):
		s = ((float(a[4*i]),float(a[4*i+1]),float(a[4*i+2])),float(a[4*i+3]))
		sphere.append(s)
	return sphere

SP = readsphere()
cellsize = Vector3.Ones

def randomPeriPack(radius,initSize,seed):
	O.switchScene(); O.resetThisScene()
	O.periodic=True
	O.cell.setBox(initSize)
	O.engines=[ForceResetter(),InsertionSortCollider([Bo1_Sphere_Aabb()],verletDist=.05*radius),InteractionLoop([Ig2_Sphere_Sphere_ScGeom()],[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),PeriIsoCompressor(charLen=2*radius,stresses=[-100e9,-1e8],maxUnbalanced=1e-2,doneHook='O.pause();',globalUpdateInt=20,keepProportions=True),NewtonIntegrator(damping=.8)]
	O.materials.append(FrictMat(young=30e9,frictionAngle=.1,poisson=.3,density=1e3))
	sp=SP
	for s in sp: O.bodies.append(utils.sphere(s[0],s[1]))
	O.dt=utils.PWaveTimeStep()
	O.timingEnabled=True
	O.run(); 
	O.wait()
	cellsize = O.cell.size
	for b in O.bodies: b.state.pos = O.cell.wrap(b.state.pos)
	ret=pack.SpherePack()
	ret.fromSimulation()
	O.switchScene()
	print('pre-pocessing done')
	return ret

spack = randomPeriPack(.01,.1*Vector3.Ones,10)


def GenScene(i):
	if i != 0:
		newScene = O.addScene()
		O.switchToScene(newScene)
		print('scene',newScene,'created')
	O.switchScene(); O.resetThisScene()
	O.periodic = True
	O.cell.setBox(cellsize)
	O.materials.append(CohFrictMat(young=2e11,frictionAngle=0.3,poisson=.1,density=15.8e7,normalCohesion=1.e6,shearCohesion=0.2e6,alphaKr=0.1,isCohesive=True,momentRotationLaw=True,etaRoll=0.2,label='m2'))
	spack.toSimulation()
	
	O.engines = [
		ForceResetter(),
		InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.5,label='is2aabb')],allowBiggerThanPeriod=True),
		InteractionLoop(
			[Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=1.5,label='ss2d3dg')],
			[Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(label = 'm2')],
			[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(
				useIncrementalForm=True,
				always_use_moment_law=True,
				)]),
		NewtonIntegrator(damping=.3,gravity=(0,0,0.0)),
	]
	O.dt = 0.
	O.step()
	is2aabb.aabbEnlargeFactor = 1.
	ss2d3dg.interactionDetectionFactor = 1.

if the 2 files run independently, the output should be:
scene 1 created
scene 1 created
scene 2 created
scene 2 created
...

but the output is:
scene 1 created
scene 2 created
scene 3 created
...

why the 2 omegas are not independent? how can I parallel them? using different versions of YADE?

Yours,
Joe

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.