# single BrickUP element with pressure dependent material. # subjected to 1D sinusoidal base shaking # Written by Jinchi Lu and Zhaohui Yang (May 2004) wipe set friction 31. ;#friction angle set phaseTransform 26. ;#phase transformation angle set G1 9.e4 ; set B1 22.e4 ; set gamma 0.600 ;# Newmark integration parameter set dt 0.01 ;# time step for analysis, does not have to be the same as accDt. set numSteps 2500 ;# number of time steps set rhoS 1.80 ;# saturated mass density set rhoF 1.00 ;# fluid mass density set Bfluid 2.2e6 ;# fluid shear modulus set perm 1.e-5 ;#permeability (m/s) set accGravity 9.81 ;#acceleration of gravity set perm [expr $perm/$accGravity/$rhoF] ;# actual value used in computation set matTag 1 ;# material tag set accMul 1 ;# acceleration multiplier set pi 3.1415926535 ; set inclination 0; set massProportionalDamping 0.0 ; set InitStiffnessProportionalDamping 0.002; set gravityX [expr $accGravity*sin($inclination/180.0*$pi)] ;# gravity acceleration in X direction set gravityY 0.0 ;# gravity acceleration in Y direction set gravityZ [expr -$accGravity*cos($inclination/180.0*$pi)] ;# gravity acceleration in Z direction set ndm 3 ;# space dimension model BasicBuilder -ndm $ndm -ndf 4 nDMaterial PressureDependMultiYield02 $matTag $ndm $rhoS $G1 $B1 $friction 0.1 80 0.5 \ $phaseTransform 0.067 0.23 0.06 0.27 node 1 0.00000 0.0000 0.00000 node 2 0.00000 0.0000 1.00000 node 3 0.00000 1.0000 0.00000 node 4 0.00000 1.0000 1.00000 node 5 1.00000 0.0000 0.00000 node 6 1.00000 0.0000 1.00000 node 7 1.00000 1.0000 0.00000 node 8 1.00000 1.0000 1.00000 element brickUP 1 1 5 7 3 2 6 8 4 $matTag $Bfluid $rhoF $perm $perm $perm $gravityX $gravityY $gravityZ updateMaterialStage -material $matTag -stage 0 fix 1 1 1 1 0 fix 2 0 1 0 1 fix 3 1 1 1 0 fix 4 0 1 0 1 fix 5 1 1 1 0 fix 6 0 1 0 1 fix 7 1 1 1 0 fix 8 0 1 0 1 # equalDOF # tied nodes around equalDOF 2 4 1 3 equalDOF 2 6 1 3 equalDOF 2 8 1 3 set nodeList {} for {set i 1} {$i <= 8 } {incr i 1} { lappend nodeList $i } set elementList {} for {set i 1} {$i <= 1 } {incr i 1} { lappend elementList $i } # GRAVITY APPLICATION (elastic behavior) # create the SOE, ConstraintHandler, Integrator, Algorithm and Numberer numberer Plain system ProfileSPD test NormDispIncr 1.0e-8 20 1 algorithm KrylovNewton constraints Penalty 1.e18 1.e18 set nw 1.5 integrator Newmark $nw [expr pow($nw+0.5, 2)/4] analysis Transient analyze 10 5.e0 # switch the material to plastic updateMaterialStage -material $matTag -stage 1 analyze 10 5.e1 setTime 0.0 ;# reset time, otherwise reference time is not zero for time history analysis wipeAnalysis ############# create recorders ############################## eval "recorder Node -file disp -time -node $nodeList -dof 1 2 3 -dT 0.01 disp" eval "recorder Node -file acc -time -node $nodeList -dof 1 2 3 -dT 0.01 accel" eval "recorder Node -file pwp -time -node $nodeList -dof 4 -dT 0.01 vel" eval "recorder Element -ele $elementList -time -file stress1 -dT 0.01 material 1 stress" eval "recorder Element -ele $elementList -time -file strain1 -dT 0.01 material 1 strain" eval "recorder Element -ele $elementList -time -file stress3 -dT 0.01 material 3 stress" eval "recorder Element -ele $elementList -time -file strain3 -dT 0.01 material 3 strain" eval "recorder Element -ele $elementList -time -file stress5 -dT 0.01 material 5 stress" eval "recorder Element -ele $elementList -time -file strain5 -dT 0.01 material 5 strain" ############# create dynamic time history analysis ################## pattern UniformExcitation 1 1 -accel "Sine 0 10 1 -factor $accMul" integrator Newmark $gamma [expr pow($gamma+0.5, 2)/4] rayleigh $massProportionalDamping 0.0 $InitStiffnessProportionalDamping 0.0 constraints Penalty 1.e18 1.e18 ;# can't combine with test NormUnbalance test NormDispIncr 1.0e-3 25 0 ;# can't combine with constraints Lagrange #algorithm Newton ;# tengent is updated at each iteration algorithm KrylovNewton ;# system ProfileSPD ;# Use sparse solver. Next numberer is better to be Plain. numberer Plain ;# method to map between between equation numbers of DOFs analysis VariableTransient ;# splitting time step requires VariableTransient ############# perform the Analysis and record time used ############# set startT [clock seconds] analyze $numSteps $dt [expr $dt/64] $dt 15 set endT [clock seconds] puts "Execution time: [expr $endT-$startT] seconds."