about measure seepage discharge in triaxial test

Asked by Ziyu Wang

Hello,
I want to conduct fluid-solid coupling triaxial compression simulation, and analyze the variation law of seepage flow with sample failure during compression.I have made some attempts, and several questions are as follows
1. I tried to record flow.getBoundaryFlux(4) and (5) to measure the seepage flow of two boundaries in Z direction during the triaxial compression process(I'll put part of the code at the end),but I found that these two values remained constant throughout the process (about - 1.02 and 1.02 in my simulation).It puzzles me.
2. I also want to know what is the unit of the value measured by flow.getBoundaryFlux.(I checked the help document of Yade and couldn't find the relevant results)
By the way,is this function(flow.getBoundaryFlux) used to measure permeability in flowengine.
Thanks for help!

----------------Some code about flowengine------------------
flow.dead=0
flow.debug=False
flow.fluidBulkModulus=2.2e9
flow.permeabilityFactor=-1e-5
flow.decoupleForces = False
flow.meshUpdateInterval=100
flow.useSolver=4
flow.viscosity=0.001
flow.bndCondIsPressure=[0,0,0,0,1,1]
flow.bndCondValue=[0,0,0,0,0,-5e6]
---------------------------------------------------------------------------

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Robert Caulk
Solved:
Last query:
Last reply:
Revision history for this message
Robert Caulk (rcaulk) said :
#1

Hello,

Please do not ask 4 separate questions in one thread. Please read our forum guidelines [1].

>but I found that these two values remained constant throughout the process (about - 1.02 and 1.02 in my simulation).It puzzles me.

Well ya, you are setting the permeability constant. Please review the command you are using for permeability [2].

>2. I also want to know what is the unit of the value measured by flow.getBoundaryFlux.(I checked the help document of Yade and couldn't find the relevant results)

Yade is generally unit-less. You decide the units based on your input parameters. Yade is just a calculator. Generally it is recommended to stick to SI input units so that your results are in SI units. i.e. this flux would be m^3/s in SI units.

>By the way,is this function(flow.getBoundaryFlux) used to measure permeability in flowengine.

I dont quite understand, that is the function used to measure fluid fluxes. You need fluid fluxes to compute permeability.

Cheers,

Robert

[1]https://www.yade-dem.org/wiki/Howtoask
[2]https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.FlowEngine.permeabilityFactor

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

> the unit of the value measured by flow.getBoundaryFlux

It is in velocity * area.
B

Revision history for this message
Ziyu Wang (ziyuwang1) said :
#3

Hello,
First of all, I would like to express my sincere apologies. What I'm worried about is that it will be complicated to divide into several questions.I will try to avoid this situation in my subsequent questions

>Well ya, you are setting the permeability constant. Please review the command you are using for permeability [2].

>>I checked [2] and seemed to understand something.The problem is that I set this value to negative, so the permeability is constant, right?(In other words, it should be positive to change the Seepage?)

>I dont quite understand, that is the function used to measure fluid fluxes. You need fluid fluxes to compute permeability.

I see,I will use this value to calculate permeability.

Thanks Robert and Bruno,I understand the problem of the unit.

Best wishes!

Revision history for this message
Ziyu Wang (ziyuwang1) said :
#4

Hello,everyone.

I tried changing flow.permeabilityFactor to a positive value and other values.However,It seems that the data I record is always constant( flow.getBoundaryFlux(4) and (5) ).
In my understanding, with the increase of axial pressure in the process of triaxial compression, the permeability will change, which should not be a constant value.
How to deal with it?

Thanks.

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

> I tried changing flow.permeabilityFactor to a positive value and other values.However,It seems that the data I record is always constant

Please post a script showing what you say.
You "tried changing" or you "changed"?
It "seems" it is the same or it "is" the same?
Etc.

Bruno

Revision history for this message
Ziyu Wang (ziyuwang1) said :
#6

Hello,I'm sorry I didn't make it clear,I will post my MWE in the end(The model is a cube generated by RandomDensePack,composed of 5000 particles with a side length of 0.05m )

Yes,I changed the value of flow.permeabilityFactor to 1,2,3,5,0.01,etc..
In fact, the point of my question is that the flow.getboundaryflux(4) and (5) recorded by plot.addData() has not changed in the whole process of triaxial compression failure (that is, it has always been a constant value). For example,When I set flow.permeabilityFactor to 5, the measured values(flow.getboundaryflux(4) and (5)) are always about - 73 and 73 throughout the triaxial compression process. However, as far as I know, the permeability should be a variable value in the process of triaxial compression failure

-----------------script----------------------
from yade import pack, ymport, plot, utils, export, timing
Wy=-10e6
Sy=-2e6
rate=-0.1
damp=0.4
stabilityThreshold=0.001
key='_triax_base_'
young=3000e9
name='JCFPM_triax'
compFricDegree=30
poisson=0.4

mn,mx=Vector3(0,0,0),Vector3(0.05,0.05,0.05)
O.materials.append(JCFpmMat(type=1,density=2640,young=young,poisson=poisson,tensileStrength=160e6,cohesion=1600e6,frictionAngle=radians(10),label='sphere'))
O.materials.append(JCFpmMat(type=1,frictionAngle=0,density=0,label='wall'))

walls=aabbWalls([mn,mx],thickness=0,material='wall')
wallIds=O.bodies.append(walls)
O.bodies.append(ymport.text('packing-JCFPM.spheres',scale=1,shift=Vector3(0,0,0),material='sphere',color=(0.6,0.5,0.15)))

triax=TriaxialStressController(
 maxMultiplier=1.+4e8/young,
 finalMaxMultiplier=1.+4e7/young,
 thickness = 0,
 stressMask = 7,
 internalCompaction=True,
)
newton=NewtonIntegrator(damping=damp)
O.timingEnabled=True

def recorder():
 yade.plot.addData(
 i=O.iter,
 e11=-triax.strain[0],#e22=-triax.strain[1],
 e33=-triax.strain[2],
 s11=-triax.stress(triax.wall_right_id)[0],#0+边界id为right
 s33=-triax.stress(triax.wall_front_id)[2],#2+边界id为front
 numberTc=interactionLaw.nbTensCracks,
 numberSc=interactionLaw.nbShearCracks,
 unb=unbalancedForce(),
 flux1=flow.getBoundaryFlux(4),
 flux2=flow.getBoundaryFlux(5)
)
 plot.saveDataTxt('triax_JCFPM_HM_Wy=10.0Mpa,Sy=2.0MPa')

def stop_condition():
 extremum=max(abs(s) for s in plot.data['s33'])
 s=abs(plot.data['s33'][-1])
 e=abs(plot.data['e33'][-1])
 if e < 0.001:
  return
 if abs(s)/abs(extremum) < 0.9 :
  print('Max stress and strain:',extremum,e)
  presentcohesive_count = 0
  for i in O.interactions:
          if hasattr(i.phys, 'isCohesive'):
               if i.phys.isCohesive == 1:
                   presentcohesive_count+=1
  print('the number of cohesive bond now is:',presentcohesive_count)
  O.pause()

O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.5,label='is2aabb'),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1.5,label='ss2sc'),Ig2_Box_Sphere_ScGeom()],
  [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys()],
  [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,Key='triax_JCFPM_HM',label='interactionLaw')]
 ),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.7),
 triax,
 FlowEngine(dead=1,label='flow'),
 PyRunner(iterPeriod=int(1000),initRun=True,command='recorder()',label='data',dead=0),
 PyRunner(iterPeriod=1000,command='stop_condition()',dead=0),
 VTKRecorder(iterPeriod=500,initRun=True,fileName='triax/JFFPM-',recorders=['spheres','jcfpm','cracks'],Key='triax',label='vtk',dead=1),
 newton,
]

O.step()
ss2sc.interactionDetectionFactor=-1
is2aabb.aabbEnlargeFactor=-1
cohesiveCount = 0
for i in O.interactions:
 if hasattr(i.phys, 'isCohesive'):
              if i.phys.isCohesive == True:
                     cohesiveCount+=1
print('the origin total number of cohesive bond is:',cohesiveCount)
triax.goal1=triax.goal2=triax.goal3=Wy

while 1:
 O.run(1000,1)
 unb=unbalancedForce()
 print('unbalanced force:',unb,'mean stres:',triax.meanStress)
 if unb<stabilityThreshold and abs(Wy-triax.meanStress)/abs(Wy)<0.001:
  break

yade.timing.reset()
flow.dead=0
flow.debug=False
flow.fluidBulkModulus=2.2e9
flow.permeabilityFactor=5
flow.decoupleForces = False
flow.meshUpdateInterval=-1
flow.useSolver=4
flow.viscosity=0.001
flow.bndCondIsPressure=[0,0,0,0,1,1]
flow.bndCondValue=[0,0,0,0,0,Sy]

triax.internalCompaction=False
flow.emulateAction()
triax.stressMask=3
triax.goal1=Wy
triax.goal2=Wy
triax.goal3=rate

plot.plots={'e33':(('s33','g'),None,('unb','b')),'i':(('numberTc','b'),('numberSc','r'),None,('s33','y'))}
plot.plot(subPlots=False)
O.run()
-------------------------------------------------------

Revision history for this message
Ziyu Wang (ziyuwang1) said :
#7

Sorry..Can anyone provide some ideas.. Thanks a lot!

Revision history for this message
Best Robert Caulk (rcaulk) said :
#8

>>flow.meshUpdateInterval = -1

This means your mesh never updates. If your mesh never updates, then your permeability matrix never updates.

Thank you for reading the documentation that we have furnished.

cheers,

Robert

[2]https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.FlowEngine.meshUpdateInterval

Revision history for this message
Ziyu Wang (ziyuwang1) said :
#9

Thanks Robert Caulk, that solved my question.