Pushover analysis with zerolength element and pinching4 material

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

Moderators: silvia, selimgunay, Moderators

Post Reply
amazingcharlie
Posts: 3
Joined: Mon Jan 10, 2022 10:52 am

Pushover analysis with zerolength element and pinching4 material

Post by amazingcharlie » Thu Feb 03, 2022 11:04 am

I would like to do a pushover analysis with the use of zerolength element and pinching4 material.

I have this following code for a two story model with lumped mass and two shear springs (one shear spring for each floor) using pinching4 material. When I plot the base shear vs displacement, the maximum base shear I could get was just the maximum force that I defined for my pinching4 material, which is the maximum force that could be developed for one shear spring. Why can't I get a base shear that is more than the maximum of one shear spring since I have two shear springs? It's really confusing for me. Does anyone know what might cause this? Thanks for any help in advance!

# INITIALIZATION --------------------------------------------------

wipe; # clear memory of all past model definitions
model BasicBuilder -ndm 2 -ndf 3; # define the model builder, ndm=#dimension, ndf=#dofs

# 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 g [expr 32.2*$ft/pow($sec,2)]; # gravitational acceleration

# Create ground nodes
node 1 0.0 0.0
# Create 1st floor nodes
node 2 0.0 0.0
# Create 2nd floor nodes
node 3 0.0 0.0

# Boundary constraints
fix 1 1 1 1

# constraints
# tag DX DY DZ RX RY RZ
fix 2 0 1 1
fix 3 0 1 1

# Define Material
uniaxialMaterial Pinching4 1 4.5 0.1 9.1093 0.715439 11.3866 1.58142 2.27733 3.62045 -4.42363 -0.12314 -8.84726 -0.700735 -11.0591 -1.72259 -2.21182 -4.51102 0.3 0.08 -0.1 0.3 0.08 -0.1 0.2 0.2 1.5 1.5 0.5 0.2 0.2 1.5 1.5 0.5 0 0 0 0 0 10 energy

# Define elements
# 1st floor elements
element zeroLength 1 1 2 -mat 1 -dir 1
# 2nd floor elements
element zeroLength 2 2 3 -mat 1 -dir 1

set unitmass [expr 1/$g]
mass 2 $unitmass 0 0
mass 3 $unitmass 0 0

# Eigenvalue analysis
set numModes 2
#-----------------------------
set lambda [eigen -fullGenLapack $numModes]

# calculate frequencies and periods of the structure
#---------------------------------------------------
set omega {}
set f {}
set T {}
set pi 3.141593

foreach lam $lambda {
lappend omega [expr sqrt($lam)]
lappend f [expr sqrt($lam)/(2*$pi)]
lappend T [expr (2*$pi)/sqrt($lam)]
}

puts "omega are $omega"
puts "---------------------------------------------------------------------------------"
puts "periods are $T"

# open output file
set Periods [open "periods.txt" "w"]

# write the data
foreach t $T {
puts $Periods " $t"
}

# close the file
close $Periods

set Storyheight [expr 10*$ft];
set HFloor1 [expr $Storyheight];
set HFloor2 [expr $HFloor1+$Storyheight];
set HBuilding [expr 2*$Storyheight];


###################################################################################################
# Define Analysis Type
###################################################################################################
# Define type of analysis: "pushover" = pushover
set analysisType "pushover";
if {$analysisType == "pushover"} {
set dataDir Pushover-Output; # name of output folder
file mkdir $dataDir; # create output folder
}
# Define RECORDERS -------------------------------------------------------------
recorder Node -file $dataDir/RBase.txt -time -node 1 -dof 1 reaction; # support reaction
recorder Node -file $dataDir/R1.txt -time -node 2 -dof 1 reaction; # support reaction
recorder Node -file $dataDir/R2.txt -time -node 3 -dof 1 reaction; # support reaction
recorder Node -file $dataDir/Disp_X1.txt -time -node 2 -dof 1 disp
recorder Node -file $dataDir/Disp_X2.txt -time -node 3 -dof 1 disp
recorder Element -file $dataDir/ElementForce.txt -time -ele 1 2 force;


#######################################################################################
# #
# Analysis Section #
# #
#######################################################################################

############################################################################
# Pushover Analysis #
############################################################################
if {$analysisType == "pushover"} {
puts "Running Pushover..."
}
# assign lateral loads and create load pattern: use ASCE 7-10 distribution
# --------------------------------------------------------------------------------------------------------------------------------
# LATERAL-LOAD distribution for static pushover analysis
# calculate distribution of lateral load based on mass/weight distributions along building height
# Fj = WjHj/sum(WiHi) * Weight at each floor j
set FloorWeight [expr $unitmass*$g];
set WeightTotal [expr 2*$FloorWeight]; # total building weight
set WiHi1 [expr $FloorWeight*$HFloor1]; # storey weight times height, for lateral-load distribution
set WiHi2 [expr $FloorWeight*$HFloor2]; # storey weight times height, for lateral-load distribution
set sumWiHi [expr $WiHi1+$WiHi2]; # sum of storey weight times height, for lateral-load distribution

set F1 [expr $WiHi1/$sumWiHi*$WeightTotal]; # lateral load at level
set F2 [expr $WiHi2/$sumWiHi*$WeightTotal]; # lateral load at level

# create load pattern for lateral pushover load coefficient when using linear load pattern
# need to apply lateral load only to the master nodes of the rigid diaphragm at each floor
pattern Plain 200 Linear {;
load 2 $F1 0.0 0.0;
load 3 $F2 0.0 0.0;
}

# displacement parameters
set IDctrlNode 3; # node where disp is read for disp control
set IDctrlDOF 1; # degree of freedom read for disp control (1 = x displacement)
# characteristics of pushover analysis
set Dmax [expr 0.1*$HBuilding ]; # maximum displacement of pushover. push to 10% drift.
set Dincr [expr 0.0001*$HBuilding ]; # displacement increment. you want this to be small, but not too small to slow analysis

constraints Transformation;
numberer RCM;
system BandGeneral;
test EnergyIncr 1.e-6 6 0;
algorithm Newton
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr
analysis Static

set fmt1 "%s Pushover analysis: CtrlNode %.3i, dof %.1i, Disp=%.4f %s"; # format for screen/file output of DONE/PROBLEM analysis
# ----------------------------------------------first analyze command------------------------
set Nsteps [expr int($Dmax/$Dincr)];# number of pushover analysis steps
set ok [analyze $Nsteps]; # this will return zero if no convergence problems were encountered
# ----------------------------------------------if convergence failure-------------------------
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 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test EnergyIncr 1.0e-6 6 0
algorithm Newton
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
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
# -----------------------------------------------------------------------------------------------------
if {$ok != 0 } {
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
} else {
puts [format $fmt1 "DONE" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
}
wipe;

mhscott
Posts: 875
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Pushover analysis with zerolength element and pinching4 material

Post by mhscott » Fri Feb 04, 2022 5:11 am

You have two springs in series, so the maximum applied force is limited by the maximum force in one spring.

Post Reply