Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502
Status: Needs information => Open Huihuang Xia gave more information on the question: Thanks Robert, https://answers.launchpad.net/yade/+question/246971, gives a good example. Thus, I want to do a tri-axial compression on a cubic sample and filter a stone particle shape using pack.filterSpherePack from this sample. Is this method correct? According to https://github.com/yade/trunk/blob/e4e757f2e98a620e3177b7a36a1d10f69f6a6a28/examples /triax-tutorial/script-session1.py, here is a code was used to filter a sphere from a cubic sample, but this code failed, because it got the following error: Desktop/sphere$ yade sphere.py Welcome to Yade 2016.06a TCP python prompt on localhost:9000, auth cookie `ecssdy' XMLRPC info provider on http://localhost:21000 Running script sphere.py [[ ^L clears screen, ^U kills line. F12 controller, F11 3d view (use h-key for showing help), F10 both, F9 generator, F8 plot. ]] Yade [1]: --------------------------------------------------------------------------- ValueError Traceback (most recent call last) /home/huihuang/YADE/install/lib/x86_64-linux-gnu/yade-2016.06a/py/yade/__init__.pyc in refreshEvent(self) 190 def zxySlot(self): self.setViewAxes((0,-1,0),(1,0,0)) 191 def refreshEvent(self): --> 192 self.refreshValues() 193 self.activateControls() 194 def deactivateControls(self): /home/huihuang/YADE/install/lib/x86_64-linux-gnu/yade-2016.06a/py/yade/__init__.pyc in refreshValues(self) 263 self.iterLabel.setText('#%ld / %ld, %.1f/s %s'%(O.iter,stopAtIter,self.iterPerSec,subStepInfo)) 264 if t!=float('inf'): --> 265 s=int(t); ms=int(t*1000)%1000; us=int(t*1000000)%1000; ns=int(t*1000000000)%1000 266 self.virtTimeLabel.setText(u'%03ds%03dm%03dμ%03dn'%(s,ms,us,ns)) 267 else: self.virtTimeLabel.setText(u'[ ∞ ] ?!') ValueError: cannot convert float NaN to integer Here is my code: from yade import pack from yade import export ############################################ ### DEFINING VARIABLES AND MATERIALS ### ############################################ # The following 5 lines will be used later for batch execution nRead=readParamsFromTable( num_spheres=3000,# number of spheres compFricDegree = 30, # contact friction during the confining phase key='_triax_base_', # put you simulation's name here unknownOk=True ) from yade.params import table num_spheres=table.num_spheres# number of spheres key=table.key targetPorosity = 0.43 #the porosity we want for the packing compFricDegree = table.compFricDegree # initial contact friction during the confining phase (will be decreased during the REFD compaction process) finalFricDegree = 30 # contact friction during the deviatoric loading rate=-0.02 # loading rate (strain rate) damp=0.2 # damping coefficient stabilityThreshold=0.01 # we test unbalancedForce against this value in different loops (see below) young=5e6 # contact stiffness mn,mx=Vector3(0,0,0),Vector3(1,1,1) # corners of the initial packing ## create materials for spheres and plates O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=radians(compFricDegree),density=2600,label='spheres')) O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls')) ## create walls around the packing walls=aabbWalls([mn,mx],thickness=0,material='walls') wallIds=O.bodies.append(walls) ## use a SpherePack object to generate a random loose particles packing global sp sp=pack.SpherePack() sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1) #"seed" make the "random" generation always the same O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp]) ############################ ### DEFINING ENGINES ### ############################ triax=TriaxialStressController( ## TriaxialStressController will be used to control stress and strain. It controls particles size and plates positions. ## this control of boundary conditions was used for instance in http://dx.doi.org/10.1016/j.ijengsci.2008.07.002 maxMultiplier=1.+2e4/young, # spheres growing factor (fast growth) finalMaxMultiplier=1.+2e3/young, # spheres growing factor (slow growth) thickness = 0, ## switch stress/strain control using a bitmask. What is a bitmask, huh?! ## Say x=1 if stess is controlled on x, else x=0. Same for for y and z, which are 1 or 0. ## Then an integer uniquely defining the combination of all these tests is: mask = x*1 + y*2 + z*4 ## to put it differently, the mask is the integer whose binary representation is xyz, i.e. ## "100" (1) means "x", "110" (3) means "x and y", "111" (7) means "x and y and z", etc. stressMask = 7, internalCompaction=True, # If true the confining pressure is generated by growing particles ) newton=NewtonIntegrator(damping=damp) O.engines=[ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()] ), PyRunner(command='stop()',iterPeriod=50), ## We will use the global stiffness of each body to determine an optimal timestep (see https://yade-dem.org/w/images/1/1b/Chareyre&Villard2005_licensed.pdf) GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8), triax, TriaxialStateRecorder(iterPeriod=100,file='WallStresses'+table.key), newton ] #Display spheres with 2 colors for seeing rotations better Gl1_Sphere.stripes=0 if nRead==0: pass ####################################### ### APPLYING CONFINING PRESSURE ### ####################################### #the value of (isotropic) confining stress defines the target stress to be applied in all three directions triax.goal1=triax.goal2=triax.goal3=-10000 # filter the sphere from sp pred = pack.inSphere(center=(0.5,0.5,0.5),radius=0.1) assembly = pack.filterSpherePack(pred,sp,True,mask=100) assembly.toSimulation() # export the sphere as a *.txt def stop(): if O.iter > 5000: O.pause() export.text('sphere.txt',mask=100) # 3D view and controller try: qt.Controller() qt.View() except: pass In this code, I only did a simple example filter a sphere from a cubic sample, because filter a stone particle use the same method. Thanks in advance, Huihuang Xia -- You received this question notification because your team yade-users is an answer contact for Yade. _______________________________________________ Mailing list: https://launchpad.net/~yade-users Post to : yade-users@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp