Hello,
I am doing a Pushover-Analysis of a simple frame model, which has a weak story regarding strength. in the 13th of 18 floors.
If I don't consider P-Delta, then everything is fine and the model / analysis runs fine.
But if I consider PDelta, I get some convergence problems, which results in a strange output.
The Convergence Problems can be solved using the Newton algorithm with initial tangent.
But at a roof displacement of 4.85, the recorders of the moment in the springs show a bending moment in a location, where no bending moment should occur.
Attached you can find the code.
After you run the code, please look at the reaction in the third direction of the spring on the base (look at both nodal reactions in third directions). Firstly the Moment of one node is zero, and than it >>jumps<< up to a certain value, to decrease afterwards.
What is here going on and how can I solve this problem?
Another question is, why the vertical and horizontal reaction of the fixing can be get by recordering node 2 (which is constraint to the fixing using equalDOF), whereelse the reaction in third direction is recordered only at node 1 (where the fixing is) .
I hope you have a hint for me where the problem comes from and how I can solve it.
Thanks a lot, Clemens
#Here is the code:
# Pushover of a Frame structure with/without PDelta
wipe
wipe analysis
# loop over all number of stories n
for {set n 18} {$n <=18} {set n [expr $n+3]} {
# Definition von benötigten Variablen/Parametern:
set h 3.66; # story height
set l 7.32; # bay width
set m 45343.5; # half story mass
set E 2e11; # youngs modulous
set A 1e08; # area
set pi 3.1415927
set g 9.81
set alpha 0.03; # spring hardening coefficient
set gamma 0.1; # base shear coefficient
set nue 1.0; # considering weight fraction for live load
set RahmenName "TestFrame1";
set incrDisp 0.01; # displacement increment of PO
set outfile "POResults"; # Output Location
file mkdir "$outfile"
file delete $outfile/DRoof.txt
file delete $outfile/RBase.txt
file delete $outfile/DStory.txt
# for various cases
for {set ID 1} {$ID <= 4} {incr ID} {
if {$ID == 1} {
set MPlast "ON";
set PDelta "ON";
} elseif {$ID == 2} {
set MPlast "ON";
set PDelta "OFF";
} elseif {$ID == 3} {
set MPlast "OFF";
set PDelta "ON";
} else {
set MPlast "OFF";
set PDelta "OFF";
}
# Procedure for Rotational Spring
source _rotSpring2D.tcl
# Stiffness parameters:
set I(1) 1.000000
set I(2) 0.990783
set I(3) 0.977173
set I(4) 0.957081
set I(5) 0.931405
set I(6) 0.899762
set I(7) 0.862314
set I(8) 0.818996
set I(9) 0.769836
set I(10) 0.714823
set I(11) 0.653965
set I(12) 0.587264
set I(13) 0.514722
set I(14) 0.436347
set I(15) 0.352144
set I(16) 0.262125
set I(17) 0.166525
set I(18) 0.068717
set I1 0.002409
# Strength
set My(1) 1463775.158157
set My(2) 2923167.169515
set My(3) 2895632.786568
set My(4) 2853566.945871
set My(5) 2793242.116173
set My(6) 2716257.213354
set My(7) 2621930.566183
set My(8) 2510549.080516
set My(9) 2381991.148624
set My(10) 2236304.905127
set My(11) 2073466.958317
set My(12) 1893480.567927
set My(13) 1696333.140770
set My(14) 889204.3035; #1482007.172495
set My(15) 1250459.715436
set My(16) 1001585.409725
set My(17) 735146.059385
set My(18) 451357.182686
set My(19) 162239.811392
# spring stiffnesses
set Kf(1) 197470121.686547
set Kf(2) 394940243.373094
set Kf(3) 391300079.149924
set Kf(4) 385924942.437616
set Kf(5) 377989803.067764
set Kf(6) 367849317.378916
set Kf(7) 355352223.257862
set Kf(8) 340562501.024026
set Kf(9) 323454479.561590
set Kf(10) 304039217.197369
set Kf(11) 282312369.588685
set Kf(12) 258277096.257485
set Kf(13) 231934187.084256
set Kf(14) 203284431.949486
set Kf(15) 172330990.375119
set Kf(16) 139075837.062375
set Kf(17) 103523711.294172
set Kf(18) 65767424.027704
set Kf(19) 27139108.703869
# 1st-Mode Vector
set phi1(1) 0.055556
set phi1(2) 0.111111
set phi1(3) 0.166667
set phi1(4) 0.222222
set phi1(5) 0.277778
set phi1(6) 0.333333
set phi1(7) 0.388889
set phi1(8) 0.444444
set phi1(9) 0.500000
set phi1(10) 0.555556
set phi1(11) 0.611111
set phi1(12) 0.666667
set phi1(13) 0.722222
set phi1(14) 0.777778
set phi1(15) 0.833333
set phi1(16) 0.888889
set phi1(17) 0.944445
set phi1(18) 1.000000
# --------------------------------------------------
# Model
# --------------------------------------------------
#
# Two-dimensional Model
model basic -ndm 2 - ndf 3
#
# Transformation
if {$PDelta == "OFF"} {
geomTransf Linear 1
} else {
geomTransf PDelta 1
}
# Loops for building up the frame.
# Using the symmetrie: just one Column with masses and a rotational spring representing the girder
# loop of stories
for {set nsto 0} {$nsto <= $n} {incr nsto} {
# loop of nodes (bays)
for {set kno 1} {$kno <= 2} {incr kno} {
# ----------------
# nodes
# ----------------
# tag x y
node [expr 2*$nsto+$kno] 0 [expr $nsto*$h]
# ----------------
# fixing
# ----------------
if {$kno == 1} {
if {$nsto == 0} {
# tag dx dy rotz
fix [expr 2*$nsto+$kno] 1 1 1
} else {
# tag dx dy rotz
fix [expr 2*$nsto+$kno] 0 0 1
}
}
# ----------------
# masses
# ----------------
if {$kno == 2 && $nsto > 0} {
# tag x y ry
mass [expr 2*$nsto+$kno] $m $m 0
}
# ----------------
# columns
# ----------------
if {$kno == 2 && $nsto > 0} {
# tag von bis A E I transfTag
element elasticBeamColumn $nsto [expr 2*$nsto] [expr 2*$nsto+$kno] $A $E [expr 1.0*$I1*$I($nsto)] 1
}
# ----------------
# springs
# ----------------
if {$kno == 2} {
if {$MPlast == "OFF"} {
# tag Ke
uniaxialMaterial Elastic [expr $nsto+1] $Kf([expr $nsto+1])
} else {
# tag Fy E Verf.
uniaxialMaterial Steel01 [expr $nsto+1] $My([expr $nsto+1]) $Kf([expr $nsto+1]) $alpha
}
# eleID kn kn matID
rotSpring2D [expr $n+$nsto+1] [expr 2*$nsto+$kno-1] [expr 2*$nsto+$kno] [expr $nsto+1]
}
}
}
# --------------------------------------------------
# End of Model
# --------------------------------------------------
#
#
# --------------------------------------------------
# Loads for Gravity Analysis
# --------------------------------------------------
#
# Dead load -------------------------------------
pattern Plain 1 Linear {
for {set nload 1} {$nload <= $n} {incr nload} {
# node# Fx Fy Fz
load [expr 2+2*$nload] 0. [expr -$g*$m*$nue] 0.
}
}
constraints Plain;
numberer RCM;
system BandGeneral;
test NormDispIncr 1.0e-8 15 ;
algorithm Newton;
integrator LoadControl 0.1;
analysis Static;
analyze 10;
loadConst -time 0.0;
###############################################################################
# Pushover-Analyse ---------------------------------
###############################################################################
# --------------------------------------------------
# Recorder Definition
# --------------------------------------------------
#
recorder Node -file $outfile/DRoof(PDelta_$PDelta)(MPlast_$MPlast).txt -node [expr 2*$n+2] -dof 1 disp;
recorder Node -file $outfile/RBase(PDelta_$PDelta)(MPlast_$MPlast).txt -node 2 -dof 1 reaction;
set NodeNumbersList {}; # Node Numbers with Masses
set NodeNumbersList2 {};# Node Numbers of symmetry-fixing
for {set var2 2} {$var2 <= [expr 2*$n+2]} {set var2 [expr $var2 + 2]} {
lappend NodeNumbersList $var2
lappend NodeNumbersList2 [expr $var2-1]
}
set recorderName1 "recorder Node -file $outfile/DStory(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList -dof 1 disp"
eval $recorderName1
set recorderName2 "recorder Node -file $outfile/WStory(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList -dof 2 disp"
eval $recorderName2
set recorderName3 "recorder Node -file $outfile/PhiStory(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList -dof 3 disp"
eval $recorderName3
set recorderName4 "recorder Node -file $outfile/MStory(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList -dof 3 reaction"
eval $recorderName4
set recorderName5 "recorder Node -file $outfile/HStory(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList -dof 1 reaction"
eval $recorderName5
set recorderName6 "recorder Node -file $outfile/VStory(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList -dof 2 reaction"
eval $recorderName6
set recorderName7 "recorder Node -file $outfile/MStory2(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList2 -dof 3 reaction"
eval $recorderName7
set recorderName8 "recorder Node -file $outfile/HStory2(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList2 -dof 1 reaction"
eval $recorderName8
set recorderName9 "recorder Node -file $outfile/VStory2(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList2 -dof 2 reaction"
eval $recorderName9
set recorderName10 "recorder Node -file $outfile/DStory2(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList2 -dof 1 disp"
eval $recorderName10
set recorderName20 "recorder Node -file $outfile/WStory2(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList2 -dof 2 disp"
eval $recorderName20
set recorderName30 "recorder Node -file $outfile/PhiStory2(PDelta_$PDelta)(MPlast_$MPlast).txt -node $NodeNumbersList2 -dof 3 disp"
eval $recorderName30
#
#
# initial Base-Shear
set Vy [expr $g*$m*$n*$gamma]
# Building up the load pattern
set phisum 0
# loading
pattern Plain 2 Linear {
# p1st mode affine pattern
for {set lf 1} {$lf <= $n} {incr lf} {
set phisum [expr $phisum + $phi1($lf)]
}
for {set i 1} {$i <= $n} {incr i} {
set V($i) [expr $phi1($i)*$Vy/$phisum]
# node# Fx Fy Fz
load [expr 2+2*$i] $V($i) 0. 0.;
}
}
puts "Loadpattern done"
# Calculate rotations of yielding start
for {set j 1} {$j <= [expr $n+1]} {incr j} {
set fliessrot($j) [expr $My($j)/$Kf($j)]
}
# Parameters of Pushover-Analysis
set IDctrlNode [expr 2+2*$n]; # controlNode
set IDctrlDOF 1; # Direction Control Node
set Dincr [expr $incrDisp]; # increment of PO
constraints Plain;
numberer RCM;
system SparseSYM;
set Tol 1.e-8;
set maxNumIter 100;
set printFlag 0;
set TestType NormDispIncr ;
test $TestType $Tol $maxNumIter $printFlag;
set algorithmType Newton ; # Starting with Newton
algorithm $algorithmType;
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr;
analysis Static
#===============================================================================
# PUSHOVER - ANALYSIS
#===============================================================================
set ok 0;
set controlDisp 0.0; # Start at Zero
set BaseShear 1;
if {$ID==1} {
set targetDispl_zeroStrength 100.0; # Boarder if something goes wrong
}
while {$controlDisp < $targetDispl_zeroStrength && $ok == 0 && $BaseShear > 0} {
set recorderCommand "recorder Node -file $outfile/RBase_Now.txt -node 2 -dof 1 reaction"
set rectagPO1 [eval $recorderCommand]
set ok [analyze 1 ]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 2000 0
algorithm Newton -initial
set ok [analyze 1 ]
test $TestType $Tol $maxNumIter 0
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm $algorithmType -initial
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 ]
algorithm $algorithmType -initial
}
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]; # get displacement of control node
##############################################
# Adaption of maximum displacement #
##############################################
remove recorder $rectagPO1
set channel [open $outfile/RBase_Now.txt r]
gets $channel BaseShear
set BaseShear [expr $BaseShear*(-1.0)]; # to change signs
close $channel;
file delete $outfile/RBase_Now.txt
#puts "Displ: $controlDisp BaseShear: $BaseShear"
if {$ID == 1 && $BaseShear < 0} {
set targetDispl_zeroStrength $controlDisp
}
}
if {$ok != 0} {puts "No Convergence !!!!"} {puts "DonePushover"}
wipe model
wipe analysis
}
#file copy -force Vergleich.m Ausgabe($n)/Vergleich.m
puts "Done $n story frame"
}
puts "Done"
Strange Things Going On Doing Pushover Analysis
Moderators: silvia, selimgunay, Moderators