3.1.6.7. PM4Sand Material
Code Developed by: Long Chen and Pedro Arduino at U.Washington.
This command is used to construct a 2-dimensional PM4Sand material ([Boulanger-Ziotopoulou2017]).
nDmaterial PM4Sand $matTag $Dr $G0 $hpo $Den <$patm $h0 $emax $emin $nb $nd $Ado $zmax $cz $ce $phic $nu $cgd $cdr $ckaf $Q $R $m $Fsed_min $p_sedo>
Argument |
Type |
Description |
---|---|---|
$matTag |
integer |
tag identifying material |
$Dr |
float |
Relative density (fraction) |
$G0 |
float |
Shear modulus constant |
$hpo |
float |
Contraction rate parameter |
$Den |
float |
Mass density of the material |
$P_atm |
float |
optional: Atmospheric pressure |
$h0 |
float |
optional: Variable that adjusts the ratio of plastic modulus to elastic modulus |
$emax and $emin |
float |
optional: Maximum and minimum void ratios |
$nb |
float |
optional: Bounding surface parameter $nb ≥ 0 |
$nd |
float |
optional: Dilatancy surface parameter $nd ≥ 0 |
$Ado |
float |
optional: Dilatancy parameter will be computed at the time of initialization if input value is negative |
$z_max |
float |
optional: Fabric-dilatancy tensor parameter |
$cz |
float |
optional: Fabric-dilatancy tensor parameter |
$ce |
float |
optional: Variable that adjusts the rate of strain accumulation in cyclic loading |
$phic |
float |
optional: Critical state effective friction angle |
$nu |
float |
optional: Poisson’s ratio |
$cgd |
float |
optional: Variable that adjusts degradation of elastic modulus with accumulation of fabric |
$cdr |
float |
optional: Variable that controls the rotated dilatancy surface |
$ckaf |
float |
optional: Variable that controls the effect that sustained static shear stresses have on plastic modulus |
$Q |
float |
optional: Critical state line parameter |
$R |
float |
optional: Critical state line parameter |
$m |
float |
optional: Yield surface constant (radius of yield surface in stress ratio space) |
$Fsed_min |
float |
optional: Variable that controls the minimum value the reduction factor of the elastic moduli can get during reconsolidation |
$p_sedo |
float |
optional: Mean effective stress up to which reconsolidation strains are enhanced |
Note
The only material formulation for the PM4Sand object is “PlaneStrain”, as a consequence limited to plain strain continuum elements.
Valid Element Recorder queries are stress, strain, alpha (or backstressratio) for \(\mathbf{\alpha}\), fabric for \(\mathbf{z}\), and alpha_in (or alphain) for \(\mathbf{\alpha_{in}}\)
Elastic or response could be enforced by
updateMaterialStage -material $matTag -stage 0
Elastoplastic by
updateMaterialStage -material $matTag -stage 1
The program will use the default value of a secondary parameter if a negative input is assigned to that parameter, e.g. Ado = -1. However, FirstCall is mandatory when switching from elastic to elastoplastic if negative inputs are assigned to stress-dependent secondary parameters, e.g. Ado and zmax. FirstCall can be set as,
setParameter -value 0 -ele $elementTag FirstCall $matTag
Post-shake reconsolidation can be activated by
setParameter -value 1 -ele $elementTag Postshake $matTag
The user should check that the results are not sensitive to time step size.
R.W.Boulanger, K.Ziotopoulou. “PM4Sand(Version 3.1): A Sand Plasticity Model for Earthquake Engineering Applications”. Report No. UCD/CGM-17/01 2017
Example 1
2D undrained monotonic direct simple shear test using one element
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH #
# 2D Undrained Direct Simple Shear Test Using One Element #
# University of Washington, Department of Civil and Environmental Eng #
# Geotechnical Eng Group, L. Chen, P. Arduino - Jan 2018 #
# Basic Units are m, kN and s unless otherwise specified#
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH #
wipe
# ------------------------ #
# Test Specific parameters #
# ------------------------ #
# Initial Vertical Stress
set sigvo -101.3
set K0 0.5
# set Poisson's ratio to match user specified K0
set nu [expr $K0 / (1+$K0)]
# Deviatoric strain (Cyclic)
set devDisp 0.10
# Permeablity
set perm 1.0e-9
# Initial void ratio
# relative density
set Dr 0.35
# max and min void ratio
set emax 0.8
set emin 0.5
set eInit [expr $emax - ($emax - $emin)*$Dr ]
# other primary parameters
set G0 476.0
set hpo 0.53
set rho 1.42
# Rayleigh damping parameter
set damp 0.02
set omega1 0.2
set omega2 20.0
set a1 [expr 2.0*$damp/($omega1+$omega2)]
set a0 [expr $a1*$omega1*$omega2]
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# HHHHHHHHHHHHHHHHHHHHHHHHHHHCreate ModelHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# Create a 2D model with 3 Degrees of Freedom
model BasicBuilder -ndm 2 -ndf 3
# Create nodes
node 10.00.0
node 21.00.0
node 3 1.01.0
node 40.01.0
# Create Fixities
fix 1 1 1 1
fix 2 1 1 1
fix 30 0 1
fix 4 0 0 1
equalDOF 3 4 1 2
# Create material
# PM4Sand tag Dr G0 hpo den Patm h0 emax emin nb nd Ado zmax cz ce phicv nu
nDMaterial PM4Sand 1 $Dr $G0 $hpo $rho 101.3 -1.00 $emax $emin 0.5 0.1 -1.0 -1.0 250.0 -1.00 33.0 $nu
# Create element
element SSPquadUP 1 1 2 3 4 1 1.0 2.2e6 1.0 $perm $perm $eInit 1.0e-5
# Create recorders
recorder Node -nodeRange 1 4 -time -file Cycdisp.out -dof 1 2 disp
recorder Node -nodeRange 1 4 -time -file Cycpress.out -dof 3 vel
recorder Element -ele 1 -time -file Cycstress.out stress
recorder Element -ele 1 -time -file Cycstrain.out strain
# Create analysis
constraints Transformation
test NormDispIncr 1.0e-5 35 1
algorithm Newton
numberer RCM
system SparseGeneral
integrator Newmark [expr 5.0 / 6.0] [expr 4.0 / 9.0]
rayleigh $a0 $a1 0.0 0.0
analysis Transient
# Apply consolidation pressure
set pNode [expr $sigvo / 2.0]
pattern Plain 1 {Series -time {0 100 1e10} -values {0 1 1} -factor 1} {
load 3 0.0 $pNode 0.0
load 4 0.0 $pNode 0.0
}
updateMaterialStage -material 1 -stage 0
analyze 100 1
set vDisp [nodeDisp 3 2]
set ts1 "{Series -time {100 80000 1.0e10} -values {1.0 1.0 1.0} -factor 1}"
eval "pattern Plain 2 $ts1 {
sp 3 2 $vDisp
sp 4 2 $vDisp
}"
# Close drainage valves
for {set x 1} {$x< 5} {incr x} {
remove sp $x 3
}
analyze 25 1
puts "Removed drainage fixities."
updateMaterialStage -material 1 -stage 1
setParameter -value 0 -ele 1 FirstCall 1
analyze 25 1
puts "finished update fixties"
set ts2 "{Series -time {150 5150 1.0e10} -values {0.0 1.0 1.0} -factor 1}"
eval "pattern Plain 3 $ts2 {
sp 3 1 $devDisp
}"
# update Poisson's ratio for analysis
setParameter -value 0.3 -ele 1 poissonRatio 1
analyze 5000 1
wipe
Example 2
2D undrained cyclic direct simple shear test using one element (Displacement Controlled)
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH #
# 2D Undrained Cyclic Direct Simple Shear Test Using One Element #
# University of Washington, Department of Civil and Environmental Eng #
# Geotechnical Eng Group, L. Chen, P. Arduino - Feb 2018 #
# Basic Units are m, kN and s unless otherwise specified#
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH #
wipe
# ------------------------ #
# Test Specific parameters #
# ------------------------ #
# Initial Vertical Stress
set sigvo -101.3
# cyclic stress ratio
set CSR 0.16
# max number of cycles
set maxCycles 20
# strain increment
set strainIncr 5.0e-6
# K0
set K0 0.5
# set Poisson's ratio to match user specified K0 for applying initial confinement
set nu [expr $K0 / (1+$K0)]
# Cutoff shear strain
set devDisp 0.03
# Permeablity
set perm 1.0e-9
# ---------primary parameters-------------
set Dr 0.35
set G0 476.0
set hpo 0.53
set rho 1.42
# ---------secondary parameters-------------
set Patm 101.3
# all initial stress dependant parameters have negative default values
# and will be calculated during initialization
set h0 -1.0
set emax 0.8
set emin 0.5
set eInit [expr $emax - ($emax - $emin)*$Dr ]
set nb 0.5
set nd 0.1
set Ado -1.0
set zmax -1.0
set cz 250.0
set ce -1.0
set phicv 33.0
set Cgd 2.0
set Cdr -1.0
set ckaf -1.0
set Q 10.0
set R 1.5
set m_m 0.01
set Fsed_min -1.0
set p_sedo -1.0
# ---------------------------------------------
# Rayleigh damping parameter
set damp 0.02
set omega1 0.2
set omega2 20.0
set a1 [expr 2.0*$damp/($omega1+$omega2)]
set a0 [expr $a1*$omega1*$omega2]
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# HHHHHHHHHHHHHHHHHHHHHHHHHHHCreate ModelHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# Create a 2D model with 3 Degrees of Freedom
model BasicBuilder -ndm 2 -ndf 3
# Create nodes
node 10.00.0
node 21.00.0
node 3 1.01.0
node 40.01.0
# Create Fixities
fix 1 1 1 1
fix 2 1 1 1
fix 30 0 1
fix 4 0 0 1
equalDOF 3 4 1 2
# Create material
# PM4Sand tag Dr G0 hpo den Patm h0 emax emin nb nd Ado zmax cz ce phicv nu
nDMaterial PM4Sand 1 $Dr $G0 $hpo $rho $Patm $h0 $emax $emin $nb $nd $Ado $zmax $cz $ce $phicv $nu $Cgd $Cdr $ckaf $Q $R $m_m $Fsed_min $p_sedo
# Create element
element SSPquadUP 1 1 2 3 4 1 1.0 2.2e6 1.0 $perm $perm $eInit 1.0e-5
# Create recorders
recorder Node -nodeRange 1 4 -time -file Cycdisp.out -dof 1 2 disp
recorder Node -nodeRange 1 4 -time -file Cycpress.out -dof 3 vel
recorder Element -ele 1 -time -file Cycstress.out stress
recorder Element -ele 1 -time -file Cycstrain.out strain
# Create analysis
constraints Transformation
test NormDispIncr 1.0e-5 35 1
algorithm Newton
numberer RCM
system FullGeneral
integrator Newmark [expr 5.0 / 6.0] [expr 4.0 / 9.0]
rayleigh $a0 $a1 0.0 0.0
analysis Transient
# Apply consolidation pressure
set pNode [expr $sigvo / 2.0]
pattern Plain 1 {Series -time {0 100 1e10} -values {0 1 1} -factor 1} {
load 3 0.0 $pNode 0.0
load 4 0.0 $pNode 0.0
}
updateMaterialStage -material 1 -stage 0
analyze 100 1
set vDisp [nodeDisp 3 2]
set ts1 "{Series -time {100 80000 1.0e10} -values {1.0 1.0 1.0} -factor 1}"
eval "pattern Plain 2 $ts1 {
sp 3 2 $vDisp
sp 4 2 $vDisp
}"
# Close drainage valves
for {set x 1} {$x< 5} {incr x} {
remove sp $x 3
}
analyze 25 1
puts "Removed drainage fixities."
updateMaterialStage -material 1 -stage 1
setParameter -value 0 -ele 1 FirstCall 1
analyze 25 1
puts "finished update fixties"
# update Poisson's ratio for analysis
setParameter -value 0.3 -ele 1 poissonRatio 1
set controlDisp [expr 1.1 * $devDisp]
set numCycle 0.25
while {$numCycle <= $maxCycles} {
#impose 1/4 cycle
set hDisp [nodeDisp 3 1]
set currentTime [getTime]
set steps [expr $controlDisp / $strainIncr]
eval "timeSeries Path 2 -time {$currentTime [expr $currentTime + $steps] 1.0e10} -values {$hDisp $controlDisp $controlDisp} -factor 1"
pattern Plain 3 2 {
sp 3 1 1.0
}
set b [eleResponse 1 stress]
while {[lindex $b 2] < [expr $CSR * -1.0 * $sigvo]} {
analyze 1 1.0
set b [eleResponse 1 stress]
set hDisp [nodeDisp 3 1]
if {$hDisp >= $devDisp} {
exit
}
}
set numCycle [expr $numCycle + 0.25]
set hDisp [nodeDisp 3 1]
set currentTime [getTime]
remove loadPattern 3
remove timeSeries 2
remove sp 3 1
#impose 1/2 cycle
set steps [expr ($controlDisp + $hDisp)/ $strainIncr]
eval "timeSeries Path 2 -time {$currentTime [expr $currentTime + $steps] 1.0e10} -values {$hDisp [expr -1.0 * $controlDisp] [expr -1.0 * $controlDisp]} -factor 1"
pattern Plain 3 2 {
sp 3 1 1.0
}
while {[lindex $b 2] > [expr $CSR * $sigvo]} {
analyze 1 1.0
set b [eleResponse 1 stress]
set hDisp [nodeDisp 3 1]
if {$hDisp <= [expr -1.0 * $devDisp]} {
exit
}
}
#impose 1/4 cycle
set numCycle [expr $numCycle + 0.5]
set hDisp [nodeDisp 3 1]
set currentTime [getTime]
remove loadPattern 3
remove timeSeries 2
remove sp 3 1
set steps [expr ($controlDisp + $hDisp)/ $strainIncr]
eval "timeSeries Path 2 -time {$currentTime [expr $currentTime + $steps] 1.0e10} -values {$hDisp $controlDisp $controlDisp} -factor 1"
pattern Plain 3 2 {
sp 3 1 1.0
}
while {[lindex $b 2] <= 0.0} {
analyze 1 1.0
set b [eleResponse 1 stress]
set hDisp [nodeDisp 3 1]
if {$hDisp >= $devDisp} {
exit
}
}
set numCycle [expr $numCycle + 0.25]
remove loadPattern 3
remove timeSeries 2
}
wipe
Example 3
2D undrained cyclic direct simple shear test using one element (Force Controlled)
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH #
# 2D Undrained Cyclic Direct Simple Shear Test Using One Element #
# University of Washington, Department of Civil and Environmental Eng #
# Geotechnical Eng Group, L. Chen, P. Arduino - Oct 2020 #
# Basic Units are m, kN and s unless otherwise specified #
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH #
wipe
# ------------------------ #
# Test Specific parameters #
# ------------------------ #
# Initial Vertical Stress
set sigvo -101.3
# cyclic stress ratio
set CSR 0.16
# max number of cycles
set maxCycles 20
# K0
set K0 0.5
# set Poisson's ratio to match user specified K0 for applying initial confinement
set nu_gravity [expr $K0 / (1+$K0)]
set nu_dynamic 0.3
# Cutoff shear strain
set maxStrain 0.03
# Permeablity
set perm 1.0e-9
# ---------primary parameters-------------
set Dr 0.55
set Go 677.0
set hpo 0.40
set rho 0.0
# ---------secondary parameters-------------
set Patm 101.3
# all initial stress dependant parameters have negative default values
# and will be calculated during initialization
set h0 -1.0
set emax 0.8
set emin 0.5
set eInit [expr $emax - ($emax - $emin)*$Dr ]
set nb 0.5
set nd 0.1
set Ado -1.0
set zmax -1.0
set cz 250.0
set ce -1.0
set phicv 33.0
set Cgd 2.0
set Cdr -1.0
set ckaf -1.0
set Q 10.0
set R 1.5
set m_m 0.01
set Fsed_min -1.0
set p_sedo -1.0
# ---------------------------------------------
# Rayleigh damping parameter
set damp 0.01
set omega1 1.0
set omega2 2.0
set a1 [expr 2.0*$damp/($omega1+$omega2)]
set a0 [expr $a1*$omega1*$omega2]
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# HHHHHHHHHHHHHHHHHHHHHHHHHHHCreate ModelHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# Create a 2D model with 3 Degrees of Freedom
model BasicBuilder -ndm 2 -ndf 3
# Create nodes
node 1 0.0 0.0
node 2 1.0 0.0
node 3 1.0 1.0
node 4 0.0 1.0
# Create Fixities
fix 1 1 1 1
fix 2 1 1 1
fix 3 0 0 1
fix 4 0 0 1
equalDOF 3 4 1 2
# Create material
# PM4Sand tag Dr Go hpo den Patm h0 emax emin nb nd Ado zmax cz ce phicv nu
nDMaterial PM4Sand 1 $Dr $Go $hpo $rho $Patm $h0 $emax $emin $nb $nd $Ado $zmax $cz $ce $phicv $nu_gravity $Cgd $Cdr $ckaf $Q $R $m_m $Fsed_min $p_sedo
# set e_init 0.6
# set rho1 0.0
# nDMaterial ManzariDafalias 1 82.35 0.33 $e_init 1.35 0.7 0.055 0.8 0.5 101.3 0.02 16.18 0.996 0.64 0.75 1.5 12.5 500.0 $rho1 1 0
# nDMaterial PressureDependMultiYield02 1 2 0.0 9.0e4 2.2e5 32 0.1 80 0.5\
# 26. 0.067 0.23 0.06 0.27
# Using default values for secondary parameters
# nDMaterial PM4Sand $matTag 0.61 585.0 0.28 0.0
# nDMaterial PM4Silt $matTag 44.0 -1 585 100.0 0.0
# nDMaterial PM4Silt $matTag -1 0.5 585 100.0 0.0
# Create element
element SSPquadUP 1 1 2 3 4 1 1.0 2.2e6 1.0 $perm $perm $eInit 1.0e-6
# element quadUP 1 1 2 3 4 1.0 1 2.2e6 1.0 $perm $perm
# Create analysis
constraints Penalty 1e17 1e17
test NormDispIncr 1.0e-5 35 0
algorithm Newton
numberer RCM
system ProfileSPD
integrator Newmark [expr 5.0 / 6.0] [expr 4.0 / 9.0]
rayleigh $a0 $a1 0.0 0.0
analysis VariableTransient
# Apply consolidation pressure
set pNode [expr $sigvo / 2.0]
pattern Plain 1 {Series -time {0 100 1e10} -values {0 1 1} -factor 1} {
load 3 0.0 $pNode 0.0
load 4 0.0 $pNode 0.0
}
updateMaterialStage -material 1 -stage 0
analyze 100 1
updateMaterialStage -material 1 -stage 1
setParameter -value 0 -ele 1 FirstCall 1
# update Poisson's ratio for analysis
setParameter -value $nu_dynamic -ele 1 poissonRatio 1
# damp out any gravity wave
analyze 100 100
analyze 100 1000
puts "Finished Gravity"
# Close drainage valves
for {set x 1} {$x< 5} {incr x} {
remove sp $x 3
}
equalDOF 3 4 3
puts "finished update fixties"
# Hold load and redefine analysis
loadConst -time 0.0
wipeAnalysis
set period 1.;
set dT 5e-5;
set recDT [expr 10 * $dT]
# Create recorders
recorder Node -nodeRange 1 4 -time -dT $recDT -file Cycdisp.out -dof 1 2 disp
recorder Node -nodeRange 1 4 -time -dT $recDT -file Cycpress.out -dof 3 vel
# recorder for quadUP element
# recorder Element -ele 1 -time -dT $recDT -file Cycstress.out material 1 stress
# recorder Element -ele 1 -time -dT $recDT -file Cycstrain.out material 1 strain
# recorder for SSPquadUP element
recorder Element -ele 1 -time -dT $recDT -file Cycstress.out stress
recorder Element -ele 1 -time -dT $recDT -file Cycstrain.out strain
# Create analysis
constraints Penalty 1e17 1e17
test NormDispIncr 1.0e-5 35 0
algorithm KrylovNewton
numberer RCM
system ProfileSPD
integrator Newmark [expr 5.0 / 6.0] [expr 4.0 / 9.0]
rayleigh $a0 0.0 0.0 0.0
analysis Transient
# This part is modified from PDMY03 driver by Arash Khosravifar
pattern Plain 2 "Sine 0 [expr $period*$maxCycles] $period" {
load 3 [expr -$CSR*$sigvo*1.0*1.0*0.50] 0 0
load 4 [expr -$CSR*$sigvo*1.0*1.0*0.50] 0 0
}
while {[expr abs([nodeDisp 4 1]/1.0)]<$maxStrain} {
analyze 1 $dT
puts "time = [getTime] sec"
}
wipe