Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Status: Answered => Solved Huihuang Xia confirmed that the question is solved: Thanks Tina, I will try your advice. Regards, Huihuang -- 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
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Huihuang Xia confirmed that the question is solved: Thanks Tina Asia, that solved my question. -- 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
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Status: Open => Answered Tina Asia proposed the following answer: Hi Huihuang, I just posted a same question here: https://answers.launchpad.net/yade/+question/630281 https://answers.launchpad.net/yade/+question/628632 Jan answered my two questions, and I have tried Jan's methods. They really work well for my simulations. Cheers, Tina @ Yade -- 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
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Status: Answered => Open Huihuang Xia is still having a problem: Thanks Robert, I added the following function at the bottom of session1 and using PyRunner call this function, but the exported text file contains nothing. Here is my code: # -*- coding: utf-8 -*- 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=5000,# 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.,num_spheres,False, 0.95,seed=1) #"seed" make the "random" generation always the same sps=O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp]) #or alternatively (higher level function doing exactly the same): #sp.toSimulation(material='spheres') ### 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=10), ## We will use the global stiffness of each body to determine an optimal timestep (see https://yade-dem.org/w/images/1/1b/Chareyre_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: yade.qt.Controller(), yade.qt.View() ## UNCOMMENT THE FOLLOWING SECTIONS ONE BY ONE ## DEPENDING ON YOUR EDITOR, IT COULD BE DONE ## BY SELECTING THE CODE BLOCKS BETWEEN THE SUBTITLES ## AND PRESSING CTRL+SHIFT+D ### ### 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=-1 def stop(): if O.iter>5000: O.pause() # filter this sp into a sphere pred=pack.inSphere((0.5,0.5,0.5),0.25)
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Status: Open => Answered Robert Caulk proposed the following answer: Hello, I noticed you are not following the same procedure used by [1] to achieve a specified porosity. Also, in your script you are not triaxially compressing your cube before extracting your predicate. And even if you did triaxially compress your cube before extraction, you are extracting your predicate from the original non-compacted spherepack (sp). So "assembly" is a sphere of spheres with the same porosity as the original makeCloud sphere pack. The error you are receiving is probably due to the fact that you are trying to append a sphere pack into the middle of another sphere pack, resulting in maybe some instability and the loss of all spheres from your box. Maybe this is the procedure you need: Follow [1] to get to a cube of specified porosity create a new cube spherepack from the compacted spheres use filterSpherePack to create a spherical spherepack with the cube spherepack and the predicate remove the cube bodies from your simulation add the new spherical spherepack to your simulation Cheers, Robert [1]https://github.com/yade/trunk/blob/e4e757f2e98a620e3177b7a36a1d10f69f6a6a28/examples /triax-tutorial/script-session1.py -- 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
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
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]: --- ValueErrorTraceback (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*100)%1000; ns=int(t*10)%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.,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",
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Huihuang Xia posted a new comment: 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]: --- ValueErrorTraceback (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*100)%1000; ns=int(t*10)%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.,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,
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Status: Answered => Open Huihuang Xia is still having a problem: Hi Robert, Thanks for your reply, but in my simulation, the stone particle was scanned by a 3D laser scanner. https://github.com/yade/trunk/blob/e4e757f2e98a620e3177b7a36a1d10f69f6a6a28/examples /triax-tutorial/script-session1.py As for this example, I have tried this code, but all failed, because the stone particle is a irregular one. 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
Re: [Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
Question #625502 on Yade changed: https://answers.launchpad.net/yade/+question/625502 Status: Open => Answered Robert Caulk proposed the following answer: Hello Huihuang, You can compact a cloud of spheres to a specified porosity by following the same steps used in [1]. However, the minimum possible porosity really depends on your sphere size distribution. A wider distribution of sphere sizes will enable lower porosity and the width of that distribution is controlled by the arguments radius and rRelFuzz in randomDensePack[2] and rMean and rRelFuzz in makeCloud[3]. Cheers, Robert [1]https://github.com/yade/trunk/blob/e4e757f2e98a620e3177b7a36a1d10f69f6a6a28/examples /triax-tutorial/script-session1.py [2]https://yade-dem.org/doc/yade.pack.html#yade.pack.randomDensePack [3]https://yade- dem.org/doc/yade.pack.html#yade._packSpheres.SpherePack.makeCloud -- 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
[Yade-users] [Question #625502]: How to get the minimum porosity of packing using randomDensePack
New question #625502 on Yade: https://answers.launchpad.net/yade/+question/625502 Hi, I am working on a project modeling stone particle using cohesive elements, but in my simulation, randomDensePack always give a low porosity about 0.7. Thus, some numerical simulations using this low porosity packing can not get a satisfactory results. Can you tell me how to insert sub-particles to the profile of a stone particle as many as possible? 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