yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #29091
[Question #705807]: Tell me about the batch method
New question #705807 on Yade:
https://answers.launchpad.net/yade/+question/705807
Tell me about the " batch method "
I would like to create a batch method Periodic triaxial test, but it is not calculated accurately.
Could you please modify the program?
###############################################
#batch text
rMean
.05
.10
.15
###############################################
###############################################
#Periodic triaxial test
readParamsFromTable(rMean=.05)
# make rMean, rRelFuzz, maxLoad accessible directly as variables later
from yade.params.table import *
sigmaIso = -200e3
#import matplotlib
#matplotlib.use('Agg')
# generate loose packing
from yade import pack, plot
O.periodic = True
sp = pack.SpherePack()
if 1:
## uniform distribution
sp.makeCloud((0, 0, 0), (0.25, 0.25, 0.2), rMean=rMean, rRelFuzz=.2, periodic=True)
else:
## create packing from clumps
# configuration of one clump
c1 = pack.SpherePack([((0, 0, 0), .03333), ((.03, 0, 0), .017), ((0, .03, 0), .017)])
# make cloud using the configuration c1 (there could c2, c3, ...; selection between them would be random)
sp.makeClumpCloud((0, 0, 0), (2, 2, 2), [c1], periodic=True, num=500)
# setup periodic boundary, insert the packing
sp.toSimulation()
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop([Ig2_Sphere_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()]),
PeriTriaxController(
label='triax',
# specify target values and whether they are strains or stresses
goal=(sigmaIso, sigmaIso, sigmaIso),
stressMask=7,
# type of servo-control
dynCell=True,
maxStrainRate=(10, 10, 10),
# wait until the unbalanced force goes below this value
maxUnbalanced=.1,
relStressTol=1e-3,
# call this function when goal is reached and the packing is stable
doneHook='compactionFinished()'
),
NewtonIntegrator(damping=.2),
PyRunner(command='addPlotData()', iterPeriod=10),
]
O.dt = .5 * PWaveTimeStep()
def addPlotData():
plot.addData(
unbalanced=unbalancedForce(),
i=O.iter,
sxx=triax.stress[0],
syy=triax.stress[1],
szz=triax.stress[2],
exx=triax.strain[0],
eyy=triax.strain[1],
ezz=triax.strain[2],
# save all available energy data
Etot=O.energy.total(),
**O.energy
)
# enable energy tracking in the code
O.trackEnergy = True
# define what to plot
plot.plots = {
'i': ('unbalanced',),
'i ': ('sxx', 'syy', 'szz'),
' i': ('exx', 'eyy', 'ezz'),
# energy plot
' i ': (O.energy.keys, None, 'Etot'),
}
# show the plot
plot.plot()
def compactionFinished():
# 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
triax.goal = (sigmaIso, sigmaIso, -.2)
triax.stressMask = 3
# allow faster deformation along x,y to better maintain stresses
triax.maxStrainRate = (1., 1., .1)
# next time, call triaxFinished instead of compactionFinished
triax.doneHook = 'triaxFinished()'
# do not wait for stabilization before calling triaxFinished
triax.maxUnbalanced = 10
def triaxFinished():
plot.saveDataTxt(O.tags['id'] + '.txt')
waitIfBatch()
O.pause()
###############################################
--
You received this question notification because your team yade-users is
an answer contact for Yade.