yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #27470
[Question #701231]: problem with parallel computatio with mpi
New question #701231 on Yade:
https://answers.launchpad.net/yade/+question/701231
Deal all,
I am learning how to perform parallel computation with Yade as I run quite big simulations. I followed the guide in the Yade document, section "MPI parallelization" et run a simple example vtkRecorderExample.py with the command "yade vtkRecorderExample.py" as shown in the guide. I have installed Yade version 2021.01a . I got the following error
<WARNING> Shop:562 static yade::Real yade::Shop::PWaveTimeStep(boost::shared_ptr<yade::Scene>): PWaveTimeStep has not found any suitable spherical body to calculate dt. dt is set to 1.0
kinetic energy from workers: [2335799070.7638345, 2292260117.074841]
Could you please tell me why I got this error? Do I need perform some special things to run parallel computation with Yade?
Thank you in advance for your help.
Best regards
Son Nguyen
Here is the script vtkRecorderExample.py
import os
from yade import mpy as mp
NSTEPS=5000 #turn it >0 to see time iterations, else only initilization
numThreads = 4 # number of threads to be spawned, (in interactive mode).
#materials
young = 5e6
compFricDegree = 0.0
O.materials.append(FrictMat(young=young, poisson=0.5, frictionAngle = radians(compFricDegree), density= 2600, label='sphereMat'))
O.materials.append(FrictMat(young=young*100, poisson = 0.5, frictionAngle = compFricDegree, density =2600, label='wallMat'))
#add spheres
mn,mx=Vector3(0,0,0),Vector3(90,180,90)
pred = pack.inAlignedBox(mn,mx)
O.bodies.append(pack.regularHexa(pred,radius=2.80,gap=0, material='sphereMat'))
#walls (floor)
wallIds=aabbWalls([Vector3(-360,-1,-360),Vector3(360,360,360)],thickness=10.0, material='wallMat')
O.bodies.append(wallIds)
#engines
O.engines=[
ForceResetter(),
InsertionSortCollider([
Bo1_Sphere_Aabb(),
Bo1_Box_Aabb()], label = 'collider'), # always add labels.
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()],
label="interactionLoop"
),
GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.3, timeStepUpdateInterval=100, parallelMode=True, label = 'timeStepper'),
NewtonIntegrator(damping=0.1,gravity = (0, -0.1, 0), label='newton'),
VTKRecorder(fileName='spheres/3d-vtk-', recorders=['spheres', 'intr', 'boxes'], parallelMode=True,iterPeriod=500), #use .pvtu to open spheres, .pvtp for ints, and .vtu for boxes.
]
#set a custom verletDist for efficiency.
collider.verletDist = 1.5
######### RUN ##########
# customize mpy
mp.ERASE_REMOTE_MASTER = True #keep remote bodies in master?
mp.DOMAIN_DECOMPOSITION= True #automatic splitting/domain decomposition
#mp.mpirun(NSTEPS) #passive mode run
mp.MERGE_W_INTERACTIONS = False
mp.mpirun(NSTEPS,numThreads,withMerge=True) # interactive run, numThreads is the number of workers to be initialized, see below for withMerge explanation.
mp.mergeScene() #merge scene after run.
if mp.rank == 0: O.save('mergedScene.yade')
#demonstrate getting stuff from workers, here we get kinetic energy from worker subdomains, notice that the master (mp.rank = 0), uses the sendCommand to tell workers to compute kineticEnergy.
if mp.rank==0:
print("kinetic energy from workers: "+str(mp.sendCommand([1,2],"kineticEnergy()",True)))
--
You received this question notification because your team yade-users is
an answer contact for Yade.