A procedure for performing section analysis (only does moment-curvature, but can be easily modified to do any mode of section reponse):
# ---------MPhiProc.tcl-------------------------------------------------------------------------------
# Sets up a recorder which writes moment-curvature results to file
# make sure the node and element numbers are not used elsewhere in the model
# this procedure is set up for a 3-D problem: 3 dimensions/node, 6 dof/node
# Arguments
# secTag -- tag identifying section to be analyzed
# axialLoad -- axial load applied to section (negative is compression)
# maxK -- maximum curvature reached during analysis
# numIncr -- number of increments used to reach maxK (default 100)
proc MomentCurvature {secTag axialLoad maxK {numIncr 100} } {
node 1001 0.0 0.0 0.0; # Define two nodes at (0,0)
node 1002 0.0 0.0 0.0
fix 1001 1 1 1 1 1 1; # Fix all degrees of freedom except axial and bending
fix 1002 0 1 1 1 1 0
element zeroLengthSection 2001 1001 1002 $secTag
recorder Node Mphi.out disp -time -node 1002 -dof 6;# output moment & curvature
integrator LoadControl 0 1 0 0; # Define analysis parameters
system SparseGeneral -piv; # Overkill, but may need the pivoting!
test NormUnbalance 1.0e-9 10
numberer Plain;
constraints Plain;
algorithm Newton;
analysis Static;
pattern Plain 3001 "Constant" {
load 1002 $axialLoad 0.0 0.0 0.0 0.0 0.0
}; # Define constant axial load
analyze 1; # Do one analysis for constant axial load
pattern Plain 3002 "Linear" {
load 1002 0.0 0.0 0.0 0.0 0.0 1.0
}; # Define reference moment
set dK [expr $maxK/$numIncr]; # Compute curvature increment
# Use displacement control at node 1002 for section analysis, dof 6
integrator DisplacementControl 1002 6 $dK 1 $dK $dK
analyze $numIncr; # Do the section analysis
}
When including this procedure, ensure that the node and element numbers used by it are not used elsewhere in the OS model.
The above procedure may be incorporated into the static pushover analysis file:
# ----MomentCurvature.tcl---------------------------------------------------------
wipe
model basic -ndm 3 -ndf 6
source Units&Constants.tcl
source MaterialParameters.tcl
source ElementParameters.tcl
source GravityParameters.tcl
source materialsRC.tcl
source RCcircSec.tcl
RCcircSection $IDcolSec $riCol $roCol $cover $IDcore $IDcover $IDsteel $NbCol $AbCol $nfCoreR $nfCoreT $nfCoverR $nfCoverT
source MPhiProc.tcl
set phiYest [expr $epsY/(0.7*$Hcol)]; # estimate yield curvature
set axialLoad -$Pdl; # define axial load -- +tension in Mom-curv analysis
set maxK [expr 20*$phiYest]; # maximum curvature reached during analysis
MomentCurvature $IDcolSec $axialLoad $maxK;