New question #660480 on Yade:
https://answers.launchpad.net/yade/+question/660480

The following code is taken from the example 
"peri3dController_triaxialCompression.py". 
In the second "O.engines", 
(1)What is the function of the code "strain=p3d.strain" ?
(2)In the vector of "stressIdeal", what do the last four items mean? I guess 
they are strain ez, exy, eyz, exz respectively. 

Moreover, 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

from yade import pack,plot,qt

# define material
O.materials.append(FrictMat())

# create periodic assembly of particles
initSize=1.2
sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize),memoizeDb='/tmp/packDb.sqlite')
angle=0
rot=Matrix3(cos(angle),0,-sin(angle), 0,1,0, sin(angle),0,cos(angle))
sp.toSimulation(rot=rot)

# plotting 
plot.live=False
plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','ez','eyz','ezx','exy',),'ez':('sz',)}
def plotAddData():
        plot.addData(
                iter=O.iter,iter_=O.iter,
                sx=p3d.stress[0],sy=p3d.stress[1],sz=p3d.stress[2],
                syz=p3d.stress[3],szx=p3d.stress[4],sxy=p3d.stress[5],
                ex=p3d.strain[0],ey=p3d.strain[1],ez=p3d.strain[2],
                eyz=p3d.strain[3],ezx=p3d.strain[4],exy=p3d.strain[5],
        )

O.dt=PWaveTimeStep()/2

mm,mx=[pt[axis] for pt in aabbExtrema()]
coord=mm,mm,mm



# define the first part of simulation, hydrostatic compression
O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom()],
                
[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),
        NewtonIntegrator(),
        Peri3dController(       goal=(-1e7,-1e7,-1e7, 0,0,0), # Vector6 of 
prescribed final values
                                                        stressMask=0b000111,
                                                        nSteps=500,
                                                        doneHook='print 
"Hydrostatic load reached."; O.pause()',
                                                        youngEstimation=.5e9, # 
needed, when only nonzero prescribed values are stress
                                                        maxStrain=.5,
                                                        label='p3d'
                                                        ),
        PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run(); O.wait()

# second part, z-axis straining and constant transversal stress
O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom()],
                
[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),
        NewtonIntegrator(),
        Peri3dController(       goal=(-1e7,-1e7,-4e-1, 0,0,0), # Vector6 of 
prescribed final values
                                                        stressMask=0b000011,
                                                        nSteps=1000,
                                                        xxPath=[(0,1),(1,1)], # 
the first (time) zero defines the initial value of stress considered nonzero
                                                        yyPath=[(0,1),(1,1)],
                                                        doneHook='print 
"Simulation with Peri3dController finished."; O.pause()',
                                                        maxStrain=.5,
                                                        label='p3d',
                                                        strain=p3d.strain, # 
continue from value reached in previous part
                                                        
stressIdeal=Vector6(-1e7,-1e7,0, 0,0,0), # continue from value reached in 
previous part
                                                        ),
        PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run();O.wait()
plot.plot(subPlots=False)
----------------------------------------------------------------------------------------------------------------------------------------------------------------



Above is the example in your source code. And what i do is like this:

                        O.engines=[
                                ForceResetter(),
                                
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=EnlargeFactor,label='bo1s')]),
                                InteractionLoop(
                                        
[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=EnlargeFactor,label='ig2ss')],
                                        
[Ip2_CpmMat_CpmMat_CpmPhys()],[Law2_ScGeom_CpmPhys_Cpm()]),
                                NewtonIntegrator(),
                                Peri3dController(       
goal=(ag[0],ag[1],ag[2], ag[4],ag[5],ag[3]), # Vector6 of prescribed final 
values
                                                        stressMask=0b000000,
                                                        nSteps=100,
                                                        ),

                                ]
                        O.run();O.wait()
                        check[0]=check[0]+1
                        
                        
                else:
                        O.engines=[
                                ForceResetter(),
                                
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=EnlargeFactor,label='bo1s')]),
                                InteractionLoop(
                                        
[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=EnlargeFactor,label='ig2ss')],
                                        
[Ip2_CpmMat_CpmMat_CpmPhys()],[Law2_ScGeom_CpmPhys_Cpm()]),
                                NewtonIntegrator(),
                                Peri3dController(       
goal=(-3e5,-3e5,arr[2],0,0,0), # Vector6 of prescribed final values
                                                        stressMask=0b000011,
                                                        nSteps=100,
                                xxPath=[(0,1),(1,1)], # the first (time) zero 
defines the initial value of stress considered nonzero
                                yyPath=[(0,1),(1,1)],
                                doneHook='print "Simulation with 
Peri3dController finished."; O.pause()',
                                maxStrain=.5,
                                label='p3d',
                                #strain=p3d.strain, # continue from value 
reached in previous part
                                stressIdeal=Vector6(-3e5,-3e5,arrcc[2], 0,0,0), 
# continue from value reached in previous part
                                                        ),
                        ]

the first engine means we give a 3e5Pa Hydrostatic load using ag which means 
strain.
and then in the second engine, we want to keep constan of the xxpath and yypath 
and  give strain in the zzpath. arrcc[2] means the strain of last commit state 
in zzpath, and arr[2] means the total strain we give at current step in zzpath.
I want to know if i am right with the code above? 

Thanks!


-- 
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     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to