RC Wall Moment Curvature Analysis

Forum for OpenSees users to post questions, comments, etc. on the use of the OpenSees interpreter, OpenSees.exe

Moderators: silvia, selimgunay, Moderators

Post Reply
stuarts
Posts: 6
Joined: Sat Sep 27, 2008 8:00 pm
Location: UW

RC Wall Moment Curvature Analysis

Post by stuarts »

I am working on running a moment curvature analysis for L shaped walls. I am trying to find the MC response of the wall with an axial load of 0.1 * f'c * Ag.

My code seems to work fine when I have no axial load, but once I add it in the results dont seem to make much sense. Any help would be much appreciated. Thanks.




puts " -------------------------2D Model------------------------"

puts " -------------------------------------------------------------- "

puts " RC Wall Section"

puts " -------------------------------------------------------------- "

# Define model builder
# --------------------
model basic -ndm 2 -ndf 3
set secTag 1

#_______________________________________________________
#_______________________________________________________


# define UNITS ----------------------------------------------------------------------------
set in 1.; # define basic units -- output units
set kip 1.; # define basic units -- output units
set sec 1.; # define basic units -- output units
set LunitTXT "inch"; # define basic-unit text for output
set FunitTXT "kip"; # define basic-unit text for output
set TunitTXT "sec"; # define basic-unit text for output
set ft [expr 12.*$in]; # define engineering units
set ksi [expr $kip/pow($in,2)];
set psi [expr $ksi/1000.];
set lbf [expr $psi*$in*$in]; # pounds force
set pcf [expr $lbf/pow($ft,3)]; # pounds per cubic foot
set psf [expr $lbf/pow($ft,3)]; # pounds per square foot
set in2 [expr $in*$in]; # inch^2
set in4 [expr $in*$in*$in*$in]; # inch^4
set cm [expr $in/2.54]; # centimeter, needed for displacement input in MultipleSupport excitation
set PI [expr 2*asin(1.0)]; # define constants
set g [expr 32.2*$ft/pow($sec,2)]; # gravitational acceleration
set Ubig 1.e10; # a really large number
set Usmall [expr 1/$Ubig]; # a really small number


#_______________________________________________________
#_______________________________________________________

# set up parameters for section and element definition
#--------------------------------------------------
set IDcore 1; # ID tag for core concrete
set IDcover 2; # ID tag for cover concrete
set IDsteel 3; # ID tag for steel

# Define materials for nonlinear section
# ------------------------------------------
#CONCRETE------------------------------------------------------
# Confined concrete: (CORE CONCRETE)
set kfc 1.3; # Ratio between confined and unconfined compressive strength
set fc [expr -6*$ksi]; # CONCRETE Compressive Strength, ksi (+Tension, -Compression)
set Ec [expr 57*$ksi*sqrt(-$fc/$psi)]; # Concrete Elastic Modulus
set fc1C [expr $kfc*$fc]; # CONFINED concrete (mander model), maximum stress
set eps1C [expr 2.*$fc1C/$Ec]; # strain at maximum stress
set fc2C [expr 0.2*$fc]; # ultimate stress
set eps2C [expr 2*$eps1C]; # strain at ultimate stress

uniaxialMaterial Concrete01 $IDcore $fc1C $eps1C $fc2C $eps2C;

# Unconfined concrete: (COVER CONCRETE)
set fc1U $fc; # UNCONFINED concrete (todeschini parabolic model), maximum stress
set eps1U -0.003; # strain at maximum stress
set fc2U [expr 0.1*$fc]; # ultimate stress
set eps2U -0.006; # strain at ultimate stress

uniaxialMaterial Concrete01 $IDcover $fc1U $eps1U $fc2U $eps2U;

# STEEL --------------------------------------------------------------
# Reinforcing steel
set fy [expr 60*$ksi]; # STEEL yield stress
set Es [expr 29000.*$ksi]; # modulus of steel
set Bs 0.01; # strain-hardening ratio
set R0 18; # control the transition from elastic to plastic branches
set cR1 0.925; # control the transition from elastic to plastic branches
set cR2 0.15; # control the transition from elastic to plastic branches

uniaxialMaterial Steel02 $IDsteel $fy $Es $Bs $R0 $cR1 $cR2;

# Define rebar diameter & area per bar size

set db3 [expr 0.375*$in]
set db4 [expr 0.5*$in]
set db5 [expr 0.625*$in]
set db6 [expr 0.75*$in]
set db7 [expr 0.875*$in]
set db8 [expr 1.0*$in]
set db9 [expr 1.128*$in]
set db10 [expr 1.27*$in]
set db11 [expr 1.41*$in]

set Ab3 [expr 0.11*$in2]
set Ab4 [expr 0.2*$in2]
set Ab5 [expr 0.31*$in2]
set Ab6 [expr 0.44*$in2]
set Ab7 [expr 0.6*$in2]
set Ab8 [expr 0.79*$in2]
set Ab9 [expr 1.0*$in2]
set Ab10 [expr 1.27*$in2]
set Ab11 [expr 1.56*$in2]

# Define cross-section geometry for section
# ------------------------------------------

puts "Section Dimensions"
# set some paramaters
set bf [expr 210*$in]; # flange width
set h [expr 138*$in]; # nominal depth
set bw [expr 30*$in]; # web thickness
set tf [expr 24*$in]; # flange thickness
set bbf [expr 74*$in]; # width of boundary element 1 into flange
set tbe1 [expr 50*$in]; # depth of boundary element 1 in to flange end of web
set tbe2 [expr 32*$in]; # depth of boundary element 2 into far end of web
set cover [expr 2$in]; # Clear concrete cover over rebar

puts "bf = $bf in"
puts "h = $h in"
puts "bw = $bw in"
puts "tf = $tf in"

# some variables derived from the parameters
set y1 [expr $tbe1-$tf]
set y2 [expr $h-$tf]
set y3 [expr $y2-$tbe2]
set z1 [expr $bf-$bw]
set z2 [expr $bbf-$bw]

puts "y1 = $y1 in"
puts "y2 = $y2 in"
puts "y3 = $y2 in"
puts "z1 = $z1 in"
puts "z2 = $z2 in"

#Gross area of the section
set Ag [expr $z1*$tf+$h*$bw]
puts "Ag = $Ag in^2"

#------------------------------------------------------
#Boundary Element definitions
# __________
# | 1________|
# | |a
# | |
# | | 1 is location of boundary element 1 (1a is in web section, 1b is in flange section)
# | | 2 is location of boundary element 2
# | |
# |2|
# |_| a is the location of the origin (0,0) to define for wall patches (inside corner of web and flange)
#
# y
# |
# |
# z____|

#Define Steel in Boundary Element 1a (web section)

#set rho1a 0.01; # steel ratio in boundary element 1 (in flange/web)
#set As1a [expr $rho1a*$bw*$tbe1]; # Area of steel in BE given rho for the BE

# 2 rows of bars with (13) #10 bars per row
set nb1a 13; # Number of bars per row (y direction)

#Define Steel in Boundary Element 1b (flange section)

#set rho1b 0.01; # steel ratio in boundary element 1 (in flange/web)
#set As1b [expr $rho1b*$z2*$tf]; # Area of steel in BE given rho for the BE

# 2 rows of bars with (5) #10 bars per row
set nb1b 5; # Number of bars per row (z direction)

#Define Steel in Boundary Element 2 (in web end)

#set rho2 0.01; # steel ratio in boundary element 2 (web end)
#set As2 [expr $rho2*$bw*$tbe2]; # Area of steel in BE given rho for the BE

# 2 rows of bar with (6) #10 bars per row
set nb2 6; # Number of bars per row (y direction)

#-----------------------------------------------------------------
#Section model set up and discritization

#Define discritization size of concrete patches
set nfdb 20; # number of fibers along boundary element depth
set nftb 20; # number of fibers along boundary element thickness
set nfbf 20; # number of fibers along flange/web width
set nftf 20; # number of fibers along flange/web thickness

# Discretize the section with layers and patches
section Fiber $secTag {

# Define boundary elements (confined)
# ID, nfIJ, nfJK, yI, zI, yJ, zJ, yK, zK, yL, zL
patch quad $IDcore $nftb $nfdb -$y2 $bw -$y2 0 -$y3 0 -$y3 $bw; #BE 2
patch quad $IDcore $nftb $nfdb -$y1 $bw -$y1 0 $tf 0 $tf $bw; #BE 1a
patch quad $IDcore $nftb $nfdb 0 0 0 -$z2 $tf -$z2 $tf 0; #BE 1b
patch quad $IDcore $nftb $nfdb 0 0 0 -$z2 $tf -$z2 $tf 0; #BE 1b

# Define web/flange elements (unconfined)
patch quad $IDcover $nfbf $nftf -$y3 $bw -$y3 0 -$y1 0 -$y1 $bw
patch quad $IDcover $nfbf $nftf 0 -$z2 0 -$z1 $tf -$z1 $tf -$z2


# Define Bottom boundary element reinforcement
# ID, #bars, Abars, y start, z start, y end, z end
layer straight $IDsteel $nb1a $Ab10 [expr $tf-$cover] $cover -$y1 $cover; #BE 1a Row 1
layer straight $IDsteel $nb1a $Ab10 [expr $tf-$cover] [expr $bw-$cover] -$y1 [expr $bw-$cover]; #BE 1a Row 2
layer straight $IDsteel $nb1b $Ab10 $cover 0 $cover -$z2; #BE 1b row 1
layer straight $IDsteel $nb1b $Ab10 [expr $tf-$cover] 0 [expr $tf-$cover] -$z2; #BE 1b row 2
layer straight $IDsteel $nb2 $Ab10 -$y3 [expr $bw-$cover] [expr -$y2+$cover] [expr $bw-$cover]; #BE 2 row 1
layer straight $IDsteel $nb2 $Ab10 -$y3 $cover [expr -$y2+$cover] $cover; #BE 2 row 2
}



#_______________________________________________________
#_______________________________________________________


# set AXIAL LOAD --------------------------------------------------------
set P [expr 0.1*$fc*$Ag*$kip]; # + Tension, - Compression (NOTE: $f'c is negitive, as previously defined)
puts "Axial Load on Section = $P kip"

# set Maximum Curvature:
set Ku [expr 0.001/$in];
set numIncr 100; # Number of analysis increments to maximum curvature (default=100)
puts "Number of analysis increments: $numIncr
"

#_______________________________________________________
#_______________________________________________________


# ANALYSIS of section --------------------------------------------------

# Define two nodes at (0,0)
node 1001 0.0 0.0
node 1002 0.0 0.0

# Fix all degrees of freedom except axial and bending
fix 1001 1 1 1
fix 1002 0 1 0

# Define element
# tag ndI ndJ secTag
element zeroLengthSection 2001 1001 1002 $secTag -orient 1 0 0 0 1 0

# Create Moment Curvature recorder ----> output moment (col 1) & curvature (col 2)
recorder Node -xml Mphi.out -time -node 1002 -dof 3 disp;

#Create Stress-Strain recorder ---> col1 = Moment (k-in), col2 = stress (ksi), col3 = strain (in/in)
recorder Element -xml SSFlangeSteel1.out -time -ele 2001 section fiber $tf $cover $IDsteel stressStrain; # Top steel recorder 1
recorder Element -xml SSFlangeSteel2.out -time -ele 2001 section fiber $tf -$z1 $IDsteel stressStrain; # Top steel recorder 2
recorder Element -xml SSFlangeConc1.out -time -ele 2001 section fiber $tf $cover $IDcore stressStrain; # Top concrete recorder 1
recorder Element -xml SSFlangeConc2.out -time -ele 2001 section fiber $tf -$z1 $IDcore stressStrain; # Top concrete recorder 2
recorder Element -xml SSWebSteel.out -time -ele 2001 section fiber -$y2 $cover $IDsteel stressStrain; # bottom steel recorder
recorder Element -xml SSWebConc.out -time -ele 2001 section fiber -$y2 $cover $IDcore stressStrain; # bottom concrete recorder

# Define constant axial load
pattern Plain 3001 Constant {
load 1002 $P 0.0 0.0
}

# Define analysis parameters
integrator LoadControl 0 1 0 0
system SparseGeneral -piv; # Overkill, but may need the pivoting!
test EnergyIncr 1.0e-1 100
numberer Plain
constraints Plain
algorithm Newton
analysis Static

# Do one analysis for constant axial load
analyze 1

# Define reference moment
pattern Plain 3002 "Linear" {
load 1002 0.0 0.0 1.0
}

# Compute curvature increment
set dK [expr $Ku/$numIncr]

# Use displacement control at node 1002 for section analysis, dof 3
integrator DisplacementControl 1002 3 $dK 1 $dK $dK

# Do the section analysis
set ok [analyze $numIncr]
puts "Analysis Run"

# ----------------------------------------------if convergence failure-------------------------
set IDctrlNode 1002
set IDctrlDOF 3
set Dmax $Ku
set Dincr $dK
set TolStatic 1.e-2;
set testTypeStatic EnergyIncr
set maxNumIterStatic 6
set algorithmTypeStatic Newton
set fmt1 "%s Pushover analysis: CtrlNode %.3i, dof %.1i, Curv=%.4f /%s"; # format for screen/file output of DONE/PROBLEM analysis

if {$ok != 0} {
# if analysis fails, we try some other stuff, performance is slower inside this loop
set Dstep 0.0;
set ok 0
while {$Dstep <= 1.0 && $ok == 0} {
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
set Dstep [expr $controlDisp/$Dmax]
set ok [analyze 1]; # this will return zero if no convergence problems were encountered
if {$ok != 0} {; # reduce step size if still fails to converge
set Nk 4; # reduce step size
set DincrReduced [expr $Dincr/$Nk];
integrator DisplacementControl $IDctrlNode $IDctrlDOF $DincrReduced
for {set ik 1} {$ik <=$Nk} {incr ik 1} {
set ok [analyze 1]; # this will return zero if no convergence problems were encountered
if {$ok != 0} {
# if analysis fails, we try some other stuff
# performance is slower inside this loop global maxNumIterStatic; # max no. of iterations performed before "failure to converge" is ret'd
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $TolStatic 2000 0
algorithm Newton -initial
set ok [analyze 1]
test $testTypeStatic $TolStatic $maxNumIterStatic 0
algorithm $algorithmTypeStatic
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm $algorithmTypeStatic
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm $algorithmTypeStatic
}
if {$ok != 0} {; # stop if still fails to converge
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
return -1
}; # end if
}; # end for
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr; # bring back to original increment
}; # end if
}; # end while loop
}; # end if ok !0
# -----------------------------------------------------------------------------------------------------
global LunitTXT; # load time-unit text
if { [info exists LunitTXT] != 1} {set LunitTXT "Length"}; # set blank if it has not been defined previously.
if {$ok != 0 } {
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
} else {
puts [format $fmt1 "DONE" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
}

puts "Analysis Finished"
puts " -------------------------------------------------------------- "

silvia
Posts: 3909
Joined: Tue Jan 11, 2005 7:44 am
Location: Degenkolb Engineers
Contact:

Post by silvia »

you need to set the gravity load constant after the axial-load analysis.
Silvia Mazzoni, PhD
Structural Consultant
Degenkolb Engineers
235 Montgomery Street, Suite 500
San Francisco, CA. 94104
stuarts
Posts: 6
Joined: Sat Sep 27, 2008 8:00 pm
Location: UW

Post by stuarts »

Wouldn't adding a gravity load analysis just increase the axial load on the wall section? Or does it do something else?

When I have the axial load at 0.1f'cAg the moment to reach a specific curvature is about 1% of the moment at the same curvature when there is no axial load, which makes no real sense. Is this purely because I don't have a gravity analysis?

Should I be using the "analyze $GravSteps" command?
silvia
Posts: 3909
Joined: Tue Jan 11, 2005 7:44 am
Location: Degenkolb Engineers
Contact:

Post by silvia »

you do have a gravity analysis in the script
Silvia Mazzoni, PhD
Structural Consultant
Degenkolb Engineers
235 Montgomery Street, Suite 500
San Francisco, CA. 94104
stuarts
Posts: 6
Joined: Sat Sep 27, 2008 8:00 pm
Location: UW

Post by stuarts »

Where?

I am pretty new to OpenSees so I have been modifying the M-C script from the examples online. I know what most of the commands are doing except in the actual analysis section of the code, I am still trying to figure out exactly what everything does, which makes troubleshooting a little harder!
silvia
Posts: 3909
Joined: Tue Jan 11, 2005 7:44 am
Location: Degenkolb Engineers
Contact:

Post by silvia »

the analysis is performed using previously-defined model and analysis parameters whenever the command "analyze" is invoked.
look for it in the script.
Silvia Mazzoni, PhD
Structural Consultant
Degenkolb Engineers
235 Montgomery Street, Suite 500
San Francisco, CA. 94104
Post Reply