← Back to team overview

yade-users team mailing list archive

Re: [Question #705807]: Tell me about the batch method

 

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

内山康太郎 posted a new comment:
I was able to assemble a complete file.
I leave it here for your reference.

###################################################
#batch table
rMean 
.008 
.009
.010
###################################################

###################################################
#Program file

#encoding: utf-8 # periodic triaxial test simulation
# The initial packing is either
#
# 1. random cloud with uniform distribution, or
# 2. cloud with specified granulometry (radii and percentages), or
# 3. cloud of clumps, i.e. rigid aggregates of several particles
#
# The triaxial consists of 2 stages:
#
# 1. isotropic compaction, until sigmaIso is reached in all directions;
#    this stage is ended by calling compactionFinished()
# 2. constant-strain deformation along the z-axis, while maintaining
#    constant stress (sigmaIso) laterally; this stage is ended by calling
#    triaxFinished()
#
# Controlling of strain and stresses is performed via PeriTriaxController,
# of which parameters determine type of control and also stability
# condition (maxUnbalanced) so that the packing is considered stabilized
# and the stage is done.
#
readParamsFromTable(rMean=.008)
# 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')
    O.pause() O.run()    
waitIfBatch() O.saveTmp()
###################################################

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