New question #707253 on Yade: https://answers.launchpad.net/yade/+question/707253
Hello everyone, I want to conduct a biaxial test for sands with rolling resistance (by CohFrictMat). For a dense packing, I need to set the rolling resistance and friction angle to 0 in the compaction period, and then activate them to the real value in shearing period. The modification of friction angle can be achieved by "setContactFriction". But for rolling resistance, I'm not sure the following is the right approach: set the value of "alaways_use_moment_law" as "false" in compaction period and modify it as "true" in shearing period. This approach draws on the example named "triax-cohesive" [1]. And this method is not quite the same as the previous approaches in the Q&A (for example, [2]). Is there any difference between these two approaches? ####Here is my code#### from __future__ import print_function from yade import pack,qt,plot import matplotlib; matplotlib.rc('axes',grid=True) import pylab O.materials.append(CohFrictMat(young=1.e9,poisson=.8,alphaKr=1.0,frictionAngle=.0,momentRotationLaw=True,etaRoll=0.3,label='balls')) sp = pack.SpherePack() dmax=0.030 size=5*dmax thickness=size/3.0 psdSizes=[0.0020,0.0048,0.0076,0.0104,0.0132,0.0160,0.0188,0.0216,0.0244,0.0272,0.0300] psdCumm =[0.0000,0.3228,0.4924,0.6081,0.6961,0.7671,0.8266,0.8778,0.9228,0.9629,1.0000] sp.makeCloud(minCorner=(0,0,thickness/2),maxCorner=(size,size,thickness/2),psdSizes=psdSizes,psdCumm=psdCumm,num=1400,periodic=True,seed=1,distributeMass=True) sp.toSimulation() O.cell.hSize = Matrix3(size,0,0, 0,size,0, 0,0,thickness) # RVE scale up print(len(O.bodies)) for p in O.bodies: p.state.blockedDOFs = 'zXY' p.state.mass = 2650 * thickness * pi * p.shape.radius**2 # 0.1 = thickness of cylindrical particle # RVE scale up inertia = 0.5 * p.state.mass * p.shape.radius**2 p.state.inertia = (.5*inertia,.5*inertia,inertia) O.dt = utils.PWaveTimeStep() print(O.dt) O.engines = [ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom6D()], [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys()], [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(always_use_moment_law=False, useIncrementalForm=True)] ), PeriTriaxController( dynCell=True, goal=(-4.e4,-4.e4,0), stressMask=3, relStressTol=.001, maxUnbalanced=.001, maxStrainRate=(.5,.5,.0), doneHook='compactionFinished()', label='biax' ), NewtonIntegrator(damping=.1), PyRunner(command='addPlotData()',iterPeriod=100), ] def addPlotData(): plot.addData( sx=biax.stress[0], sy=biax.stress[1], sz=biax.stress[2], ex=biax.strain[0], ey=biax.strain[1], ez=biax.strain[2], ev=biax.strain[0]+biax.strain[1]+biax.strain[2], eyp=-biax.strain[1], sxp=-biax.stress[0], syp=-biax.stress[1], i=O.iter, unbalanced=utils.unbalancedForce(), totalEnergy=O.energy.total(), **O.energy # plot all energies ) # enable energy tracking in the code O.trackEnergy=True plot.plots = { 'i': (('unbalanced', 'go'), None, 'kinetic'), ' i': ('ex', 'ey', 'ez', None, 'sx', 'sy', 'sz'), 'eyp ': ('ev'), ' eyp ': ('sxp', 'syp', None, 'ev'),###'a', ' a', 'a ', ' a ' means the different position of each plot } plot.plot() def compactionFinished(): print(biax.stress) print(O.cell.hSize) vr = yade._utils.voidratio2D(zlen=thickness) print(vr) O.engines[2].lawDispatcher.functors[0].always_use_moment_law=True setContactFriction(radians(33)) # set the current cell configuration to be the reference one O.cell.trsf=Matrix3.Identity # change control type: keep constant confinement in x,y, 20% compression in z biax.goal=(-4.e4,-0.1,0) biax.stressMask=1 # allow faster deformation along x,y to better maintain stresses # RVE scale up, y value should be scale down a lot biax.maxStrainRate=(1.0,0.05,0.0) # next time, call triaxFinished instead of compactionFinished biax.doneHook='biaxFinished()' # do not wait for stabilization before calling triaxFinished biax.maxUnbalanced=10 def biaxFinished(): print(O.cell.hSize) vr = yade._utils.voidratio2D(zlen=thickness) # RVE scale up print(vr) print('Finished') O.pause() [1]https://gitlab.com/yade-dev/trunk/-/blob/master/examples/test/triax-cohesive.py [2]https://answers.launchpad.net/yade/+question/697139 -- 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