← Back to team overview

yade-users team mailing list archive

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.