Specially concentrated braced frame

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

Moderators: silvia, selimgunay, Moderators

SHAIJALKM
Posts: 3
Joined: Wed Sep 16, 2020 8:46 pm

Specially concentrated braced frame

# --------------------------------------------------------------------------------------------------
# 2D model of 1-Story 1-Bay Special Concentric Braced Frame - dynamic and pushover analysis
#---------------------------------------------------------------------------------------------------
# Braces are defined with 10 force beam-column elements (with 3 IPs)
# Gusset plates are modeled with: (i) force based beam-column elements (with 2 IPs), (ii) rotational hinge
# Rigid portions of gusset plates, beams and columns are defined with rigid elastic elements.
# Geometric imperfection of braces is out-of-plane parabolic in shape with the inital imperfection of Leff/1000.

# Created by: Vesna Terzic, UC Berkeley, 2013
# Units: kips, inches, seconds

# Element ID conventions:
# 1x = frame columns
# 2a = frame beams
# 3a00 = braces
# 4ab = gusset plates
# 5a, 6a, 7ab = rigid elements of beams, columns and braces
#
# where:
# x = Pier #
# a, b = integers describing the location (see description where elements are defined)

foreach GP_Model { "RH" "GP" } {
# GP stands for gusset plate connection model based on Uriz report: PEER 2008/08
# RH stands for gusset plate connection model that uses rotational spring based on: Po-Chien Hsiao, Dawn E. Lehman, Charles W. Roeder, (2012), "Improved analytical model for special concentrically braced frames", Journal of Constructional Steel Research 73 (21012) 80-94
###################################################################################################
# Set Up & Source Definition
###################################################################################################
wipe; # clear memory of past model definitions
model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm = #dimension, ndf = #dofs
source WSection.tcl; # procedure for creating standard steel W section
source HSSsection.tcl; # procedure for creating standard steel HSS section
source GPsection.tcl; # procedure for creating gusset plate section

###################################################################################################
# Define Analysis Type and create output folder
###################################################################################################
# Define type of analysis: "pushover" = pushover; "dynamic" = dynamic
set analysisType "dynamic";

if {\$analysisType == "pushover"} {
if { \$GP_Model == "GP" } {
set dataDir Pushover-Output-GP; # name of output folder
} else {
}
file mkdir \$dataDir; # create output folder
}
if {\$analysisType == "dynamic"} {
if { \$GP_Model == "GP" } {
set dataDir Dynamic-Output-GP; # name of output folder
} else {
}
set subDir1 DriftAcceleration
set subDir2 ForceDeformation
file mkdir \$dataDir/\$subDir1; # create output folder
}

###################################################################################################
# Define Building Geometry, Nodes, and Constraints
###################################################################################################
# define structure-geometry parameters
set NStories 3; # number of stories
set NBays 1; # number of frame bays
set WBay 300.; # bay width in inches
set HStory 150.; # 1st story height in inches
set HBuilding [expr ((\$NStories)*\$HStory)]; # height of building

# calculate locations frame nodes:
set Pier1 0.0; # leftmost column line
set Pier2 [expr \$Pier1 + \$WBay];
set Floor1 0.0; # ground floor
set Floor2 [expr \$Floor1 + \$HStory]; # first floor
set Floor3 [expr \$Floor2 + \$HStory]; # second floor
set Floor4 [expr \$Floor3 + \$HStory]; # Third floor

# joint offset distance for beams, columns, and braces (from gusset plate geometry)
set jOff_col_b 44.81; # joint offset at the bottom of the column (gusset-plate conection)
set jOff_beam_m 50.56; # joint offset from the middle node of beam (gusset-plate conection)
set jOff_brace_b 26.2; # joint offset at the bottom of a braces in X and Y direction (from work point to yield line)
set jOff_brace_t 31.95; # joint offset at the top of a brace in X and Y direction (from work point to yield line)
set jOff_beam_e 7.61; # joint offset for the beam at its ends (from column centerline to the shear tab hinge line)
set jOff_beam_ex 44.81; # joint offset at the bottom of the column (gusset-plate conection)
set jOff_col_t 13.355; # joint offset for a column at the beam-column conection (Dbeam/2)

# end node ofsets of the braces (from a work point to the beginning of the brace)
set nOff_brace_b 28.68; # bottom of a brace in X and Y direction
set nOff_brace_t 34.43; # top of a brace in X and Y direction

# brace effective lenght, number of elements per braace, and initial imperfection
set PI [expr 2.*asin(1.0)]
set alpha [expr \$PI/4.]
set Leff [expr (\$WBay/2.)/cos(\$alpha)-\$nOff_brace_b/cos(\$alpha)-\$nOff_brace_t/cos(\$alpha)]; #effective brace lenght
set noEle 10; # number of elements per brace
set p_ratio 1000.; #coresponds to 0.05% of the effective lenght
set p [expr 1./\$p_ratio*\$Leff]; #imperfection of the brace

# floor masses
set g 386.4; # acceleration due to gravity
set NodalMass2H 2.513; # horizontal mass
set NodalMass2V 0.21; # veritcal mass
set NodalMass3H 2.513; # horizontal mass
set NodalMass3V 0.21; # veritcal mass
set NodalMass4H 2.513; # horizontal mass
set NodalMass4V 0.21; # veritcal mass

# define nodes and assign masses to beam-column intersections of frame
# command: node nodeID xcoord ycoord -mass mass_dof1 mass_dof2 mass_dof3
node 1 \$Pier1 \$Floor1;
node 2 \$Pier2 \$Floor1;
node 3 \$Pier1 \$Floor2 -mass [expr \$NodalMass2H/3.] [expr \$NodalMass2V*0.375] 0.0;
node 4 [expr \$WBay/2.0] \$Floor2 0.0 -mass [expr \$NodalMass2H/3.] [expr \$NodalMass2V*0.25] 0.0;
node 5 \$Pier2 \$Floor2 0.0 -mass [expr \$NodalMass2H/3.] [expr \$NodalMass2V*0.375] 0.0;
node 6 \$Pier1 \$Floor3 -mass [expr \$NodalMass3H/3.] [expr \$NodalMass3V*0.375] 0.0;
node 7 [expr \$WBay/2.0] \$Floor3 0.0 -mass [expr \$NodalMass3H/3.] [expr \$NodalMass3V*0.25] 0.0;
node 8 \$Pier2 \$Floor3 0.0 -mass [expr \$NodalMass3H/3.] [expr \$NodalMass3V*0.375] 0.0;
node 9 \$Pier1 \$Floor4 -mass [expr \$NodalMass4H/3.] [expr \$NodalMass4V*0.375] 0.0;
node 10 [expr \$WBay/2.0] \$Floor4 0.0 -mass [expr \$NodalMass4H/3.] [expr \$NodalMass4V*0.25] 0.0;
node 12 \$Pier2 \$Floor4 0.0 -mass [expr \$NodalMass4H/3.] [expr \$NodalMass4V*0.375] 0.0;

# define extra nodes in the beam
# at shear tabs (pin connection)
node 921 [expr \$Pier1+\$jOff_beam_e] \$Floor4
node 922 [expr \$Pier1+\$jOff_beam_e] \$Floor4
node 1221 [expr \$Pier2-\$jOff_beam_e] \$Floor4
node 1222 [expr \$Pier2-\$jOff_beam_e] \$Floor4
# at gusset plate conection
node 1021 [expr \$WBay/2.0-\$jOff_beam_m] \$Floor4
node 1022 [expr \$WBay/2.0+\$jOff_beam_m] \$Floor4
node 721 [expr \$WBay/2.0-\$jOff_beam_m] \$Floor3
node 722 [expr \$WBay/2.0+\$jOff_beam_m] \$Floor3
node 421 [expr \$WBay/2.0-\$jOff_beam_m] \$Floor2
node 422 [expr \$WBay/2.0+\$jOff_beam_m] \$Floor2

# define extra nodes in the columns
# nodes at the base ground floor
node 11 \$Pier1 [expr \$Floor1+\$jOff_col_b]
node 21 \$Pier2 [expr \$Floor1+\$jOff_col_b]
# nodes at the beam-column conection ground floor
node 31 \$Pier1 [expr \$Floor2-\$jOff_col_t]
node 51 \$Pier2 [expr \$Floor2-\$jOff_col_t]
# nodes at the beam-column conection first floor
node 32 \$Pier1 [expr \$Floor2+\$jOff_col_b]
node 52 \$Pier2 [expr \$Floor2+\$jOff_col_b]
# nodes at the beam-column conection first floor
node 61 \$Pier1 [expr \$Floor3-\$jOff_col_t]
node 81 \$Pier2 [expr \$Floor3-\$jOff_col_t]
# nodes at the beam-column conection second floor
node 62 \$Pier1 [expr \$Floor3+\$jOff_col_b]
node 82 \$Pier2 [expr \$Floor3+\$jOff_col_b]
# nodes at the beam-column conection first floor
node 91 \$Pier1 [expr \$Floor4-\$jOff_col_t]
node 121 \$Pier2 [expr \$Floor4-\$jOff_col_t]

# define extra nodes in the beams
# nodes at the beam-column conection floor 2
node 34 [expr \$Pier1+\$jOff_beam_ex] \$Floor2
node 54 [expr \$Pier2-\$jOff_beam_ex] \$Floor2
# nodes at the beam-column conection floor 3
node 64 [expr \$Pier1+\$jOff_beam_ex] \$Floor3
node 84 [expr \$Pier2-\$jOff_beam_ex] \$Floor3

# define extra nodes for rigid links in the braces in ground floor:
if { \$GP_Model == "GP" } {
node 13 [expr \$Pier1+\$jOff_brace_b] [expr \$Floor1+\$jOff_brace_b]
node 431 [expr \$Pier1+\$WBay/2.0-\$jOff_brace_t] [expr \$Floor2-\$jOff_brace_t]
node 23 [expr \$Pier2-\$jOff_brace_b] [expr \$Floor1+\$jOff_brace_b]
node 432 [expr \$Pier2-\$WBay/2.0+\$jOff_brace_t] [expr \$Floor2-\$jOff_brace_t]
} else {
node 13 [expr \$Pier1+\$nOff_brace_b] [expr \$Floor1+\$nOff_brace_b]
node 431 [expr \$Pier1+\$WBay/2.0-\$nOff_brace_t] [expr \$Floor2-\$nOff_brace_t]
node 23 [expr \$Pier2-\$nOff_brace_b] [expr \$Floor1+\$nOff_brace_b]
node 432 [expr \$Pier2-\$WBay/2.0+\$nOff_brace_t] [expr \$Floor2-\$nOff_brace_t]
}
# define extra nodes for rigid links in the braces in first floor:
if { \$GP_Model == "GP" } {
node 33 [expr \$Pier1+\$jOff_brace_b] [expr \$Floor2+\$jOff_brace_b]
node 731 [expr \$Pier1+\$WBay/2.0-\$jOff_brace_t] [expr \$Floor3-\$jOff_brace_t]
node 53 [expr \$Pier2-\$jOff_brace_b] [expr \$Floor2+\$jOff_brace_b]
node 732 [expr \$Pier2-\$WBay/2.0+\$jOff_brace_t] [expr \$Floor3-\$jOff_brace_t]
} else {
node 33 [expr \$Pier1+\$nOff_brace_b] [expr \$Floor2+\$nOff_brace_b]
node 731 [expr \$Pier1+\$WBay/2.0-\$nOff_brace_t] [expr \$Floor3-\$nOff_brace_t]
node 53 [expr \$Pier2-\$nOff_brace_b] [expr \$Floor2+\$nOff_brace_b]
node 732 [expr \$Pier2-\$WBay/2.0+\$nOff_brace_t] [expr \$Floor3-\$nOff_brace_t]
}
# define extra nodes for rigid links in the braces in second floor:
if { \$GP_Model == "GP" } {
node 63 [expr \$Pier1+\$jOff_brace_b] [expr \$Floor3+\$jOff_brace_b]
node 1031 [expr \$Pier1+\$WBay/2.0-\$jOff_brace_t] [expr \$Floor4-\$jOff_brace_t]
node 83 [expr \$Pier2-\$jOff_brace_b] [expr \$Floor3+\$jOff_brace_b]
node 1032 [expr \$Pier2-\$WBay/2.0+\$jOff_brace_t] [expr \$Floor4-\$jOff_brace_t]
} else {
node 63 [expr \$Pier1+\$nOff_brace_b] [expr \$Floor3+\$nOff_brace_b]
node 1031 [expr \$Pier1+\$WBay/2.0-\$nOff_brace_t] [expr \$Floor4-\$nOff_brace_t]
node 83 [expr \$Pier2-\$nOff_brace_b] [expr \$Floor3+\$nOff_brace_b]
node 1032 [expr \$Pier2-\$WBay/2.0+\$nOff_brace_t] [expr \$Floor4-\$nOff_brace_t]
}

# define extra nodes along the braces:
#----------------------------------------------
# nodeID convention: "3acd" where and a = left or right
# "a" convention: 1 = left; 2 = right;
# cd = node numbering for the brace (can be between 1 and 99)

# nodes of the left brace of storey 1
# puts "brace 11"
set orient "pos"
set shift 3100
set Xi [expr \$Pier1+\$nOff_brace_b]; # x coordinate of node 3101
set Yi [expr \$Floor1+\$nOff_brace_b]; # y coordinate of node 3101
set eleL [expr \$Leff/\$noEle]
for { set i 1 } { \$i <= [expr \$noEle+1] } { incr i} {
#local coordinates
set xm [expr \$eleL*(\$i-1)]
set ym [expr 4.*\$p/\$Leff*\$xm*(1.-\$xm/\$Leff)];
#global coordinates
if {\$orient == "pos"} {
set Xm [expr \$Xi+cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm+cos(\$alpha)*\$ym];
} else {
set Xm [expr \$Xi-cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm-cos(\$alpha)*\$ym];
}
if { \$i == [expr \$noEle+1] } {
set Xm [expr \$Pier1+\$WBay/2.0-\$nOff_brace_t]; # x coordinate of the last node
set Ym [expr \$Floor2-\$nOff_brace_t]; # y coordinate of the last node
}
#define nodes
node [expr \$shift+\$i] \$Xm \$Ym
#puts "node: [expr \$shift+\$i] \$Xm \$Ym \$Zm"
}

# nodes of the right brace of storey 1
# puts "brace 12"
set orient "neg"
set shift 3200
set Xi [expr \$Pier2-\$nOff_brace_b]; # x coordinate of node 3201
set Yi [expr \$Floor1+\$nOff_brace_b]; # y coordinate of node 3201
for { set i 1 } { \$i <= [expr \$noEle+1] } { incr i} {
#local coordinates
set xm [expr \$eleL*(\$i-1)]
set ym [expr 4.*\$p/\$Leff*\$xm*(1.-\$xm/\$Leff)];
#global coordinates
if {\$orient == "pos"} {
set Xm [expr \$Xi+cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm+cos(\$alpha)*\$ym];
} else {
set Xm [expr \$Xi-cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm-cos(\$alpha)*\$ym];
}
if { \$i == [expr \$noEle+1] } {
set Xm [expr \$Pier2-\$WBay/2.0+\$nOff_brace_t]; # x coordinate of the last node
set Ym [expr \$Floor2-\$nOff_brace_t]; # y coordinate of of the last node
}
#define nodes
node [expr \$shift+\$i] \$Xm \$Ym
#puts "node: [expr \$shift+\$i] \$Xm \$Ym \$Zm"
}
# nodes of the left brace of storey 2
# puts "brace 21"
set orient "pos"
set shift 3300
set Xi [expr \$Pier1+\$nOff_brace_b]; # x coordinate of node 3301
set Yi [expr \$Floor2+\$nOff_brace_b]; # y coordinate of node 3301
set eleL [expr \$Leff/\$noEle]
for { set i 1 } { \$i <= [expr \$noEle+1] } { incr i} {
#local coordinates
set xm [expr \$eleL*(\$i-1)]
set ym [expr 4.*\$p/\$Leff*\$xm*(1.-\$xm/\$Leff)];
#global coordinates
if {\$orient == "pos"} {
set Xm [expr \$Xi+cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm+cos(\$alpha)*\$ym];
} else {
set Xm [expr \$Xi-cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm-cos(\$alpha)*\$ym];
}
if { \$i == [expr \$noEle+1] } {
set Xm [expr \$Pier1+\$WBay/2.0-\$nOff_brace_t]; # x coordinate of the last node
set Ym [expr \$Floor3-\$nOff_brace_t]; # y coordinate of the last node
}
#define nodes
node [expr \$shift+\$i] \$Xm \$Ym
#puts "node: [expr \$shift+\$i] \$Xm \$Ym \$Zm"
}

# nodes of the right brace of storey 2
# puts "brace 22"
set orient "neg"
set shift 3500
set Xi [expr \$Pier2-\$nOff_brace_b]; # x coordinate of node 3501
set Yi [expr \$Floor2+\$nOff_brace_b]; # y coordinate of node 3501
for { set i 1 } { \$i <= [expr \$noEle+1] } { incr i} {
#local coordinates
set xm [expr \$eleL*(\$i-1)]
set ym [expr 4.*\$p/\$Leff*\$xm*(1.-\$xm/\$Leff)];
#global coordinates
if {\$orient == "pos"} {
set Xm [expr \$Xi+cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm+cos(\$alpha)*\$ym];
} else {
set Xm [expr \$Xi-cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm-cos(\$alpha)*\$ym];
}
if { \$i == [expr \$noEle+1] } {
set Xm [expr \$Pier2-\$WBay/2.0+\$nOff_brace_t]; # x coordinate of the last node
set Ym [expr \$Floor3-\$nOff_brace_t]; # y coordinate of of the last node
}
#define nodes
node [expr \$shift+\$i] \$Xm \$Ym
#puts "node: [expr \$shift+\$i] \$Xm \$Ym \$Zm"
}
# nodes of the left brace of storey 3
# puts "brace 31"
set orient "pos"
set shift 3600
set Xi [expr \$Pier1+\$nOff_brace_b]; # x coordinate of node 3601
set Yi [expr \$Floor3+\$nOff_brace_b]; # y coordinate of node 3601
set eleL [expr \$Leff/\$noEle]
for { set i 1 } { \$i <= [expr \$noEle+1] } { incr i} {
#local coordinates
set xm [expr \$eleL*(\$i-1)]
set ym [expr 4.*\$p/\$Leff*\$xm*(1.-\$xm/\$Leff)];
#global coordinates
if {\$orient == "pos"} {
set Xm [expr \$Xi+cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm+cos(\$alpha)*\$ym];
} else {
set Xm [expr \$Xi-cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm-cos(\$alpha)*\$ym];
}
if { \$i == [expr \$noEle+1] } {
set Xm [expr \$Pier1+\$WBay/2.0-\$nOff_brace_t]; # x coordinate of the last node
set Ym [expr \$Floor4-\$nOff_brace_t]; # y coordinate of the last node
}
#define nodes
node [expr \$shift+\$i] \$Xm \$Ym
#puts "node: [expr \$shift+\$i] \$Xm \$Ym \$Zm"
}

# nodes of the right brace of storey 3
# puts "brace 12"
set orient "neg"
set shift 3800
set Xi [expr \$Pier2-\$nOff_brace_b]; # x coordinate of node 3801
set Yi [expr \$Floor3+\$nOff_brace_b]; # y coordinate of node 3801
for { set i 1 } { \$i <= [expr \$noEle+1] } { incr i} {
#local coordinates
set xm [expr \$eleL*(\$i-1)]
set ym [expr 4.*\$p/\$Leff*\$xm*(1.-\$xm/\$Leff)];
#global coordinates
if {\$orient == "pos"} {
set Xm [expr \$Xi+cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm+cos(\$alpha)*\$ym];
} else {
set Xm [expr \$Xi-cos(\$alpha)*\$xm-sin(\$alpha)*\$ym];
set Ym [expr \$Yi+sin(\$alpha)*\$xm-cos(\$alpha)*\$ym];
}
if { \$i == [expr \$noEle+1] } {
set Xm [expr \$Pier2-\$WBay/2.0+\$nOff_brace_t]; # x coordinate of the last node
set Ym [expr \$Floor4-\$nOff_brace_t]; # y coordinate of of the last node
}
#define nodes
node [expr \$shift+\$i] \$Xm \$Ym
#puts "node: [expr \$shift+\$i] \$Xm \$Ym \$Zm"
}

# assign boundary condidtions
#-------------------------------------------------------
# command: fix nodeID dxFixity dyFixity rzFixity
# fixity values: 1 = constrained; 0 = unconstrained

# fix the base of the frame;
fix 1 1 1 1
fix 2 1 1 1

# define constraints for pined beam-to-column connection
equalDOF 922 921 1 2
equalDOF 1222 1221 1 2

# define constraints for zeroLenght elements used to model rotational hinge
if { \$GP_Model == "RH" } {
equalDOF 13 3101 1 2
equalDOF 23 3201 1 2
equalDOF 431 [expr 3101+\$noEle] 1 2
equalDOF 432 [expr 3201+\$noEle] 1 2
equalDOF 33 3301 1 2
equalDOF 53 3501 1 2
equalDOF 731 [expr 3301+\$noEle] 1 2
equalDOF 732 [expr 3501+\$noEle] 1 2
equalDOF 63 3601 1 2
equalDOF 83 3801 1 2
equalDOF 1031 [expr 3601+\$noEle] 1 2
equalDOF 1032 [expr 3801+\$noEle] 1 2
}

###################################################################################################
# Define Materials and Sections
###################################################################################################

# define material for nonlinear beams and columns
set matID_BC 1
set matID_fatBC 2
set Es 29000.0; # modulus of elasticity for steel
set Fy 50.0; # yield stress of steel
set b 0.003; # strain hardening ratio
uniaxialMaterial Steel02 \$matID_BC \$Fy \$Es \$b 20 0.925 0.15 0.0005 0.01 0.0005 0.01
uniaxialMaterial Fatigue \$matID_fatBC \$matID_BC

# define material for braces
set matID_Brace 3
set matID_fatBrace 4
set Fy_b 46.0; # yield stress of steel
set E0 0.095
set m -0.5
uniaxialMaterial Steel02 \$matID_Brace \$Fy_b \$Es \$b 20 0.925 0.15 0.0005 0.01 0.0005 0.01
uniaxialMaterial Fatigue \$matID_fatBrace \$matID_Brace -E0 \$E0 -m \$m -min -1.0 -max 0.04
#uniaxialMaterial Fatigue \$matID_fatBrace \$matID_Brace -E0 \$E0 -m \$m

# define material for gusset plates
# GP_Model == GP
set matID_GP 5
set Fy_gp 50.0
uniaxialMaterial Steel02 \$matID_GP \$Fy_gp \$Es \$b 20 0.925 0.15 0.0005 0.01 0.0005 0.01
# GP_Model == RH
# rotational hinge (dir 6)
set matID_RHb 11
set matID_RHt 12
set My_b 772.
set My_t 772.
set Krot_b 18045.12
set Krot_t 15571.02
set b 0.01
uniaxialMaterial Steel02 \$matID_RHb \$My_b \$Krot_b \$b 20 0.925 0.15 0.0005 0.01 0.0005 0.01
uniaxialMaterial Steel02 \$matID_RHt \$My_t \$Krot_t \$b 20 0.925 0.15 0.0005 0.01 0.0005 0.01

# define material for ghost truss
set matID_GT 6
uniaxialMaterial Elastic \$matID_GT 100.0

# define material for rigid truss elements
set matID_RT 7
uniaxialMaterial Elastic \$matID_RT \$Es

# define sections
#-----------------
set secTagC 10
set secTagC1 60
set secTagB 20
set secTagBr 30
set secTagGPb 40
set secTagGPt 50

# command: WSection secID matID d bf tf tw nfdw nftw nfbf nftf
# column: W14x257
WSection \$secTagC \$matID_fatBC 17.54 16.36 2.47 1.54 8 1 1 4
# column: W14x176
WSection \$secTagC1 \$matID_fatBC 15.22 15.65 1.31 0.83 8 1 1 4
# beam: W27x114
WSection \$secTagB \$matID_fatBC 27.29 10.07 0.93 0.57 8 1 1 4

# define sections for braces
# command: HSSsection secID matID d t nfdy nfty nfdz nftz
# HSS10x10x0.625
HSSsection \$secTagBr \$matID_fatBrace 10 0.625 5 4 5 2

# define sections for gusset plates
# command: GPsection secID matID d t nfd nft
# bottom of the brace
GPsection \$secTagGPb \$matID_GP 1.375 49. 8 1
# top of the brace
GPsection \$secTagGPt \$matID_GP 1.375 49. 8 1

###################################################################################################
# Define Geometric Transformation
###################################################################################################
set transfTag_C 1
set transfTag_Brace 2
set transfTag_B 3

# rigid links of columns; columns
geomTransf PDelta \$transfTag_C

# braces, gusset plates
geomTransf Corotational \$transfTag_Brace

# beams
geomTransf PDelta \$transfTag_B

###################################################################################################
# Define Elements
###################################################################################################

set tol 1.e-8
set maxIter 10

# define columns of a braced frame:
#----------------------------------
# eleID convention: "1xy", 1 = column, x=Pier, y=Floor #
# command arguments: \$eleID \$iNode \$jNode \$numIntgrPts \$secTag \$transfTag
element forceBeamColumn 111 11 31 4 \$secTagC \$transfTag_C -iter \$maxIter \$tol
element forceBeamColumn 112 32 61 4 \$secTagC1 \$transfTag_C -iter \$maxIter \$tol
element forceBeamColumn 113 62 91 4 \$secTagC1 \$transfTag_C -iter \$maxIter \$tol
element forceBeamColumn 121 21 51 4 \$secTagC \$transfTag_C -iter \$maxIter \$tol
element forceBeamColumn 122 52 81 4 \$secTagC1 \$transfTag_C -iter \$maxIter \$tol
element forceBeamColumn 123 82 121 4 \$secTagC1 \$transfTag_C -iter \$maxIter \$tol

# define beams of a braced frame:
#--------------------------------
# eleID convention: "2xya", 2 = beam, x=Pier, y=Floor a = location of the beam
# "a" convention: 1 = left end of bay; 2 = right end of bay;
# command arguments: \$eleID \$iNode \$jNode \$numIntgrPts \$secTag \$transfTag
element forceBeamColumn 2121 34 421 3 \$secTagB \$transfTag_B -iter \$maxIter \$tol
element forceBeamColumn 2222 422 54 3 \$secTagB \$transfTag_B -iter \$maxIter \$tol
element forceBeamColumn 2131 64 721 3 \$secTagB \$transfTag_B -iter \$maxIter \$tol
element forceBeamColumn 2232 722 84 3 \$secTagB \$transfTag_B -iter \$maxIter \$tol
element forceBeamColumn 2141 922 1021 3 \$secTagB \$transfTag_B -iter \$maxIter \$tol
element forceBeamColumn 2242 1022 1222 3 \$secTagB \$transfTag_B -iter \$maxIter \$tol

# define braces:
#----------------
# eleID convention: "3acd", 3 = brace, a = location of the brace
# "a" convention: 1 = left brace; 2 = right brace;
# cd = element numbering for the brace (can be between 1 and 99)
# command arguments: \$eleID \$iNode \$jNode \$numIntgrPts \$secTag \$transfTag
set NIP 3

# storey 1 - left brace
set shift 3100
for { set i 1 } { \$i <= [expr \$noEle] } { incr i} {
element forceBeamColumn [expr \$shift+\$i] [expr \$shift+\$i] [expr \$shift+\$i+1] \$NIP \$secTagBr \$transfTag_Brace -iter \$maxIter \$tol
}

# storey 1 - right brace
set shift 3200
for { set i 1 } { \$i <= [expr \$noEle] } { incr i} {
element forceBeamColumn [expr \$shift+\$i] [expr \$shift+\$i] [expr \$shift+\$i+1] \$NIP \$secTagBr \$transfTag_Brace -iter \$maxIter \$tol
}
# storey 2 - left brace
set shift 3300
for { set i 1 } { \$i <= [expr \$noEle] } { incr i} {
element forceBeamColumn [expr \$shift+\$i] [expr \$shift+\$i] [expr \$shift+\$i+1] \$NIP \$secTagBr \$transfTag_Brace -iter \$maxIter \$tol
}

# storey 2 - right brace
set shift 3500
for { set i 1 } { \$i <= [expr \$noEle] } { incr i} {
element forceBeamColumn [expr \$shift+\$i] [expr \$shift+\$i] [expr \$shift+\$i+1] \$NIP \$secTagBr \$transfTag_Brace -iter \$maxIter \$tol
}
# storey 3 - left brace
set shift 3600
for { set i 1 } { \$i <= [expr \$noEle] } { incr i} {
element forceBeamColumn [expr \$shift+\$i] [expr \$shift+\$i] [expr \$shift+\$i+1] \$NIP \$secTagBr \$transfTag_Brace -iter \$maxIter \$tol
}

# storey 3 - right brace
set shift 3800
for { set i 1 } { \$i <= [expr \$noEle] } { incr i} {
element forceBeamColumn [expr \$shift+\$i] [expr \$shift+\$i] [expr \$shift+\$i+1] \$NIP \$secTagBr \$transfTag_Brace -iter \$maxIter \$tol
}

# define gusset plates:
#----------------------
# define gusset plates for first storey
if { \$GP_Model == "GP" } {
# eleID convention: "4xyab", 4 = gusset plate, a, b = location of the gusset plate
# x=Pier, y=Floor
# "a" convention: 1 = left brace; 2 = right brace;
# "b" convention: 1 = bottom; 2 = top
# command arguments: \$eleID \$iNode \$jNode \$numIntgrPts \$secTag \$transfTag
set NIP 2
# left brace
set shift 3100
element forceBeamColumn 41111 13 [expr \$shift+1] \$NIP \$secTagGPb \$transfTag_Brace
element forceBeamColumn 41212 [expr \$shift+\$noEle+1] 431 \$NIP \$secTagGPt \$transfTag_Brace
# right brace
set shift 3200
element forceBeamColumn 42121 23 [expr \$shift+1] \$NIP \$secTagGPb \$transfTag_Brace
element forceBeamColumn 42222 [expr \$shift+\$noEle+1] 432 \$NIP \$secTagGPt \$transfTag_Brace
} else {
# command arguemnts: \$eleTag \$iNode \$jNode -mat \$matTag1 \$matTag2 ... -dir \$dir1 \$dir2
# left brace
set shift 3100
element zeroLength 41111 13 [expr \$shift+1] -mat \$matID_RHb -dir 6
element zeroLength 41212 [expr \$shift+\$noEle+1] 431 -mat \$matID_RHt -dir 6
# right brace
set shift 3200
element zeroLength 42121 23 [expr \$shift+1] -mat \$matID_RHb -dir 6
element zeroLength 42222 [expr \$shift+\$noEle+1] 432 -mat \$matID_RHt -dir 6
}
# define gusset plates for second storey
if { \$GP_Model == "GP" } {
# eleID convention: "4xyab", 4 = gusset plate, a, b = location of the gusset plate
# x=Pier, y=Floor
# "a" convention: 1 = left brace; 2 = right brace;
# "b" convention: 1 = bottom; 2 = top
# command arguments: \$eleID \$iNode \$jNode \$numIntgrPts \$secTag \$transfTag
set NIP 2
# left brace
set shift 3300
element forceBeamColumn 41211 33 [expr \$shift+1] \$NIP \$secTagGPb \$transfTag_Brace
element forceBeamColumn 41312 [expr \$shift+\$noEle+1] 731 \$NIP \$secTagGPt \$transfTag_Brace
# right brace
set shift 3500
element forceBeamColumn 42221 53 [expr \$shift+1] \$NIP \$secTagGPb \$transfTag_Brace
element forceBeamColumn 42322 [expr \$shift+\$noEle+1] 732 \$NIP \$secTagGPt \$transfTag_Brace
} else {
# command arguemnts: \$eleTag \$iNode \$jNode -mat \$matTag1 \$matTag2 ... -dir \$dir1 \$dir2
# left brace
set shift 3300
element zeroLength 41211 33 [expr \$shift+1] -mat \$matID_RHb -dir 6
element zeroLength 41312 [expr \$shift+\$noEle+1] 731 -mat \$matID_RHt -dir 6
# right brace
set shift 3500
element zeroLength 42221 53 [expr \$shift+1] -mat \$matID_RHb -dir 6
element zeroLength 42322 [expr \$shift+\$noEle+1] 732 -mat \$matID_RHt -dir 6
}
# define gusset plates for third storey
if { \$GP_Model == "GP" } {
# eleID convention: "4xyab", 4 = gusset plate, a, b = location of the gusset plate
# x=Pier, y=Floor
# "a" convention: 1 = left brace; 2 = right brace;
# "b" convention: 1 = bottom; 2 = top
# command arguments: \$eleID \$iNode \$jNode \$numIntgrPts \$secTag \$transfTag
set NIP 2
# left brace
set shift 3600
element forceBeamColumn 41311 63 [expr \$shift+1] \$NIP \$secTagGPb \$transfTag_Brace
element forceBeamColumn 41412 [expr \$shift+\$noEle+1] 1031 \$NIP \$secTagGPt \$transfTag_Brace
# right brace
set shift 3800
element forceBeamColumn 42321 83 [expr \$shift+1] \$NIP \$secTagGPb \$transfTag_Brace
element forceBeamColumn 42422 [expr \$shift+\$noEle+1] 1032 \$NIP \$secTagGPt \$transfTag_Brace
} else {
# command arguemnts: \$eleTag \$iNode \$jNode -mat \$matTag1 \$matTag2 ... -dir \$dir1 \$dir2
# left brace
set shift 3600
element zeroLength 41311 63 [expr \$shift+1] -mat \$matID_RHb -dir 6
element zeroLength 41412 [expr \$shift+\$noEle+1] 1031 -mat \$matID_RHt -dir 6
# right brace
set shift 3800
element zeroLength 42321 83 [expr \$shift+1] -mat \$matID_RHb -dir 6
element zeroLength 42422 [expr \$shift+\$noEle+1] 1032 -mat \$matID_RHt -dir 6
}
#-----------------------
set Jrigid 1.0e4
set G [expr \$Es/2.0/(1+0.3)]

#braces
#-----------
set Arigid [expr 25.7*10.]; # area of the brace multiplied by 10
set Irigid [expr 548.*10]; # I of the brace multiplied by 10
# eleID convention: "5xya", 5 = rigid link for braces, a = location of the rigid link
# x=Pier, y=Floor
# "a" convention: 1 = left-botom; 2 = left-top; 3 = right-bottom; 4 = right-top;
# define rigid links for first storey
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iy \$transfTag
element elasticBeamColumn 5111 1 13 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5122 431 4 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5213 2 23 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5224 432 4 \$Arigid \$Es \$Irigid \$transfTag_Brace
# define rigid links for second storey
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iy \$transfTag
element elasticBeamColumn 5121 3 33 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5132 731 7 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5223 5 53 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5234 732 7 \$Arigid \$Es \$Irigid \$transfTag_Brace
# define rigid links for third storey
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iy \$transfTag
element elasticBeamColumn 5131 6 63 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5142 1031 10 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5233 8 83 \$Arigid \$Es \$Irigid \$transfTag_Brace
element elasticBeamColumn 5244 1032 10 \$Arigid \$Es \$Irigid \$transfTag_Brace

#beams
#-----------
set Arigid [expr 24.7*10.]; # area of the beam multiplied by 10
set IrigidZ [expr 2850.*10]; # Iz of the beam multiplied by 10
set IrigidY [expr 106.*10]; # Iy of the beam multiplied by 10

# eleID convention: "6xya", 6 = rigid link of beams, , a = location of the rigid link
# "a" convention: 1 = left; 2 = right; 3 = left-middle; 4 = right-middle;
# x=Pier, y=Floor
# define rigid links for second floor
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iz \$transfTag
element elasticBeamColumn 6121 3 34 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6222 54 5 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6123 421 4 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6224 4 422 \$Arigid \$Es \$IrigidZ \$transfTag_B
# define rigid links for third floor
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iz \$transfTag
element elasticBeamColumn 6131 6 64 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6232 84 8 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6133 721 7 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6234 7 722 \$Arigid \$Es \$IrigidZ \$transfTag_B
# define rigid links for fourth floor
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iz \$transfTag
element elasticBeamColumn 6141 9 921 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6242 1221 12 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6143 1021 10 \$Arigid \$Es \$IrigidZ \$transfTag_B
element elasticBeamColumn 6244 10 1022 \$Arigid \$Es \$IrigidZ \$transfTag_B

#columns
#-----------
set Arigid [expr 51.8*10.]; # area of the column multiplied by 10
set IrigidZ [expr 2140.*10]; # Iz of the column multiplied by 10
set IrigidY [expr 838.*10]; # Iy of the column multiplied by 10

# eleID convention: "7xya", 7 = rigid link of columns, x = pier, y = floor #, a = location of the rigid link
# "a" convention: 1 = botom; 2 = top;
# define rigid links for first storey
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iz \$transfTag
element elasticBeamColumn 7111 1 11 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7122 31 3 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7211 2 21 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7222 51 5 \$Arigid \$Es \$IrigidZ \$transfTag_C
# define rigid links for second storey
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iz \$transfTag
element elasticBeamColumn 7121 3 32 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7132 61 6 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7221 5 52 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7232 81 8 \$Arigid \$Es \$IrigidZ \$transfTag_C
# define rigid links for third storey
# comand arguemnts: \$eleTag \$iNode \$jNode \$A \$E \$Iz \$transfTag
element elasticBeamColumn 7131 6 62 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7142 91 9 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7231 8 82 \$Arigid \$Es \$IrigidZ \$transfTag_C
element elasticBeamColumn 7242 121 12 \$Arigid \$Es \$IrigidZ \$transfTag_C

# ghost trusses to the braces (with very small stiffness) to diminish convergence problems
# eleID convention: "8xya", 8 = ghost truss to braces, x = pier, y = floor #, a = location of the rigid link
# "a" convention: 1 = left; 2 = right;
#------------------------------
set Agt 0.05; #truss area
# braces
# define ghost trusses for first storey
element corotTruss 8111 3101 [expr 3101+\$noEle] \$Agt \$matID_GT
element corotTruss 8212 3201 [expr 3201+\$noEle] \$Agt \$matID_GT
# define ghost trusses for second storey
element corotTruss 8121 3301 [expr 3301+\$noEle] \$Agt \$matID_GT
element corotTruss 8222 3501 [expr 3501+\$noEle] \$Agt \$matID_GT
# define ghost trusses for third storey
element corotTruss 8131 3601 [expr 3601+\$noEle] \$Agt \$matID_GT
element corotTruss 8232 3801 [expr 3801+\$noEle] \$Agt \$matID_GT

# add rigid truss elemnts to assure that the beam nodes move horizontaly together
#--------------------------------------------------------------------------------
set ArigidT 1000.0; # define area of truss section (make much larger than A of frame elements)
# eleID convention: "9xya", 9 = truss to beam, x = pier, y = floor #, a = location of the rigid link
# "a" convention: 1 = left; 2 = right;
# define trusses for second floor
# command: element truss \$eleID \$iNode \$jNode \$A \$materialID
element truss 9121 3 4 \$ArigidT \$matID_RT;
element truss 9222 4 5 \$ArigidT \$matID_RT;
# define trusses for second floor
# command: element truss \$eleID \$iNode \$jNode \$A \$materialID
element truss 9131 6 7 \$ArigidT \$matID_RT;
element truss 9232 7 8 \$ArigidT \$matID_RT;
# define trusses for third floor
# command: element truss \$eleID \$iNode \$jNode \$A \$materialID
element truss 9141 9 10 \$ArigidT \$matID_RT;
element truss 9242 10 12 \$ArigidT \$matID_RT;

############################################
# Display the model
############################################
recorder display "Model" 10 10 500 500 -wipe
prp 0 0 50
vup 0 1 0
vpn 0 0 1
display 1 2 10

############################################################################
# Gravity Loads & Gravity Analysis
############################################################################

pattern Plain 101 Linear {

#eleLoad -ele \$eleTag1 <\$eleTag2 ....> -type -beamUniform \$Wz <\$Wx>
set MgF [expr \$WBay/(\$WBay-2.*\$jOff_beam_m-2.*\$jOff_beam_e)]; # magnifying factor to accont for the load that can not be applied on the rigid portions of elements
set dl_F2 [expr -0.11238*\$MgF]; # distributed load at Floor

eleLoad -ele 2121 2222 -type -beamUniform \$dl_F2
eleLoad -ele 2131 2232 -type -beamUniform \$dl_F2
eleLoad -ele 2141 2242 -type -beamUniform \$dl_F2

}
set ViewScale 5;
#DisplayModel3D DeformedShape \$ViewScale ; # display deformed shape, the scaling factor needs to be adjusted for each model

set Tol 1.0e-6; # convergence tolerance for test
constraints Plain; # how it handles boundary conditions
#constraints Penalty 1.0e15 1.0e15;
numberer RCM; # renumber dof's to minimize band-width (optimization)
system BandGeneral; # how to store and solve the system of equations in the analysis (large model: try UmfPack)
test NormDispIncr \$Tol 10; # determine if convergence has been achieved at the end of an iteration step
algorithm Newton ; # use Newton's solution algorithm: updates tangent stiffness at every iteration
set NstepGravity 10; # apply gravity in 10 steps
set DGravity [expr 1.0/\$NstepGravity]; # load increment
integrator LoadControl \$DGravity; # determine the next time step for an analysis
analysis Static; # define type of analysis static or transient
analyze \$NstepGravity; # apply gravity

# maintain constant gravity loads and reset time to zero
puts "Model Built"

############################################################################
# Eigenvalue Analysis
############################################################################
set pi [expr 2.0*asin(1.0)]; # Definition of pi
set nEigenI 1; # mode i = 1
set nEigenJ 3; # mode j = 2
set lambdaN [eigen [expr \$nEigenJ]]; # eigenvalue analysis for nEigenJ modes
set lambdaI [lindex \$lambdaN [expr 0]]; # eigenvalue mode i = 1
set lambdaJ [lindex \$lambdaN [expr \$nEigenJ-2]]; # eigenvalue mode j = 2
set w1 [expr pow(\$lambdaI,0.5)]; # w1 (1st mode circular frequency)
set w2 [expr pow(\$lambdaJ,0.5)]; # w2 (2nd mode circular frequency)
set T1 [expr 2.0*\$pi/\$w1]; # 1st mode period of the structure
set T2 [expr 2.0*\$pi/\$w2]; # 2nd mode period of the structure
puts "T1 = \$T1 s"; # display the first mode period in the command window
puts "T2 = \$T2 s"; # display the second mode period in the command window

# # Display the first two mode shapes
# #--------------------------------------------
# recorder display "Mode 1" 10 10 500 500 -wipe
# prp 0 0 50
# vup 0 1 0
# vpn 0 0 1
# display -1 2 50

# recorder display "Mode 2" 10 520 500 500 -wipe
# prp 0 0 50
# vup 0 1 0
# vpn 0 0 1
# display -2 2 20

############################################################################
# Pushover Analysis #
############################################################################
if {\$analysisType == "pushover"} {
puts "Running Pushover..."
# assign lateral loads and create load pattern: use ASCE 7-10 distribution

pattern Plain 200 Linear {
load 3 0.5 0.0 0.0 ;
load 5 0.5 0.0 0.0 ;
}

# recorde disp at node 3 and reactions at the bottom nodels
recorder Node -file "\$dataDir/node3D.out" -time -node 3 -dof 1 disp
recorder Node -file "\$dataDir/reactions.out" -time -node 1 2 -dof 1 reaction

# 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)
set Dmax [expr 0.01*HBuilding]; # maximum displacement of pushover
set Dincr [expr \$Dmax/1000.]; # displacement increment

# pushover analysis commands
constraints Plain;
numberer RCM;
system BandGeneral;
test NormUnbalance 1.0e-6 10;
algorithm Newton;
integrator DisplacementControl \$IDctrlNode \$IDctrlDOF \$Dincr;
analysis Static;
set ok 0
set currentDisp 0.0
while {\$ok == 0 && \$currentDisp < \$Dmax} {
set ok [analyze 1]
if {\$ok != 0} {
test NormDispIncr 1.0e-6 1000 1
algorithm Newton –initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 10
algorithm Newton
}
set currentDisp [nodeDisp \$IDctrlNode 1]
}

puts "node3disp: [nodeDisp 3 1], node4disp: [nodeDisp 4 1], node5disp: [nodeDisp 5 1]"
puts "TargetDisp: \$Dmax"
}

############################################################################
# Transient Analysis #
############################################################################
if {\$analysisType == "dynamic"} {
puts "Running Transient analysis..."
# record drift histories
# drift recorder command: recorder Drift -file \$filename -iNode \$NodeI_ID -jNode \$NodeJ_ID -dof \$dof -perpDirn \$Record.drift.perpendicular.to.this.direction
recorder Drift -file "\$dataDir/\$subDir1/Drift.out" -iNode 1 -jNode 3 -dof 1 -perpDirn 2;
# record forces and deformations of columns
recorder Element -xml "\$dataDir/\$subDir2/Column_Force.out" -time -ele 11 12 force
recorder Element -xml "\$dataDir/\$subDir2/Column_basDef.out" -time -ele 11 12 basicDeformation
# record forces and deformations of beams
recorder Element -xml "\$dataDir/\$subDir2/Beam_Force.out" -time -ele 21 22 force
recorder Element -xml "\$dataDir/\$subDir2/Beam_basDef.out" -time -ele 21 22 basicDeformation
# record reactions
recorder Node -xml "\$dataDir/\$subDir2/Reaction.out" -time -node 1 2 -dof 1 2 3 reaction
# record nodal displacements
recorder Node -xml "\$dataDir/\$subDir2/dispT.out" -time -node 3 4 5 -dof 1 2 3 disp
# record displacements at the middle nodes of braces
set lst [list [expr 3100+\$noEle/2+1] [expr 3200+\$noEle/2+1]]
eval recorder Node -xml "\$dataDir/\$subDir2/Braces_MN_Disp.out" -time -node \$lst -dof 1 2 3 disp
# record section forces and deformation at the middle of the braces
eval recorder Element -xml "\$dataDir/\$subDir2/Brace_MN_ForceDeformation.out" -time -ele \$lst section 1 forceAndDeformation
# record stress-strain of the outer most fiber at the section at the middle of the element
eval recorder Element -xml "\$dataDir/\$subDir2/Brace_MN_StressStrain37.out" -time -ele \$lst section 1 fiber 37 stressStrain
eval recorder Element -xml "\$dataDir/\$subDir2/Brace_MN_StressStrain55.out" -time -ele \$lst section 1 fiber 55 stressStrain
# record basic deformations of the middle brace element
eval recorder Element -xml "\$dataDir/\$subDir2/Brace_MN_BasicDef.out" -time -ele \$lst basicDeformation

source Dynamic.EQ.tcl
}
}

wipe

This code is for 1 Bay 3 Story special concentrically braced frame. When i running this code , it shows lot of error. " FatigueMaterial: material tag 4 failed from excessive strain" is major error . I am using inverted V bracing in all stories. Please help me to rectify this error.

selimgunay
Posts: 883
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: Specially concentrated braced frame

uniaxialMaterial Fatigue \$matID_fatBrace \$matID_Brace -E0 \$E0 -m \$m -min -1.0 -max 0.04

You may need to increase the max value

SHAIJALKM
Posts: 3
Joined: Wed Sep 16, 2020 8:46 pm

Re: Specially concentrated braced frame

selimgunay wrote:
Mon Sep 21, 2020 11:05 pm
uniaxialMaterial Fatigue \$matID_fatBrace \$matID_Brace -E0 \$E0 -m \$m -min -1.0 -max 0.04

You may need to increase the max value
i changed this code to " uniaxialMaterial Fatigue \$matID_fatBrace \$matID_Brace -E0 \$E0 -m \$m -min -1.0 -max 1.0 ".Then it shows "FatigueMaterial: material tag 4 failed at pseudo peak" and "FatigueMaterial: material tag 4 failed from excessive strain".