porosity change in undrained test

Asked by ceguo

Hi,

I'm conducting an undrained test using peri3dcontroller with goal=(1.e-1,-1.e-1,0,0,0,0) and stressMask=0. So there will be no volume change and the porosity is expected to be constant. However I called utils.porosity() to record the quantity and observed a change from 0.171 to 0.160 (in 2D). Is this due to the large strain (10% axial compression) applied?

Thanks in advance.

Ning

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
ceguo
Solved:
Last query:
Last reply:

This question was reopened

Revision history for this message
ceguo (hhh-guo) said :
#1

When use peri3dcontroller and set goal=(1.e-1, -1.e-1, 0, 0, 0, 0) with stressMask=0, the total volume cannot be guaranteed constant. So there is porosity change.

Now I use O.cell.velGrad. It works much better.

Ning

Revision history for this message
Jan Stránský (honzik) said :
#2

Hi Ning,

I am plannning to incorporate these finite strain effects into
Peri3dController (O.cell now has some), so when time allows it it will be
there :-)
Jan
Dne 25.5.2012 8:11 "ceguo" <email address hidden> napsal(a):

> Question #197775 on Yade changed:
> https://answers.launchpad.net/yade/+question/197775
>
> Status: Open => Solved
>
> ceguo confirmed that the question is solved:
> When use peri3dcontroller and set goal=(1.e-1, -1.e-1, 0, 0, 0, 0) with
> stressMask=0, the total volume cannot be guaranteed constant. So there
> is porosity change.
>
> Now I use O.cell.velGrad. It works much better.
>
> Ning
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#3

PeriTriaxController is not affected by large strain, you could use it.
However, if stressMask=0, then there is probably no point using an engine, since their role is to control stress.
Defining velGrad is enough, as you suggest.

Revision history for this message
ceguo (hhh-guo) said :
#4

Hi Bruno,

After I consolidated the packing using an engine and then sheared it with velGrad, I got different results with or without using an engine. But you pointed no need to use an engine, why I got different results?

Besides, if I want to output some results every 1000 steps, I can use PyRunner. Should PyRunner always be included in an engine?

#================my test script==================================
from yade import pack

O.materials.append(FrictMat(young=150e6,poisson=.3,frictionAngle=.3))
sp = pack.SpherePack()
sp.makeCloud(minCorner=(0,0,0),maxCorner=(20,20,0),rMean=.16,rRelFuzz=.5,num=2000,periodic=True,seed=1)
sp.toSimulation()
O.cell.hSize = Matrix3(20,0,0, 0,20,0, 0,0,1)
for p in O.bodies:
   p.state.blockedDOFs = 'zXY'
   p.state.mass = 2650*pi*p.shape.radius**2
O.dt = .5*utils.PWaveTimeStep()

O.engines = [
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb()]),
   InteractionLoop(
      [Ig2_Sphere_Sphere_Dem3DofGeom()],
      [Ip2_FrictMat_FrictMat_FrictPhys()],
      [Law2_Dem3DofGeom_FrictPhys_CundallStrack()]
   ),
   Peri3dController(
      goal=(-1.e5,-1.e5,0,0,0,0),
      stressMask=0b100011,
      nSteps=20000,
      maxStrain=1.,
      label='consolidation'
   ),
   NewtonIntegrator(damping=.7)
]
O.run()
O.wait()

print utils.stressTensorOfPeriodicCell()

O.materials[0].frictionAngle=.5
dstrain=Matrix3(1.e-2,0,0, 0,-1.e-2,0, 0,0,0)
O.cell.velGrad=dstrain/(20000*O.dt)
#O.engines=[
# ForceResetter(),
# InsertionSortCollider([Bo1_Sphere_Aabb()]),
# InteractionLoop(
# [Ig2_Sphere_Sphere_Dem3DofGeom()],
# [Ip2_FrictMat_FrictMat_FrictPhys()],
# [Law2_Dem3DofGeom_FrictPhys_CundallStrack()]
# ),
# NewtonIntegrator(damping=.7)
#]
O.run(20000,True)
print utils.stressTensorOfPeriodicCell()
#=============The end========================================

If I uncomment the scripts of defining the shear engine, I will get same stress after consolidation (same initial state for shear) but different stress after shear.

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#5

I don't know why you get different results. Jan is the specialist of Peri3dController, I don't know its behavior very well.
I also remember getting unexpected results with stressTensorOfPeriodicCell().
You may try the getStress() function I added yesterday, and tell us if it gives different results.

Another thing is Law2_Dem3DofGeom_FrictPhys_CundallStrack is not well tested, I would recommend using Law2_ScGeom_FrictPhys_CundallStrack instead.

Revision history for this message
ceguo (hhh-guo) said :
#6

Thanks Bruno,

When ScGeom is used instead of Dem3DofGeom, I have problem in using Peri3dController (always results in zero stress). I know in PeriTriaxController, I can set `reversedForce=True` to solve this problem. But in Peri3dController, I don't know how to do.

Besides, if I want to use PeriTriaxController or PeriIsoCompressor, I have other problems since I am conducting 2d simulations. Also I don't want to use `doneHook` in the end of the engine.

Ning

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#7

It is not clear for me what you are trying to achieve.
If your loading path is coaxial, why would you need Peri3d engine? And if you impose only strain rates, why do you need engines at all? What is the problem with doneHook?

I don't understand very well what problems you have but I think that using Law2_Dem3DofGeom_FrictPhys_CundallStrack is a good way to get even more problems. We should remove it, in fact.

Revision history for this message
ceguo (hhh-guo) said :
#8

Hi Bruno,

Thanks for your reply. I have to use an engine to prepare the sample to an initial state with certain stress level (consolidation). Peri3d or PeriTriax serves this purpose. After that, I will shear the packing with certain strain increment (so it's strain controlled afterwards and the strain increments could appear in both diagonal and off-diagonal directions, which is achievable by using cell.velGrad).

Now by referring to Peri3dController (the modification is made possibly by Jan), I set doneHook could be empty. So this problem is solved.

As you suggested, I will use ScGeom and PeriTriaxController. And I'm running a coupled problem. YADE is called within another code to return stress rather than being executed standalone. That's why I want to get rid of doneHook. To get stress, I can use your newly added getStress (stressTensorOfPeriodicCell seems not workable for ScGeom, is that True?) and maybe I need to symmetrize it further.

Ning

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#9

Ok.
If the tolerance is 0, then doneHook will never be called.
If engine.isDead is turned true after the compaction, then the engine will
do nothing.