← Back to team overview

yade-users team mailing list archive

Re: [Question #295225]: Cohesion Distribution

 

Question #295225 on Yade changed:
https://answers.launchpad.net/yade/+question/295225

    Status: Answered => Open

Seti is still having a problem:
Thanks Jerome, 
I tried to go for your recommendation to use "MatchMaker" however I am not sue how I should use it for various cohesion, what I have seen in documentation, the MatchMaker have been used to assign different frictions , however I have done below attempt which to me is incomplete, would you please advise me how should I use MatchMaker to assign different cohesion:


here is the snip of code: 

# Batch execution
nRead=utils.readParamsFromTable(
        num_spheres1=500,# number of spheres len(O.bodies) to verify: 10006 = 10000 particles + 6 walls is correct
        num_spheres2=500,# number of spheres len(O.bodies) to verify: 10006 = 10000 particles + 6 walls is correct
        compFricDegree = 30, # contact friction during the confining phase (1)
        unknownOk=True,
        isoForce=100000, # stress for the isotropic compression phase (1)
        conStress=100000 # confinement stress, for the deviatoric loading session (2)
)
from yade.params import table
 
num_spheres1=500                  # number of spheres called from table
num_spheres2=500
targetPorosity = 0.6                      #the porosity we want for the packing (3 specimens: (Ei,n) = (1,0.382), (2,0.387), (3,0.409) )
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.01                                                                # loading rate (strain rate)
damp=0.3                                                               # damping coefficient
stabilityThreshold=0.001                                # initial value: 0.001
key='_kozooooooooooooooocki,,100kpa,100kpa,30,30,30e9_0.085,0.085,0.085,0.8,D=varried,clumping 3,0.z5 '                         # simulation's name here
young=30e9                                                     # contact stiffness k_n/Ds
mn,mx=Vector3(-0.085,-0.085,-0.085),Vector3(0.085,0.085,0.085) # corners of the initial packing
thick = 0.01                                                    # thickness of the plates
 
 
## create materials for spheres and plates
O.materials.append(FrictMat(young=young,poisson=0.3,frictionAngle=radians(compFricDegree),momentRotationLaw=True,etaRoll=1,density=2600,isCohesive=True,alphaKr=0.05,label='spheres1'))
O.materials.append(CohFrictMat(young=young,poisson=0.3,frictionAngle=radians(compFricDegree),momentRotationLaw=True,etaRoll=1,density=2600,isCohesive=True,alphaKr=0.05,label='spheres2'))
O.materials.append(FrictMat(young=young,poisson=0.3,frictionAngle=0,density=0,label='walls'))
 
## create walls around the packing
walls=utils.aabbWalls([mn,mx],thickness=thick,oversizeFactor=1.5,material='walls')
wallIds=O.bodies.append(walls)
 
## use a SpherePack object to generate a random loose particles packing
sp=pack.SpherePack()
psdSizes=[0.002,0.003,0.004,0.005,0.006,0.007,0.008] # (sizes or radii of the grains vary from 2mm to 9.5mm)
#psdCumm=[1,9,25,50,69,90,95,100] # the correspondent amount (percentage) of each diameter, uncomment for yade-stable
psdCumm=[0.14,0.28,0.34,0.50,0.65,0.85,1.00] # for the code not using percentage, e.g. yade-daily
...

....

....

O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom(),,Ig2_Wall_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom()],
                [Ip2_FrictMat_FrictMat_MindlinPhys(en=MatchMaker(matches=((spheres1,spheres2,.6),(spheres2,spheres2,.55))),es=MatchMaker(matches=((spheres1,spheres2,.6),(spheres2,spheres2,.55))),alphaKr=MatchMaker(matches=((spheres1,spheres2,.1),(spheres2,spheres2,.3))),krot=3),Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(label="cohesiveIp")], [Law2_ScGeom_MindlinPhys_Mindlin(includeMoment=True,includeAdhesion=True)],
                [Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGeom6D_CohFrictPhys_CohesionMoment(
			useIncrementalForm=True, #useIncrementalForm is turned on as we want plasticity on the contact moments
			always_use_moment_law=False,  #if we want "rolling" friction even if the contact is not cohesive (or cohesion is broken), we will have to turn this true somewhere
			label='cohesiveLaw')]
        ),
        ## 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.5),
        triax,
        TriaxialStateRecorder(iterPeriod=50,file='WallStresses'+key),
        newton
]
 
Thanks for your time 
Seti

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