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

Hi,
I am wondering that how to reach target confining pressure in a triaxial 
simulation.

I followed Bruno's example[1], using radius expansion method. The target 
confining pressure is 100kPa.

After "Isotropic state saved" completed, the mean stress is OK but the stress 
of the top wall could be very different from 100kPa sometimes. In addition, 
after "REACHING A SPECIFIED POROSITY PRECISELY" completed, the stresses changed 
again.

Do you have any suggestions to reach target confining pressure?

Another question is that when I run the same script twice with the same 
parameters, I got different results with the stress of the top wall. Sometimes 
I got a reasonable stress of the top wall (i.e., the stress is close to target 
stress 100kPa), but when I run it again, I got different results. How to solve 
this problem? You may run the following MWE twice to see the difference if you 
are interested, it costs around 2 minutes.
####
from __future__ import division
from yade import pack, plot
import numpy as np

num_spheres=7000
targetPorosity = 0.44
compFricDegree = 25 
finalFricDegree = 18
rate=-0.01
damp=0.4
stabilityThreshold=0.001
young=1e8
eta=0.14
confinement=100e3
KrKt=7.0


mn,mx=Vector3(0,0,0),Vector3(0.07,0.14,0.07)

MatWall=O.materials.append(FrictMat(young=young*10,poisson=0.3,frictionAngle=0,density=0,label='walls'))
MatSand = 
O.materials.append(CohFrictMat(isCohesive=True,young=young,alphaKr=KrKt,alphaKtw=KrKt,\
                                         
poisson=0.3,frictionAngle=radians(30),etaRoll=eta,etaTwist=eta,\
                                         density=2650.0,normalCohesion=1e6, 
shearCohesion=1e6,\
                                         momentRotationLaw=True,label='sand'))

walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)

sp=pack.SpherePack()

sp.makeCloud(mn,mx,-1,0.3,num_spheres,False, 0.95,seed=1)

O.bodies.append([sphere(center,rad,material='sand') for center,rad in sp])

Gl1_Sphere.quality=3

###   DEFINING ENGINES   ###

triax=TriaxialStressController(
    maxMultiplier=1.+2e7/young, 
    finalMaxMultiplier=1.+2e5/young,
        thickness = 0,
        stressMask = 7,
        internalCompaction=True, 
)

newton=NewtonIntegrator(damping=damp)

O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom()],
                [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(),
                 Ip2_FrictMat_FrictMat_FrictPhys()],
                
[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True,always_use_moment_law=True),Law2_ScGeom_FrictPhys_CundallStrack()]
        ),
        
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
        triax,
        TriaxialStateRecorder(iterPeriod=100,file='WallStresses'),
        newton,
]

Gl1_Sphere.stripes=0

triax.goal1=triax.goal2=triax.goal3=-confinement

while 1:
  O.run(1000, True)
  unb=unbalancedForce()
  print 'unbF:',unb,' meanStress: 
',-triax.meanStress,'top:',-triax.stress(triax.wall_top_id)[1]
  if unb<stabilityThreshold and 
abs(-confinement-triax.meanStress)/confinement<0.0001:
        break


print "###     state 1 Isotropic  state completed     ###"

#REACHING A SPECIFIED POROSITY PRECISELY   ###

import sys
while triax.porosity -targetPorosity > 0.000001:
        compFricDegree = 0.95*compFricDegree
        setContactFriction(radians(compFricDegree))
        print "\r Friction: ",compFricDegree," porosity:",triax.porosity,
        sys.stdout.flush()
        O.run(500,1)

print "###  state 2  Reach target porosity completed      ###"

print 'top', -triax.stress(triax.wall_top_id)[1], 'right',\
-triax.stress(triax.wall_right_id)[0],'front',-triax.stress(triax.wall_front_id)[2]

topStress_initial=-triax.stress(triax.wall_top_id)[1]

f = open("outputTopStress.txt", "a+")
f.write('porosity{}_topWallStress{} \n' 
.format(triax.porosity,topStress_initial))
f.close()
###

Thanks,
Leonard
[1]https://github.com/yade/trunk/blob/master/examples/triax-tutorial/script-session1.py



-- 
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