yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #17851
Re: [Question #670862]: Applying normal strain rates in PeriTriaxController engine
Question #670862 on Yade changed:
https://answers.launchpad.net/yade/+question/670862
Mehdi Pouragha posted a new comment:
Here is a simple example. 2D though. As long as the maxStrain rate is
0.5, it is maintained. But if I increase it to 1000 then the current
rate changes.
Of course these rates are meaningless when we have such a small sample.
As the sample becomes larger, the maximum rate at which the strain rate
follows the maxStrainRate drastically decreases.
Mehdi
----------------------------------------------------
from yade import pack,qt
from yade import plot
import numpy as np
## computing sample size
num_spheres=500# number of spheres
key='_shearTest_'
compFricDegree = 10
finalFricDegree = 30
stabilityThreshold=0.01
young=1e6
max_Strainrate = 0.5
rMin,rMax = 0.5e-3,1.0e-3
vSol = num_spheres * pi * ((rMin + rMax)/2.)**2
volTot = vSol / (1-0.9)
size = volTot**(1./2.)
O.materials.append(FrictMat(young=young,poisson=1,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
O.periodic=True
#O.cell.setBox(size,size,1)
O.cell.hSize=Matrix3(size,0,0, 0,size,0, 0,0,1)
sp=pack.SpherePack()
radius=(rMin + rMax)/2.
num=sp.makeCloud((0,0,0.5),(size,size,0.5),radius,.2,num_spheres,periodic=True) # min,max,radius,rRelFuzz,spheresInCell,periodic
#O.bodies.append([sphere(s[0],s[1]) for s in sp])
sp.toSimulation(material='spheres')
for k in O.bodies:
if isinstance(k.shape, Sphere): k.state.blockedDOFs='zXY'
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()],verletDist=.05*radius),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]
),
PeriTriaxController(dynCell=True,mass=0.2,maxUnbalanced=0.01,relStressTol=0.001,globUpdate=5,maxStrainRate=[max_Strainrate,max_Strainrate,max_Strainrate],label='triax'),
NewtonIntegrator(damping=.2),
]
O.dt=PWaveTimeStep()
## compaction
conf = -5 #kPa
triax.stressMask=3
triax.goal = [conf,conf,0]
stabilityThreshold = 1e-2
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,' xx stress: ',triax.stressTensor[0,0]
if unb<stabilityThreshold and abs((conf-triax.stressTensor[0,0])/conf)<0.01 and abs((conf-triax.stressTensor[1,1])/conf)<0.01:
break
triax.stressMask=4 ## stress controlled along z
deps = -0.1
eps_xx, eps_yy = triax.strain[0], triax.strain[1]
triax.goal=[eps_xx+deps, eps_yy+deps ,0]
O.run(2,True)
print 'current maxStrainRate=', triax.maxStrainRate
print 'current strain rates: xx=', O.cell.velGrad[0,0], ' yy=',O.cell.velGrad[1,1], ' zz=', O.cell.velGrad[2,2]
ps_xx, eps_yy = triax.strain[0], triax.strain[1]
triax.goal=[eps_xx+deps, eps_yy+deps ,0]
print 'setting triax.maxStrainRate=1000'
triax.maxStrainRate = [1000,1000,1000]
O.run(2,True)
print 'current maxStrainRate=', triax.maxStrainRate
print 'current strain rates: xx=', O.cell.velGrad[0,0], ' yy=',O.cell.velGrad[1,1], ' zz=', O.cell.velGrad[2,2]
--
You received this question notification because your team yade-users is
an answer contact for Yade.