New question #707043 on Yade: https://answers.launchpad.net/yade/+question/707043
Hi, everyone! I want to simulate the combination of granular particles and rocks. That is to say, one part of a sample is soil particles, and the other part is rock consist of the bonded particles. Firstly, I import the particle using ‘ymport.text’. Then, I create two types of sphere materials (the tensileStrength and cohesion between the materials are different) and assign them to the particles in percentage terms. Here is the mats: mat1=JCFpmMat(type=1,young=Young,poisson=Poisson,frictionAngle=radians(compFricDegree),density=Density,tensileStrength=10e4,cohesion=45e4,label='spheres1') mat_1=O.materials.append(mat1) mat2=JCFpmMat(type=1,young=Young,poisson=Poisson,frictionAngle=radians(compFricDegree),density=Density,tensileStrength=0,cohesion=0,label='spheres2') mat_2=O.materials.append(mat2) How to set the tensileStrength and cohesion between the particles of different mats? For example, is the tensileStrength 10e4, 0 or other value between the particles of mat1 and mat2? Is the ‘matchmaker’ needed in the engine here? Here is my script. #### packing (previously constructed) PACKING='Position.txt' #### name of output files OUT=PACKING+'_1MPa_r0.02' from yade import pack, timing,ymport ############################################ ### DEFINING VARIABLES AND MATERIALS ### ############################################ ## Sphere material Young=300e6 Density=2650 Poisson=0.3 compFricDegree = 0 finalFricDegree = 27 AvgRadius=0.0002 intR=1 TENS=0.1e6 COH=0.45e6 TENS0=0 COH0=0 ## wall material WYoung=600e7 WPoisson=0.5 WDensity=0 WFrictionAngle=0 damp=0.7 # damping coefficient stabilityThreshold=0.001 # we test unbalancedForce against this value in different loops (see below) # corners of the initial packing size=0.05 mn,mx=Vector3(0,0,0),Vector3(size,size,size) #mn2,mx2=Vector3(0,0,0.0025),Vector3(size,1.5*size,0.0025) O.materials.append(JCFpmMat(type=0,young = WYoung , poisson = WPoisson , frictionAngle = radians(WFrictionAngle) , density = WDensity,label='walls')) #O.materials.append(JCFpmMat(type=1,young = Young , poisson = Poisson , frictionAngle = radians(compFricDegree),density = Density,tensileStrength=TENS,cohesion=COH,label='spheres')) walls=aabbWalls([mn,mx],thickness=0.001,material='walls') wallIds=O.bodies.append(walls) mat1=JCFpmMat(type=1,young = Young , poisson = Poisson , frictionAngle = radians(compFricDegree),density = Density,tensileStrength=TENS,cohesion=COH,label='spheres1') mat_1=O.materials.append(mat1) mat2=JCFpmMat(type=1,young = Young , poisson = Poisson , frictionAngle = radians(compFricDegree),density = Density,tensileStrength=TENS0,cohesion=COH0,label='spheres2') mat_2=O.materials.append(mat2) O.bodies.append(ymport.text(PACKING,scale=1.,shift=Vector3(0,0,0))) sphere1=[] sphere2=[] for b in O.bodies: if not isinstance(b.shape,Sphere): # change material only on spheres continue if random.random() < 0.1: b.mat = mat1 b.shape.color = (1,0,0) #b.state.mass*=mat1.density/mat1.density sphere1.append(b.id) else: b.mat = mat2 b.shape.color = (0,1,1) #b.state.mass*=mat2.density/mat1.density sphere2.append(b.id) R=0 Rmax=0 numSpheres=0. for o in O.bodies: if isinstance(o.shape,Sphere): numSpheres+=1 R+=o.shape.radius Rmean=R/numSpheres ############################ ### DEFINING ENGINES ### ############################ triax=TriaxialStressController( #wall_back_activated = False, #for 2d simulation #wall_front_activated = False, thickness = 0, stressMask = 7, internalCompaction=False, # If true the confining pressure is generated by growing particles ) newton=NewtonIntegrator(damping=damp) ####################################### ### APPLYING CONFINING PRESSURE ### ####################################### #the value of (isotropic) confining stress defines the target stress to be applied in all three directions ################################################### ### REACHING A SPECIFIED POROSITY PRECISELY ### ################################################### triax.goal1=triax.goal2=triax.goal3=-100000 setContactFriction(radians(finalFricDegree)) O.engines=[ ForceResetter(), InsertionSortCollider([Bo1_Box_Aabb(),Bo1_Sphere_Aabb(aabbEnlargeFactor=intR,label='Saabb')]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intR,label='SSgeom'),Ig2_Box_Sphere_ScGeom()], [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1,label='interactionPhys')], [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,Key=OUT,label='interactionLaw')] ), GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8), triax, newton #PyRunner(iterPeriod=int(saveData),initRun=True,command='recorder()',label='data'), ] while 1: O.run(1000, True) #the global unbalanced force on dynamic bodies, thus excluding boundaries, which are not at equilibrium unb=unbalancedForce() print ('unbalanced force:',unb,' mean stress: ',triax.meanStress," porosity:",triax.porosity,) if unb<0.000001 and abs(-100000-triax.meanStress)/100000<0.001: break O.save('2.yade.gz') O.save('2.yade.bz2') -- 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