Combining TriaxialStressController and Capillary Engine

Asked by Hien Nguyen

Hi all,

I'm trying to simulate the 3D triaxial test with the effect of water using Linear Model Capillary Law. My sample code is given below.
The companion files I got from (1) for testing purpose.

First I want to compact a package with no effect of capillary until I reach a predefined confining stress, let's say 5 kPa.
Second, from the end of the first state, I'll switch on the capillary engine and start the test.
I'm having some issues in first step:
a) When I choose the internalCompaction = True, particles instead of growing, they are shrinking down after a few time steps.
b) I printed out the stress acting on the wall, they seems to be all 0, they cannot reach the goal value in the TriaxialStressController Engine.

--------------
Code:
from yade import pack, plot
from yade import utils

num_spheres=500
mn,mx=Vector3(-0.1,-0.1,-0.1),Vector3(0.1,0.1,0.1)
thick = 0 # thickness used for walls
compFricDegree = 1 # to generate a super dense specimen
wall_velocity = 0.5

rate=0.01
damp=0.06

local_damping = 0.006

## create material
O.materials.append(FrictMat(young=50e6,poisson=0.5,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
O.materials.append(FrictMat(young=50e6,poisson=0.5,frictionAngle=0,density=0,label='walls'))

## create walls around the packing
walls=utils.aabbWalls([mn,mx],thickness=thick,oversizeFactor=2,material='walls')
wallIds=O.bodies.append(walls)

sp=pack.SpherePack()
sp.makeCloud(mn,mx,0.005,0.3,num_spheres,False,0.8,seed=1)
O.bodies.append([sphere(c,r,material='spheres') for c,r in sp])

volume = (mx[0]-mn[0])*(mx[1]-mn[1])*(mx[2]-mn[2])
mean_rad = pow(0.09*volume/num_spheres,0.3333)

O.dt=.5*utils.PWaveTimeStep()
O.usesTimeStepper=True

triax=TriaxialStressController(
    maxMultiplier =1.001,
    finalMaxMultiplier =1.000001,
    thickness = thick,
    radiusControlInterval =10,
    stressMask = 7,
    max_vel =0.01,
    strainDamping =0.75,
    stressDamping =0.01
)

O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
        InteractionLoop(
            [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
            [Ip2_FrictMat_FrictMat_CapillaryPhys(label='capillary_phys')],
            [Law2_ScGeom_FrictPhys_CundallStrack(label='cundall_law')] #for linear model only
        ),
        Law2_ScGeom_CapillaryPhys_Capillarity(capillaryPressure=1000.0,label='cap_law'),#for linear model only
        GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8, defaultDt=4*utils.PWaveTimeStep()),
        triax,
        NewtonIntegrator(damping=local_damping,gravity=(0,0,0))
    ]

cap_law.dead=True
cundall_law.neverErase=True
triax.internalCompaction = True

from yade import qt

triax.stressMask = 7
triax.goal1 = 5000
triax.goal2 = 5000
triax.goal3 = 5000
qt.View()
-------------------
or view with syntax highlight http://pastebin.com/fGFYpmzS

I tried alternative way by cap_law.dead=False and put capillaryPressure = 0 but no luck.

My system is:
Mint 17 64bit
YADE daily 2017a

Thanks in advance for your comments and help!

Hien

(1) https://yade-dem.org/w/images/d/d2/CapillaryFiles2016.tar.gz

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Hien Nguyen
Solved:
Last query:
Last reply:
Revision history for this message
Jérôme Duriez (jduriez) said :
#1

Hi,

Since Law2_ScGeom_CapillaryPhys_Capillarity is dead in your script, your issue is actually not related with the capillary model. On the other hand, all stress and strains values in YADE are now considered as negative in compression, and triax.goal1/2/3 should thus equal -5000 (with the minus sign !) to reach 5 kPa confining pressure.

Jerome

Revision history for this message
Hien Nguyen (giahien) said :
#2

Never know that fact, so then that's why internalCompaction is revert.
Thanks you for the elucidation.
Problem solved.
Hien