Hello everyone,
I have built an MSE wall, then assigned fluid properties to the entire soil domain, set a water table at the mid-height of the wall, and applied ramped loading to generate excess pore pressure. Later, I may also apply wave loading to the wall. For the consolidation to take place in the soil and for the excess pore pressure to build up, I have kept Biot ON. Initially, when I assigned the fluid properties, I kept Biot OFF. Basically, I need a saturated backfill, and obviously, I would like to obtain total stress, effective stress, and excess pore pressure at any point. I am seeking guidance on fluid modeling, Biot, and initial stress conditions.
Model Setup:
- Geometry & Groups:
- The wall consists of two soil layers, four concrete panels, and multiple geogrid layers placed between the panels.
- Fluid Modeling:
- Fluid properties (permeability and porosity) are assigned to the soil layers.
- The water table is defined at mid-height (z = 3.2 m).
- Biot:
- Initially set to OFF to establish hydrostatic conditions.
- Then switched ON to simulate consolidation and excess pore pressure generation under ramped face loading.
- Loading:
- Ramped normal stress is applied to the wall panels to simulate load-induced pore pressure buildup.
- Objectives:
- To monitor total stress, effective stress, and excess pore pressure at different points within the wall and backfill.
Issues Observed:
- Biot’s Coefficient (OFF vs. ON):
- With Biot OFF, the obtained results are shown in Figure 1.
- With Biot ON, the obtained results are shown in Figure 2.
- I only used zone fluid property biot 1.0; when I tried adding biot modulus, it caused an error.
Question: - Is keeping Biot ON appropriate for simulating consolidation and excess pore pressure in this case?
- Why does the response become linear when Biot is ON?
- Initial Stress:
- When I assume zero initial stress (xx=yy=zz=0), the obtained results are shown in Figure 1.
- When using zone initialize stress xx=0 yy=0 zz=0, the obtained results are shown in Figure 2.
Question: - How should I correctly initialize in-situ stress for realistic consolidation and pore pressure behavior?
- Why might zone initialize stress lead to a linear response?
Request for Guidance:
- What exactly does Biot represent in FLAC3D, and how should it be properly used?
- Is keeping Biot ON the correct approach for consolidation modeling? Since external loading is applied, excess pore pressure should develop — for this type of situation, or specifically in my case, what would be the appropriate way to model it?
- Are there any additional settings or model changes needed to obtain realistic pore pressure variation?
- What is the correct way to handle and initialize in-situ stress for this type of problem?
I have attached my script below, including the fluid setup, Biot toggling, and ramped loading portions for reference.
Thank you very much for your help and time.
Thank you for your help!
Best regards,
Sudipta Chakraborty
;========================================================
; ADD FLUID
;========================================================
; CASE A – Hydrostatic pore pressure only (Biot OFF)
;========================================================
model restore ‘Free Facing Fixities’
;plot movie active on
model configure fluid
; — Assign fluid model to backfill —
zone fluid cmodel assign isotropic range group ‘Soil1’ or ‘Soil2’
zone fluid property permeability 1e-9 porosity 0.35 range group ‘Soil1’ or ‘Soil2’
; — Hydrostatic assumption (Biot OFF) —
zone fluid biot off
zone gridpoint initialize fluid-modulus 2.2e9 range group ‘Soil1’ or ‘Soil2’
zone initialize fluid-density 1000 range group ‘Soil1’ or ‘Soil2’
; — Water table at mid of wall —
zone water density 1000
zone water plane origin (0,0,3.2) normal (0,0,1)
zone gridpoint initialize pore-pressure 0.0 range group ‘Panel1’ or ‘Panel2’ or ‘Panel3’ or ‘Panel4’
zone gridpoint initialize saturation 1.0 range group ‘Soil1’ or ‘Soil2’
; — Solve equilibrium —
model gravity 10
zone ratio local
model solve ratio 1e-4
model save ‘Fluid_Hydrostatic’
;========================================================
; CASE B – Load-induced excess pore pressure (Biot ON)
;========================================================
model restore ‘Fluid_Hydrostatic’
; — Use Biot ON for consolidation —
zone fluid biot on
zone fluid property biot 1.0 range group ‘Soil1’ or ‘Soil2’
; — Histories for excess pore pressure —
zone history pore-pressure position (3.0,3.0,3.2) ; mid-height
zone history pore-pressure position (3.0,3.0,0.5) ; near base
model history fluid time-total
model history mechanical ratio
; — Run coupled flow-mechanical —
model solve cycles 90000
model save ‘Fluid_ExcessPP’
model restore ‘Fluid_Hydrostatic’
; — Use Biot ON for consolidation —
plot movie active on
zone fluid biot on
zone fluid property biot 1.0 range group ‘Soil1’ or ‘Soil2’
; — Apply ramped face loading —
zone initialize state 0
zone gridpoint initialize displacement (0,0,0)
table ‘ramp’ add (0,0) (30000,-5.0e4) (60000,-7.5e4) (90000,-1.0e5)
zone face apply stress-normal 1 table ‘ramp’ range group ‘facing1’ or ‘facing2’
zone mechanical damping combined
; — Histories driven by the face load (HORIZONTAL) —
zone history stress-xx position (3.0,3.0,3.2) ; mid-height, horizontal
zone history stress-xx position (3.0,3.0,0.5) ; near base, horizontal
zone history pore-pressure position (3.0,3.0,3.2)
zone history pore-pressure position (3.0,3.0,0.5)
; picked a point on the facing roughly mid-height/width
zone history displacement-x position (0.0,3.2,3.2)
fish define eff_xx_mid
local z = zone.near(3.0,3.0,3.2)
eff_xx_mid = zone.stress.xx(z) - zone.pp(z)
end
fish define eff_xx_base
local z = zone.near(3.0,3.0,0.5)
eff_xx_base = zone.stress.xx(z) - zone.pp(z)
end
fish history name ‘EffXX_Mid’ eff_xx_mid
fish history name ‘EffXX_Base’ eff_xx_base
model history fluid time-total
model history mechanical ratio
model solve cycles 90000
model save ‘horizontal_load’
fish define check_closure_x
local zm = zone.near(3.0,3.0,3.2)
local zb = zone.near(3.0,3.0,0.5)
io.out('mid err (xx) = ’ + string( (zone.stress.xx(zm) - zone.pp(zm)) - eff_xx_mid ))
io.out('base err (xx) = ’ + string( (zone.stress.xx(zb) - zone.pp(zb)) - eff_xx_base ))
end
[check_closure_x]

