Hi,
I have been trying to run a pushover analysis on a brace frame, but it gives me convergence problems. I modeled the brace frame with an initial imperfection and a fiber section. I used the equalDOF to model a pin connection. Can someone please tell me what I am doing wrong? My Script is bellow:
wipe
model BasicBuilder -ndm 2 -ndf 3
#nodes
node 1 0 0
node 2 288 0
node 3 0 144
node 4 144 144
node 5 288 144
node 6 0 0
node 7 288 0
node 8 0 144
node 9 144 144
node 10 144 144
node 11 288 144
node 12 58 57.76846
node 13 65 64.74052
node 14 72 71.71257
node 15 79 78.74063
node 20 86 85.76869
node 16 230 57.76846
node 17 223 64.74052
node 18 216 71.71257
node 19 209 78.74063
node 21 202 85.76869
#Boundary Conditions
fix 1 1 1 0
fix 2 1 1 0
equalDOF 1 6 1 2
equalDOF 2 7 1 2
equalDOF 3 8 1 2
equalDOF 4 9 1 2
equalDOF 4 10 1 2
equalDOF 5 11 1 2
##Materials
set Fy 60000
set E 2.9E7
set b 0.005
uniaxialMaterial Steel02 1 $Fy $E $b
uniaxialMaterial Elastic 2 $E
set bracemat 1
section fiberSec 1 {
# PatchAISC "HSS6x6x3/8": matTag NSIJ NSJK Iy Iz Jy Jz Ky Kz Ly Lz
patch quadr $bracemat 4 2 +2.651000E+000 +3.000000E+000 +2.651000E+000 -3.000000E+000 +3.000000E+000 -3.000000E+000 +3.000000E+000 +3.000000E+000
patch quadr $bracemat 1 4 -2.651000E+000 +3.000000E+000 -2.651000E+000 +2.651000E+000 +2.651000E+000 +2.651000E+000 +2.651000E+000 +3.000000E+000
patch quadr $bracemat 1 4 -2.651000E+000 -2.651000E+000 -2.651000E+000 -3.000000E+000 +2.651000E+000 -3.000000E+000 +2.651000E+000 -2.651000E+000
patch quadr $bracemat 4 2 -3.000000E+000 +3.000000E+000 -3.000000E+000 -3.000000E+000 -2.651000E+000 -3.000000E+000 -2.651000E+000 +3.000000E+000
}
puts "Sections done"
##Transformation
geomTransf Corotational 1
geomTransf PDelta 2
#Define Elements
element elasticBeamColumn 1 1 3 16 29000000 21.3 2;#column
element elasticBeamColumn 2 2 5 16 29000000 21.3 2;#column
element elasticBeamColumn 3 8 4 16 29000000 21.3 2;#beam
element elasticBeamColumn 4 4 11 16 29000000 21.3 2;#beam
element dispBeamColumn 5 6 12 5 1 1;#brace
element dispBeamColumn 6 12 13 5 1 1;#brace
element dispBeamColumn 7 13 14 5 1 1;#brace
element dispBeamColumn 8 14 15 5 1 1;#brace
element dispBeamColumn 9 15 20 5 1 1;#brace
element dispBeamColumn 15 20 9 5 1 1;#brace
element dispBeamColumn 10 7 16 5 1 1;#brace
element dispBeamColumn 11 16 17 5 1 1;#brace
element dispBeamColumn 12 17 18 5 1 1;#brace
element dispBeamColumn 13 18 19 5 1 1;#brace
element dispBeamColumn 14 19 21 5 1 1;#brace
element dispBeamColumn 16 21 10 5 1 1;#brace
puts "Elements done"
# Define gravity loads
# --------------------
# Create a Plain load pattern with a Linear TimeSeries
pattern Plain 1 Linear {
# Create nodal loads at nodes
load 3 0 0 0
load 5 0 0 0
}
test NormDispIncr 1.0e-4 500 0
# Create the solution algorithm, a Newton-Raphson algorithm
algorithm Newton
# Create the integration scheme, the LoadControl scheme using steps of 0.1
integrator LoadControl 0.1 1 0.05 0.1
# Create the system of equation, a SPD using a profile storage scheme
system UmfPack
# Create the DOF numberer, the reverse Cuthill-McKee algorithm
numberer RCM
# Create the constraint handler, the transformation method
constraints Plain
# Create the analysis object
analysis Static
# ------------------------------------------------
# End of analysis generation for gravity analysis
# -------------------------------------------------
# ------------------------------
# Perform gravity load analysis
# ------------------------------
# perform the gravity load analysis, requires 500 steps to reach the load level
analyze 500
# set gravity loads to be const and set pseudo time to be 0.0
# for start of lateral load analysis
loadConst -time 0.0
# ------------------------------
# Add lateral loads
# ------------------------------
set H 1000
# Reference lateral loads
# Create a Plain load pattern with a Linear TimeSeries
pattern Plain 2 Linear {
load 5 $H 0 0
}
# ------------------------------
# Start of recorder generation
# ------------------------------
# Create a recorder which writes to Node.out and prints
# the current load factor (pseudo-time) and dof 1 displacements at node 5
recorder Node -file Node55.out -time -node 5 -dof 1 disp
# Source in some commands to display the model
# comment out one of lines
set displayMode "displayON"
#set displayMode "displayOFF"
if {$displayMode == "displayON"} {
# a window to plot the nodal displacements versus load for node 5
recorder plot Node55.out Node_5_Xdisp 10 340 900 700 -columns 2 1 -dT 0.1
}
# ------------------------------
# End of recorder generation
# ------------------------------
# ------------------------------
# Start of lateral load analysis
# ------------------------------
# Change the integrator to take a min and max load increment
integrator LoadControl 1.0 4 0.01 0.1
# Perform the analysis
# Perform the pushover analysis
# Set some parameters
set maxU 1.0; # Max displacement
set controlDisp 0.0;
set ok 0;
while {$controlDisp < $maxU && $ok == 0} {
set ok [analyze 1]
set controlDisp [nodeDisp 5 1]
if {$ok != 0} {
puts "... trying an initial tangent iteration with Newton"
test NormDispIncr 1.0e-4 500 0
algorithm ModifiedNewton -initial
set ok [analyze 3000]
test NormDispIncr 1.0e-4 200 0
algorithm Newton
}
}
if {$ok != 0} {
puts "Pushover analysis FAILED"
} else {
puts "Pushover analysis completed SUCCESSFULLY"
}
Thank You in advance!!!
Brace Frame Convergence Issues.
Moderators: silvia, selimgunay, Moderators