3D Brace Modelling
Moderators: silvia, selimgunay, Moderators
3D Brace Modelling
Hi all,
I am modelling a single storey, one-by-two bay concentrically braced frame and I am having difficulty getting the braces to yield. The frame is idealised as it has all three frames concentrically braced.
I am modelling the braces as nonlinear beam-column elements with six elements per brace member and out-of-plane straightness in the two axes of the brace members to allow for buckling. I have used bi-directional uniform excitation to apply the acceleration time series history to the base nodes. My brace connection ends are pinned. I have used duplicate nodes at the column/brace connections with zerolength elements with high stiffness restraining the x, y & z directions (rotation is free).
I have used equalDOF between these duplicate nodes in order to enforce the same displacements at these nodes. The base brace nodes are restrained to the master node in the x, y & z only and the top storey brace nodes are restrained to the master node in the rx, ry & rz. Without equalDOF the analysis terminates. A rigid diaphragm is used to constrain the top nodes together.
When I run the analysis my braces do not yield and do not appear to be transferring the lateral force from the acceleration response. When I check the base shear (duplicate + master nodes) vs the mass*acceleration at the top of the storey they do not match up. I have run pushover analyses with the same model and the base shear and forces match exactly and buckling/failure of the braces is observed.
I thought this could be because the period of my model was too large and outside of the spectral acceleration of the time history. I artificially reduced the period, which did not have the effect I would have expected. I believe the issue to be the constraints I am applying to the brace ends, however I am not certain. Please, if anyone else has come across this problem modelling braces in 3D I would appreciate your help.
I am modelling a single storey, one-by-two bay concentrically braced frame and I am having difficulty getting the braces to yield. The frame is idealised as it has all three frames concentrically braced.
I am modelling the braces as nonlinear beam-column elements with six elements per brace member and out-of-plane straightness in the two axes of the brace members to allow for buckling. I have used bi-directional uniform excitation to apply the acceleration time series history to the base nodes. My brace connection ends are pinned. I have used duplicate nodes at the column/brace connections with zerolength elements with high stiffness restraining the x, y & z directions (rotation is free).
I have used equalDOF between these duplicate nodes in order to enforce the same displacements at these nodes. The base brace nodes are restrained to the master node in the x, y & z only and the top storey brace nodes are restrained to the master node in the rx, ry & rz. Without equalDOF the analysis terminates. A rigid diaphragm is used to constrain the top nodes together.
When I run the analysis my braces do not yield and do not appear to be transferring the lateral force from the acceleration response. When I check the base shear (duplicate + master nodes) vs the mass*acceleration at the top of the storey they do not match up. I have run pushover analyses with the same model and the base shear and forces match exactly and buckling/failure of the braces is observed.
I thought this could be because the period of my model was too large and outside of the spectral acceleration of the time history. I artificially reduced the period, which did not have the effect I would have expected. I believe the issue to be the constraints I am applying to the brace ends, however I am not certain. Please, if anyone else has come across this problem modelling braces in 3D I would appreciate your help.
Daniel McCrum
PhD Student
Trinity College Dublin
PhD Student
Trinity College Dublin
Many thanks Frank. Below are the files, firstly the BUILD file:
# UNITS: N, mm
wipe all;
file mkdir Data; # Create directory for data
model BasicBuilder -ndm 3 -ndf 6
source HEsection.tcl;
source HEsection1.tcl;
source HSsection.tcl;
# ------------------------------------
# Define Geometry
# ------------------------------------
set Lbeam1 4000; # beam 1 length
set Lbeam2 4000; # beam 2 length
set Lcol1 4000; # column length
set HBuilding $Lcol1; # Overall height of the building
# nodal coords.
# X Y Z
node 1 0 0 0
node 2 $Lbeam1 0 0
node 3 [expr $Lbeam1*2] 0 0
node 4 [expr $Lbeam1*2] 0 [expr $Lbeam2]
node 5 $Lbeam1 0 [expr $Lbeam2]
node 6 0 0 [expr $Lbeam2]
node 7 0 $Lcol1 0
node 8 $Lbeam1 $Lcol1 0
node 9 [expr $Lbeam1*2] $Lcol1 0
node 10 [expr $Lbeam1*2] $Lcol1 [expr $Lbeam2]
node 11 $Lbeam1 $Lcol1 [expr $Lbeam2]
node 12 0 $Lcol1 [expr $Lbeam2]
# Duplicate nodes for brace end zerolength sections
node 111 0 0 0
node 112 $Lbeam1 0 0
node 113 [expr $Lbeam1*2] 0 0
node 114 [expr $Lbeam1*2] 0 [expr $Lbeam2]
node 115 $Lbeam1 0 [expr $Lbeam2]
node 116 0 0 [expr $Lbeam2]
node 117 0 $Lcol1 0
node 118 $Lbeam1 $Lcol1 0
node 119 [expr $Lbeam1*2] $Lcol1 0
node 210 [expr $Lbeam1*2] $Lcol1 [expr $Lbeam2]
node 211 $Lbeam1 $Lcol1 [expr $Lbeam2]
node 212 0 $Lcol1 [expr $Lbeam2]
# Brace imperfection nodes 0.1% out-of-straight at mid-length
# six elements
# LHS Brace Members
node 30 -2 [expr ($Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
node 31 -4 [expr (2*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 32 -6 [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 33 -4 [expr (4*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 34 -2 [expr (5*$Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 35 2 [expr ($Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 36 4 [expr (2*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 37 6 [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 38 4 [expr (4*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 39 2 [expr (5*$Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
# Central Brace Members
node 40 [expr -2+$Lbeam1] [expr ($Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
node 41 [expr -4+$Lbeam1] [expr (2*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 42 [expr -6+$Lbeam1] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 43 [expr -4+$Lbeam1] [expr (4*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 44 [expr -2+$Lbeam1] [expr (5*$Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 45 [expr 2+$Lbeam1] [expr ($Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 46 [expr 4+$Lbeam1] [expr (2*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 47 [expr 6+$Lbeam1] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 48 [expr 4+$Lbeam1] [expr (4*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 49 [expr 2+$Lbeam1] [expr (5*$Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
# RHS Brace Members
node 50 [expr -2+$Lbeam1*2] [expr ($Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
node 51 [expr -4+$Lbeam1*2] [expr (2*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 52 [expr -6+$Lbeam1*2] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 53 [expr -4+$Lbeam1*2] [expr (4*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 54 [expr -2+$Lbeam1*2] [expr (5*$Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 55 [expr 2+$Lbeam1*2] [expr ($Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 56 [expr 4+$Lbeam1*2] [expr (2*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 57 [expr 6+$Lbeam1*2] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 58 [expr 4+$Lbeam1*2] [expr (4*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 59 [expr 2+$Lbeam1*2] [expr (5*$Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
# Pinned or Fixed connection
# Fixed
#fixY 0.0 1 1 1 1 1 1;
#fix 7 0 0 0 1 1 1
#fix 8 0 0 0 1 1 1
#fix 9 0 0 0 1 1 1
#fix 10 0 0 0 1 1 1
#fix 11 0 0 0 1 1 1
#fix 12 0 0 0 1 1 1
# Pinned
fixY 0.0 1 1 1 0 0 0;
# Rigid diaphragm
set perpDirn 2;
node 500 [expr $Lbeam1/2] $Lcol1 [expr $Lbeam2/2]
node 501 [expr $Lbeam1+$Lbeam1/2] $Lcol1 [expr $Lbeam2/2]
set masterNode 500;
set masterNode1 501;
# Constraints for rigid diaphragm master nodes
fix $masterNode 0 1 0 1 0 1
fix $masterNode1 0 1 0 1 0 1
rigidDiaphragm $perpDirn $masterNode 7 8 11 12 ;
rigidDiaphragm $perpDirn $masterNode1 8 9 10 11 ;
# Equal d.o.f. for disp in dx,dy,dz,rx,ry,rz.
equalDOF 1 111 1 2 3 4 5 6
equalDOF 2 112 1 2 3 4 5 6
equalDOF 3 113 1 2 3 4 5 6
equalDOF 4 114 1 2 3 4 5 6
equalDOF 5 115 1 2 3 4 5 6
equalDOF 6 116 1 2 3 4 5 6
equalDOF 7 117 4 5 6
equalDOF 8 118 4 5 6
equalDOF 9 119 4 5 6
equalDOF 10 210 4 5 6
equalDOF 11 211 4 5 6
equalDOF 12 212 4 5 6
# The bay is 2.70m wide and 2.47m long and the loading is as stated above
set g 9.81; # Acceleration due to gravity
set WeightBeam1 [expr 71.5*$Lbeam1*0.001*$g]; # Weight of beams 1 in Newtons
set WeightBeam2 [expr 71.5*$Lbeam2*0.001*$g]; # Weight of beams 2 in Newtons
set WeightCol1 [expr 26.7*$Lcol1*0.001*$g]; # Weight of columns in Newtons
set Weightnode7 [expr [expr $WeightBeam1*0.5] + [expr $WeightBeam2*0.5]]; # Dead load at nodes 7
set Weightnode8 [expr [expr $WeightBeam1*0.5] + [expr $WeightBeam2*0.5]]; # Dead load at nodes 9
set slabdp 250; # Slab depth of 250mm
set concweight 2.4465e-6; # Density of Concrete Slab in kg/mm3
set totalArea [expr ($Lbeam1+$Lbeam1)*$Lbeam2];
set TotalMass [expr ($concweight*$slabdp*$totalArea)]; # Total mass in kg
set TotalWeight [expr $TotalMass*$g]; # Total mass in Newtons
puts "Total Mass equals: $TotalMass";
puts "Total Weight equals: $TotalWeight";
set massNode7 [expr ($TotalMass/8)];
set massNode8 [expr ($TotalMass/4)];
puts "MassNode7 equals: $massNode7";
puts "MassNode8 equals: $massNode8";
set totalLoad7 [expr ($massNode7*$g)];
set totalLoad8 [expr ($massNode8*$g)];
puts "totalLoad7 equals: $totalLoad7";
puts "totalLoad8 equals: $totalLoad8";
# Nodal masses
mass 7 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
mass 8 $massNode8 0. $massNode8 1.0e-9 1.0e-9 1.0e-9;
mass 9 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
mass 10 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
mass 11 $massNode8 0. $massNode8 1.0e-9 1.0e-9 1.0e-9;
mass 12 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
# ------------------------------------
# Define material properties
# ------------------------------------
# Steel
set matID 100;
set Fy 235.; # 235N/mm2
set E 210000.; # 210kN/mm2
set b 0.03;
set R0 18.5;
set cR1 0.925;
set cR2 0.15;
uniaxialMaterial Steel02 $matID $Fy $E $b $R0 $cR1 $cR2
set poisson 0.3;
set G [expr $E/([expr 2*(1+$poisson)])]; # Torsional Stiffness
# Steel material in case you want to alter brace steel material properties
set steelTag 102;
set Fy 235.; # 235N/mm2
set E 210000.; # 210kN/mm2
set b 0.03;
set R0 18.5;
set cR1 0.925;
set cR2 0.15;
#set a1 -0.045;
#set a2 1.0;
#set a3 0.045;
#set a4 1.0;
uniaxialMaterial Steel02 $steelTag $Fy $E $b $R0 $cR1 $cR2
# ------------------------------------
# Define section parameters
# ------------------------------------
# Beam 1 Parameters:
# HE 220B x 220
set beam1secID 1;
set beam1FiberSecTag 2;
set d 220; # Overall section depth 220
set b 220; # Overall section width 220
set t 9.5; # Web thickness 9.5
set T 16; # Flange thickness 16
set dw [expr $d - 2*$T]; # Depth of web
set bb 0.01;
set subFLen 10; # sub-division across flange length
set subFThk 5; # sub-division across flange thickness
set subWLen 10; # sub-division across web length
set subWThk 5; # sub-division across web thickness
HEsection $beam1FiberSecTag $matID $d $b $dw $t $subWLen $subWThk $subFLen $subFThk
puts "HESection defined";
# Beam 1 torsional stiffness
set beam1TorsTag 70;
set J1 770000;
set GJ1 [expr $G*$J1];
uniaxialMaterial Elastic $beam1TorsTag $GJ1; # Define column torsional stiffness
section Aggregator $beam1secID $beam1TorsTag T -section $beam1FiberSecTag; # attach torsion and flexure
# Column parameters:
# HE 200B x 200 - Oversized to create stiffer frame
set colsecID 5;
set colFiberSecTag 6;
set d 200; # Overall section depth 200
set b 200; # Overall section width 200
set t 9; # Web thickness 9
set T 15; # Flange thickness 16
set dw [expr $d - 2*$T]; # Depth of web
set subFLen 10; # sub-division across flange length
set subFThk 5; # sub-division across flange thickness
set subWLen 10; # sub-division across web length
set subWThk 5; # sub-division across web thickness
HEsection1 $colFiberSecTag $matID $d $b $dw $t $subWLen $subWThk $subFLen $subFThk
puts "HESection1 defined";
# Column torsional stiffness
set colTorsTag 72;
set J3 139000;
set GJ3 [expr $G*$J3];
uniaxialMaterial Elastic $colTorsTag $GJ3; # Define column torsional stiffness
section Aggregator $colsecID $colTorsTag T -section $colFiberSecTag; # attach torsion and flexure
# Brace Parameters:
# 20 x 20 x 2.5RHS HOLLOW - Undersized
set bracesecID 7;
set braceFiberSecTag 8;
set d 20; # Overall section depth 50
set b 20; # Overall section width 50
set t 2.0; # Thickness 6.0
set subFLen 10; # sub-division across flange length
set subFThk 5; # sub-division across flange thickness
set subWLen 10; # sub-division across web length
set subWThk 5; # sub-division across web thickness
HSsection $braceFiberSecTag $steelTag $d $b $t $subWLen $subWThk $subFLen $subFThk
puts "HSSection defined";
# Brace torsional stiffness
set braceTorsTag 73;
set J4 84300;
set GJ4 [expr $G*$J4];
uniaxialMaterial Elastic $braceTorsTag $GJ4; # Define column torsional stiffness
section Aggregator $bracesecID $braceTorsTag T -section $braceFiberSecTag; # attach torsion and flexure
# Stiff brace ends
set matIDStiff 13;
set Ubig 1.0e12;
uniaxialMaterial Elastic $matIDStiff $Ubig;
# ------------------------------------
# Analysis Parameters
# ------------------------------------
# Coordinate transformation
set Beam1TransfTag 51;
set ColTransfTag 52;
set BraceTransfTag 53;
set BeamTransfType Linear;
set ColTransfType PDelta;
set BraceTransfType Corotational;
geomTransf $BeamTransfType $Beam1TransfTag 0 -1 0;
geomTransf $ColTransfType $ColTransfTag 0 0 1; # columns have PDelta effects
geomTransf $BraceTransfType $BraceTransfTag 0 -1 0;
# $eleTag NdI NdJ $numintgrPts $SectTag $transfTag
set numintgrPtsCol 7;
set numintgrPtsBeam 7;
set numintgrPtsBrace 7;
# Columns
element nonlinearBeamColumn 1 1 7 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 2 2 8 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 3 3 9 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 4 4 10 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 5 5 11 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 6 6 12 $numintgrPtsCol $colsecID $ColTransfTag
# Beams in each orthogonal direction
element nonlinearBeamColumn 20 7 12 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 21 8 11 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 22 9 10 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 23 7 8 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 24 8 9 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 25 10 11 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 26 11 12 $numintgrPtsBeam $beam1secID $Beam1TransfTag
# Brace members
# Two element braces
# LHS Bay
element nonlinearBeamColumn 30 111 30 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 31 30 31 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 32 31 32 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 33 32 33 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 34 33 34 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 35 34 212 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 40 116 35 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 41 35 36 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 42 36 37 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 43 37 38 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 44 38 39 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 45 39 117 $numintgrPtsBrace $bracesecID $BraceTransfTag
# Central Bay
element nonlinearBeamColumn 50 112 40 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 51 40 41 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 52 41 42 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 53 42 43 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 54 43 44 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 55 44 211 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 60 115 45 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 61 45 46 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 62 46 47 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 63 47 48 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 64 48 49 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 65 49 118 $numintgrPtsBrace $bracesecID $BraceTransfTag
# RHS Bay
element nonlinearBeamColumn 70 113 50 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 71 50 51 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 72 51 52 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 73 52 53 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 74 53 54 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 75 54 210 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 80 114 55 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 81 55 56 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 82 56 57 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 83 57 58 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 84 58 59 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 85 59 119 $numintgrPtsBrace $bracesecID $BraceTransfTag
# Zero length sections for braces
set x1 0;
set x2 1;
set x3 0;
set yp1 0;
set yp2 0;
set yp3 1;
# LHS Bay
element zeroLength 90 1 111 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 91 12 212 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 92 6 116 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 93 7 117 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
# Central Bay
element zeroLength 94 2 112 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 95 11 211 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 96 5 115 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 97 8 118 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
# RHS Bay
element zeroLength 98 3 113 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 99 10 210 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 100 4 114 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 101 9 119 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
# ------------------------------------
# Recorders
# ------------------------------------
# Record displacements at cantilever tip
recorder Node -file Data/RoofDispSS.out -time -node 7 -dof 3 disp;
recorder Node -file Data/RoofAccelSS.out -time -node 7 -dof 3 accel;
recorder Node -file Data/RoofDispFS.out -time -node 9 -dof 3 disp;
recorder Node -file Data/RoofAccelFS.out -time -node 9 -dof 3 accel;
recorder Node -file Data/RoofDispCentre8.out -time -node 8 -dof 1 2 3 disp;
recorder Node -file Data/RoofAccelCentre8.out -time -node 8 -dof 1 2 3 accel;
recorder Element -time -file Data/col1Sec1Force.out -ele 1 section 1 force;
recorder Node -file Data/DBase.out -time -node 1 2 3 -dof 1 2 3 disp;
recorder Node -file Data/MidBrace1EndForce.out -time -node 115 -dof 1 2 3 reaction;
recorder Node -file Data/MidBrace2EndForce.out -time -node 112 -dof 1 2 3 reaction;
recorder Node -file Data/MidBrace1EndForce1.out -time -node 5 -dof 1 2 3 reaction;
recorder Node -file Data/MidBrace2EndForce1.out -time -node 2 -dof 1 2 3 reaction;
# Column Base Shear
recorder Node -file Data/RBase1.out -time -node 1 -dof 1 2 3 reaction;
recorder Node -file Data/RBase2.out -time -node 2 -dof 1 2 3 reaction;
recorder Node -file Data/RBase3.out -time -node 3 -dof 1 2 3 reaction;
recorder Node -file Data/RBase4.out -time -node 4 -dof 1 2 3 reaction;
recorder Node -file Data/RBase5.out -time -node 5 -dof 1 2 3 reaction;
recorder Node -file Data/RBase6.out -time -node 6 -dof 1 2 3 reaction;
# ------------------------------------
# Stiff Side Brace Data
# ------------------------------------
# Length of braces
recorder Node -file Data/SSBrace2End.out -time -node 111 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/SSBrace2Mid.out -time -node 32 -dof 1 2 3 disp;
recorder Node -file Data/SSBrace2Top.out -time -node 212 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/SSBrace1End.out -time -node 116 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/SSBrace1Mid.out -time -node 37 -dof 1 2 3 disp;
recorder Node -file Data/SSBrace1Top.out -time -node 117 -dof 1 2 3 4 5 6 disp;
# Brace axial load
recorder Element -file Data/SSBrace2Ele1local.out -time -ele 30 localForce
recorder Element -file Data/SSBrace1Ele1local.out -time -ele 40 localForce
recorder Node -file Data/SSBrace1EndForce.out -time -node 116 -dof 1 2 3 reaction;
recorder Node -file Data/SSBrace2EndForce.out -time -node 111 -dof 1 2 3 reaction;
recorder Node -file Data/SSBrace1EndForce1.out -time -node 6 -dof 1 2 3 reaction;
recorder Node -file Data/SSBrace2EndForce1.out -time -node 1 -dof 1 2 3 reaction;
# Brace curvature
recorder Node -file Data/SSBrace1Curv.out -time -node 32 -dof 4 5 6 disp;
recorder Node -file Data/SSBrace2Curv.out -time -node 37 -dof 4 5 6 disp;
# Stress/Strain in braces
recorder Element -file Data/SSBr2sec7Top.out -time -ele 34 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr2sec1Top.out -time -ele 34 section 1 fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr2sec7Side.out -time -ele 34 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain;
recorder Element -file Data/SSBr2sec1Side.out -time -ele 34 section 1 fiber 0 25 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec7Top.out -time -ele 44 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec1Top.out -time -ele 44 section 1 fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec7Side.out -time -ele 44 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec1Side.out -time -ele 44 section 1 fiber 0 25 $steelTag stressStrain;
# ------------------------------------
# Flexible Side Brace Data
# ------------------------------------
# Length of braces
recorder Node -file Data/FSBrace2End.out -time -node 113 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/FSBrace2Mid.out -time -node 52 -dof 1 2 3 disp;
recorder Node -file Data/FSBrace2Top.out -time -node 210 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/FSBrace1End.out -time -node 114 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/FSBrace1Mid.out -time -node 57 -dof 1 2 3 disp;
recorder Node -file Data/FSBrace1Top.out -time -node 119 -dof 1 2 3 4 5 6 disp;
# Brace axial load
recorder Element -file Data/FSBrace2Ele1local.out -time -ele 40 localForce
recorder Element -file Data/FSBrace1Ele1local.out -time -ele 50 localForce
recorder Node -file Data/FSBrace1EndForce.out -time -node 114 -dof 1 2 3 reaction;
recorder Node -file Data/FSBrace2EndForce.out -time -node 113 -dof 1 2 3 reaction;
recorder Node -file Data/FSBrace1EndForce1.out -time -node 4 -dof 1 2 3 reaction;
recorder Node -file Data/FSBrace2EndForce1.out -time -node 3 -dof 1 2 3 reaction;
# Brace curvature
recorder Node -file Data/FSBrace1Curv.out -time -node 36 -dof 4 5 6 disp;
recorder Node -file Data/FSBrace2Curv.out -time -node 35 -dof 4 5 6 disp;
# Stress/Strain in Braces
recorder Element -file Data/FSBr2sec7Top.out -time -ele 74 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr2sec1Top.out -time -ele 74 section 1 fiber 25 0 $steelTag stressStrain; # Brace End Stress
recorder Element -file Data/FSBr2sec7Side.out -time -ele 74 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr2sec1Side.out -time -ele 74 section 1 fiber 0 25 $steelTag stressStrain; # Brace End Stress
recorder Element -file Data/FSBr1sec7Top.out -time -ele 84 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr1sec1Top.out -time -ele 84 section 1 fiber 25 0 $steelTag stressStrain; # Brace End Stress
recorder Element -file Data/FSBr1sec7Side.out -time -ele 84 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr1sec1Side.out -time -ele 84 section 1 fiber 0 25 $steelTag stressStrain; # Brace End Stress
# ------------------------------------
# Define Gravity load case
# ------------------------------------
pattern Plain 101 Linear {
#Tag FX FY FZ MX MY MZ
load 7 $totalLoad7 0. $totalLoad7 0. 0. 0.
load 8 $totalLoad8 0. $totalLoad8 0. 0. 0.
load 9 $totalLoad7 0. $totalLoad7 0. 0. 0.
load 10 $totalLoad7 0. $totalLoad7 0. 0. 0.
load 11 $totalLoad8 0. $totalLoad8 0. 0. 0.
load 12 $totalLoad7 0. $totalLoad7 0. 0. 0.
}
# ------------------------------------
# Start of gravity analysis
# ------------------------------------
constraints Plain ;
set NumIter 10; # Set the number of iterations for convergence
set Tol 1.0e-6;
test NormDispIncr $Tol $NumIter;
numberer RCM ;
system BandGeneral ;
algorithm Newton ;
set LoadSteps 10;
set LoadIncr [expr 1.0/$LoadSteps];
integrator LoadControl $LoadIncr;
analysis Static ;
# ------------------------------------
# Maintain constant gravity loads and reset time to zero
# ------------------------------------
loadConst -time 0.0
set Tol 1.0e-6; # reduce tolerance after gravity loads
puts "Model Built"
# UNITS: N, mm
wipe all;
file mkdir Data; # Create directory for data
model BasicBuilder -ndm 3 -ndf 6
source HEsection.tcl;
source HEsection1.tcl;
source HSsection.tcl;
# ------------------------------------
# Define Geometry
# ------------------------------------
set Lbeam1 4000; # beam 1 length
set Lbeam2 4000; # beam 2 length
set Lcol1 4000; # column length
set HBuilding $Lcol1; # Overall height of the building
# nodal coords.
# X Y Z
node 1 0 0 0
node 2 $Lbeam1 0 0
node 3 [expr $Lbeam1*2] 0 0
node 4 [expr $Lbeam1*2] 0 [expr $Lbeam2]
node 5 $Lbeam1 0 [expr $Lbeam2]
node 6 0 0 [expr $Lbeam2]
node 7 0 $Lcol1 0
node 8 $Lbeam1 $Lcol1 0
node 9 [expr $Lbeam1*2] $Lcol1 0
node 10 [expr $Lbeam1*2] $Lcol1 [expr $Lbeam2]
node 11 $Lbeam1 $Lcol1 [expr $Lbeam2]
node 12 0 $Lcol1 [expr $Lbeam2]
# Duplicate nodes for brace end zerolength sections
node 111 0 0 0
node 112 $Lbeam1 0 0
node 113 [expr $Lbeam1*2] 0 0
node 114 [expr $Lbeam1*2] 0 [expr $Lbeam2]
node 115 $Lbeam1 0 [expr $Lbeam2]
node 116 0 0 [expr $Lbeam2]
node 117 0 $Lcol1 0
node 118 $Lbeam1 $Lcol1 0
node 119 [expr $Lbeam1*2] $Lcol1 0
node 210 [expr $Lbeam1*2] $Lcol1 [expr $Lbeam2]
node 211 $Lbeam1 $Lcol1 [expr $Lbeam2]
node 212 0 $Lcol1 [expr $Lbeam2]
# Brace imperfection nodes 0.1% out-of-straight at mid-length
# six elements
# LHS Brace Members
node 30 -2 [expr ($Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
node 31 -4 [expr (2*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 32 -6 [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 33 -4 [expr (4*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 34 -2 [expr (5*$Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 35 2 [expr ($Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 36 4 [expr (2*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 37 6 [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 38 4 [expr (4*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 39 2 [expr (5*$Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
# Central Brace Members
node 40 [expr -2+$Lbeam1] [expr ($Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
node 41 [expr -4+$Lbeam1] [expr (2*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 42 [expr -6+$Lbeam1] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 43 [expr -4+$Lbeam1] [expr (4*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 44 [expr -2+$Lbeam1] [expr (5*$Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 45 [expr 2+$Lbeam1] [expr ($Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 46 [expr 4+$Lbeam1] [expr (2*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 47 [expr 6+$Lbeam1] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 48 [expr 4+$Lbeam1] [expr (4*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 49 [expr 2+$Lbeam1] [expr (5*$Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
# RHS Brace Members
node 50 [expr -2+$Lbeam1*2] [expr ($Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
node 51 [expr -4+$Lbeam1*2] [expr (2*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 52 [expr -6+$Lbeam1*2] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 53 [expr -4+$Lbeam1*2] [expr (4*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 54 [expr -2+$Lbeam1*2] [expr (5*$Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 55 [expr 2+$Lbeam1*2] [expr ($Lbeam2/6)+2] [expr (5*$Lbeam2/6)-2]
node 56 [expr 4+$Lbeam1*2] [expr (2*$Lbeam2/6)+4] [expr (4*$Lbeam2/6)-4]
node 57 [expr 6+$Lbeam1*2] [expr (3*$Lbeam2/6)+6] [expr (3*$Lbeam2/6)-6]
node 58 [expr 4+$Lbeam1*2] [expr (4*$Lbeam2/6)+4] [expr (2*$Lbeam2/6)-4]
node 59 [expr 2+$Lbeam1*2] [expr (5*$Lbeam2/6)+2] [expr ($Lbeam2/6)-2]
# Pinned or Fixed connection
# Fixed
#fixY 0.0 1 1 1 1 1 1;
#fix 7 0 0 0 1 1 1
#fix 8 0 0 0 1 1 1
#fix 9 0 0 0 1 1 1
#fix 10 0 0 0 1 1 1
#fix 11 0 0 0 1 1 1
#fix 12 0 0 0 1 1 1
# Pinned
fixY 0.0 1 1 1 0 0 0;
# Rigid diaphragm
set perpDirn 2;
node 500 [expr $Lbeam1/2] $Lcol1 [expr $Lbeam2/2]
node 501 [expr $Lbeam1+$Lbeam1/2] $Lcol1 [expr $Lbeam2/2]
set masterNode 500;
set masterNode1 501;
# Constraints for rigid diaphragm master nodes
fix $masterNode 0 1 0 1 0 1
fix $masterNode1 0 1 0 1 0 1
rigidDiaphragm $perpDirn $masterNode 7 8 11 12 ;
rigidDiaphragm $perpDirn $masterNode1 8 9 10 11 ;
# Equal d.o.f. for disp in dx,dy,dz,rx,ry,rz.
equalDOF 1 111 1 2 3 4 5 6
equalDOF 2 112 1 2 3 4 5 6
equalDOF 3 113 1 2 3 4 5 6
equalDOF 4 114 1 2 3 4 5 6
equalDOF 5 115 1 2 3 4 5 6
equalDOF 6 116 1 2 3 4 5 6
equalDOF 7 117 4 5 6
equalDOF 8 118 4 5 6
equalDOF 9 119 4 5 6
equalDOF 10 210 4 5 6
equalDOF 11 211 4 5 6
equalDOF 12 212 4 5 6
# The bay is 2.70m wide and 2.47m long and the loading is as stated above
set g 9.81; # Acceleration due to gravity
set WeightBeam1 [expr 71.5*$Lbeam1*0.001*$g]; # Weight of beams 1 in Newtons
set WeightBeam2 [expr 71.5*$Lbeam2*0.001*$g]; # Weight of beams 2 in Newtons
set WeightCol1 [expr 26.7*$Lcol1*0.001*$g]; # Weight of columns in Newtons
set Weightnode7 [expr [expr $WeightBeam1*0.5] + [expr $WeightBeam2*0.5]]; # Dead load at nodes 7
set Weightnode8 [expr [expr $WeightBeam1*0.5] + [expr $WeightBeam2*0.5]]; # Dead load at nodes 9
set slabdp 250; # Slab depth of 250mm
set concweight 2.4465e-6; # Density of Concrete Slab in kg/mm3
set totalArea [expr ($Lbeam1+$Lbeam1)*$Lbeam2];
set TotalMass [expr ($concweight*$slabdp*$totalArea)]; # Total mass in kg
set TotalWeight [expr $TotalMass*$g]; # Total mass in Newtons
puts "Total Mass equals: $TotalMass";
puts "Total Weight equals: $TotalWeight";
set massNode7 [expr ($TotalMass/8)];
set massNode8 [expr ($TotalMass/4)];
puts "MassNode7 equals: $massNode7";
puts "MassNode8 equals: $massNode8";
set totalLoad7 [expr ($massNode7*$g)];
set totalLoad8 [expr ($massNode8*$g)];
puts "totalLoad7 equals: $totalLoad7";
puts "totalLoad8 equals: $totalLoad8";
# Nodal masses
mass 7 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
mass 8 $massNode8 0. $massNode8 1.0e-9 1.0e-9 1.0e-9;
mass 9 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
mass 10 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
mass 11 $massNode8 0. $massNode8 1.0e-9 1.0e-9 1.0e-9;
mass 12 $massNode7 0. $massNode7 1.0e-9 1.0e-9 1.0e-9;
# ------------------------------------
# Define material properties
# ------------------------------------
# Steel
set matID 100;
set Fy 235.; # 235N/mm2
set E 210000.; # 210kN/mm2
set b 0.03;
set R0 18.5;
set cR1 0.925;
set cR2 0.15;
uniaxialMaterial Steel02 $matID $Fy $E $b $R0 $cR1 $cR2
set poisson 0.3;
set G [expr $E/([expr 2*(1+$poisson)])]; # Torsional Stiffness
# Steel material in case you want to alter brace steel material properties
set steelTag 102;
set Fy 235.; # 235N/mm2
set E 210000.; # 210kN/mm2
set b 0.03;
set R0 18.5;
set cR1 0.925;
set cR2 0.15;
#set a1 -0.045;
#set a2 1.0;
#set a3 0.045;
#set a4 1.0;
uniaxialMaterial Steel02 $steelTag $Fy $E $b $R0 $cR1 $cR2
# ------------------------------------
# Define section parameters
# ------------------------------------
# Beam 1 Parameters:
# HE 220B x 220
set beam1secID 1;
set beam1FiberSecTag 2;
set d 220; # Overall section depth 220
set b 220; # Overall section width 220
set t 9.5; # Web thickness 9.5
set T 16; # Flange thickness 16
set dw [expr $d - 2*$T]; # Depth of web
set bb 0.01;
set subFLen 10; # sub-division across flange length
set subFThk 5; # sub-division across flange thickness
set subWLen 10; # sub-division across web length
set subWThk 5; # sub-division across web thickness
HEsection $beam1FiberSecTag $matID $d $b $dw $t $subWLen $subWThk $subFLen $subFThk
puts "HESection defined";
# Beam 1 torsional stiffness
set beam1TorsTag 70;
set J1 770000;
set GJ1 [expr $G*$J1];
uniaxialMaterial Elastic $beam1TorsTag $GJ1; # Define column torsional stiffness
section Aggregator $beam1secID $beam1TorsTag T -section $beam1FiberSecTag; # attach torsion and flexure
# Column parameters:
# HE 200B x 200 - Oversized to create stiffer frame
set colsecID 5;
set colFiberSecTag 6;
set d 200; # Overall section depth 200
set b 200; # Overall section width 200
set t 9; # Web thickness 9
set T 15; # Flange thickness 16
set dw [expr $d - 2*$T]; # Depth of web
set subFLen 10; # sub-division across flange length
set subFThk 5; # sub-division across flange thickness
set subWLen 10; # sub-division across web length
set subWThk 5; # sub-division across web thickness
HEsection1 $colFiberSecTag $matID $d $b $dw $t $subWLen $subWThk $subFLen $subFThk
puts "HESection1 defined";
# Column torsional stiffness
set colTorsTag 72;
set J3 139000;
set GJ3 [expr $G*$J3];
uniaxialMaterial Elastic $colTorsTag $GJ3; # Define column torsional stiffness
section Aggregator $colsecID $colTorsTag T -section $colFiberSecTag; # attach torsion and flexure
# Brace Parameters:
# 20 x 20 x 2.5RHS HOLLOW - Undersized
set bracesecID 7;
set braceFiberSecTag 8;
set d 20; # Overall section depth 50
set b 20; # Overall section width 50
set t 2.0; # Thickness 6.0
set subFLen 10; # sub-division across flange length
set subFThk 5; # sub-division across flange thickness
set subWLen 10; # sub-division across web length
set subWThk 5; # sub-division across web thickness
HSsection $braceFiberSecTag $steelTag $d $b $t $subWLen $subWThk $subFLen $subFThk
puts "HSSection defined";
# Brace torsional stiffness
set braceTorsTag 73;
set J4 84300;
set GJ4 [expr $G*$J4];
uniaxialMaterial Elastic $braceTorsTag $GJ4; # Define column torsional stiffness
section Aggregator $bracesecID $braceTorsTag T -section $braceFiberSecTag; # attach torsion and flexure
# Stiff brace ends
set matIDStiff 13;
set Ubig 1.0e12;
uniaxialMaterial Elastic $matIDStiff $Ubig;
# ------------------------------------
# Analysis Parameters
# ------------------------------------
# Coordinate transformation
set Beam1TransfTag 51;
set ColTransfTag 52;
set BraceTransfTag 53;
set BeamTransfType Linear;
set ColTransfType PDelta;
set BraceTransfType Corotational;
geomTransf $BeamTransfType $Beam1TransfTag 0 -1 0;
geomTransf $ColTransfType $ColTransfTag 0 0 1; # columns have PDelta effects
geomTransf $BraceTransfType $BraceTransfTag 0 -1 0;
# $eleTag NdI NdJ $numintgrPts $SectTag $transfTag
set numintgrPtsCol 7;
set numintgrPtsBeam 7;
set numintgrPtsBrace 7;
# Columns
element nonlinearBeamColumn 1 1 7 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 2 2 8 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 3 3 9 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 4 4 10 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 5 5 11 $numintgrPtsCol $colsecID $ColTransfTag
element nonlinearBeamColumn 6 6 12 $numintgrPtsCol $colsecID $ColTransfTag
# Beams in each orthogonal direction
element nonlinearBeamColumn 20 7 12 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 21 8 11 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 22 9 10 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 23 7 8 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 24 8 9 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 25 10 11 $numintgrPtsBeam $beam1secID $Beam1TransfTag
element nonlinearBeamColumn 26 11 12 $numintgrPtsBeam $beam1secID $Beam1TransfTag
# Brace members
# Two element braces
# LHS Bay
element nonlinearBeamColumn 30 111 30 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 31 30 31 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 32 31 32 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 33 32 33 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 34 33 34 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 35 34 212 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 40 116 35 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 41 35 36 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 42 36 37 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 43 37 38 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 44 38 39 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 45 39 117 $numintgrPtsBrace $bracesecID $BraceTransfTag
# Central Bay
element nonlinearBeamColumn 50 112 40 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 51 40 41 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 52 41 42 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 53 42 43 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 54 43 44 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 55 44 211 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 60 115 45 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 61 45 46 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 62 46 47 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 63 47 48 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 64 48 49 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 65 49 118 $numintgrPtsBrace $bracesecID $BraceTransfTag
# RHS Bay
element nonlinearBeamColumn 70 113 50 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 71 50 51 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 72 51 52 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 73 52 53 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 74 53 54 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 75 54 210 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 80 114 55 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 81 55 56 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 82 56 57 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 83 57 58 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 84 58 59 $numintgrPtsBrace $bracesecID $BraceTransfTag
element nonlinearBeamColumn 85 59 119 $numintgrPtsBrace $bracesecID $BraceTransfTag
# Zero length sections for braces
set x1 0;
set x2 1;
set x3 0;
set yp1 0;
set yp2 0;
set yp3 1;
# LHS Bay
element zeroLength 90 1 111 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 91 12 212 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 92 6 116 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 93 7 117 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
# Central Bay
element zeroLength 94 2 112 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 95 11 211 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 96 5 115 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 97 8 118 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
# RHS Bay
element zeroLength 98 3 113 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 99 10 210 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 100 4 114 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 101 9 119 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
# ------------------------------------
# Recorders
# ------------------------------------
# Record displacements at cantilever tip
recorder Node -file Data/RoofDispSS.out -time -node 7 -dof 3 disp;
recorder Node -file Data/RoofAccelSS.out -time -node 7 -dof 3 accel;
recorder Node -file Data/RoofDispFS.out -time -node 9 -dof 3 disp;
recorder Node -file Data/RoofAccelFS.out -time -node 9 -dof 3 accel;
recorder Node -file Data/RoofDispCentre8.out -time -node 8 -dof 1 2 3 disp;
recorder Node -file Data/RoofAccelCentre8.out -time -node 8 -dof 1 2 3 accel;
recorder Element -time -file Data/col1Sec1Force.out -ele 1 section 1 force;
recorder Node -file Data/DBase.out -time -node 1 2 3 -dof 1 2 3 disp;
recorder Node -file Data/MidBrace1EndForce.out -time -node 115 -dof 1 2 3 reaction;
recorder Node -file Data/MidBrace2EndForce.out -time -node 112 -dof 1 2 3 reaction;
recorder Node -file Data/MidBrace1EndForce1.out -time -node 5 -dof 1 2 3 reaction;
recorder Node -file Data/MidBrace2EndForce1.out -time -node 2 -dof 1 2 3 reaction;
# Column Base Shear
recorder Node -file Data/RBase1.out -time -node 1 -dof 1 2 3 reaction;
recorder Node -file Data/RBase2.out -time -node 2 -dof 1 2 3 reaction;
recorder Node -file Data/RBase3.out -time -node 3 -dof 1 2 3 reaction;
recorder Node -file Data/RBase4.out -time -node 4 -dof 1 2 3 reaction;
recorder Node -file Data/RBase5.out -time -node 5 -dof 1 2 3 reaction;
recorder Node -file Data/RBase6.out -time -node 6 -dof 1 2 3 reaction;
# ------------------------------------
# Stiff Side Brace Data
# ------------------------------------
# Length of braces
recorder Node -file Data/SSBrace2End.out -time -node 111 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/SSBrace2Mid.out -time -node 32 -dof 1 2 3 disp;
recorder Node -file Data/SSBrace2Top.out -time -node 212 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/SSBrace1End.out -time -node 116 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/SSBrace1Mid.out -time -node 37 -dof 1 2 3 disp;
recorder Node -file Data/SSBrace1Top.out -time -node 117 -dof 1 2 3 4 5 6 disp;
# Brace axial load
recorder Element -file Data/SSBrace2Ele1local.out -time -ele 30 localForce
recorder Element -file Data/SSBrace1Ele1local.out -time -ele 40 localForce
recorder Node -file Data/SSBrace1EndForce.out -time -node 116 -dof 1 2 3 reaction;
recorder Node -file Data/SSBrace2EndForce.out -time -node 111 -dof 1 2 3 reaction;
recorder Node -file Data/SSBrace1EndForce1.out -time -node 6 -dof 1 2 3 reaction;
recorder Node -file Data/SSBrace2EndForce1.out -time -node 1 -dof 1 2 3 reaction;
# Brace curvature
recorder Node -file Data/SSBrace1Curv.out -time -node 32 -dof 4 5 6 disp;
recorder Node -file Data/SSBrace2Curv.out -time -node 37 -dof 4 5 6 disp;
# Stress/Strain in braces
recorder Element -file Data/SSBr2sec7Top.out -time -ele 34 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr2sec1Top.out -time -ele 34 section 1 fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr2sec7Side.out -time -ele 34 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain;
recorder Element -file Data/SSBr2sec1Side.out -time -ele 34 section 1 fiber 0 25 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec7Top.out -time -ele 44 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec1Top.out -time -ele 44 section 1 fiber 25 0 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec7Side.out -time -ele 44 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain;
recorder Element -file Data/SSBr1sec1Side.out -time -ele 44 section 1 fiber 0 25 $steelTag stressStrain;
# ------------------------------------
# Flexible Side Brace Data
# ------------------------------------
# Length of braces
recorder Node -file Data/FSBrace2End.out -time -node 113 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/FSBrace2Mid.out -time -node 52 -dof 1 2 3 disp;
recorder Node -file Data/FSBrace2Top.out -time -node 210 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/FSBrace1End.out -time -node 114 -dof 1 2 3 4 5 6 disp;
recorder Node -file Data/FSBrace1Mid.out -time -node 57 -dof 1 2 3 disp;
recorder Node -file Data/FSBrace1Top.out -time -node 119 -dof 1 2 3 4 5 6 disp;
# Brace axial load
recorder Element -file Data/FSBrace2Ele1local.out -time -ele 40 localForce
recorder Element -file Data/FSBrace1Ele1local.out -time -ele 50 localForce
recorder Node -file Data/FSBrace1EndForce.out -time -node 114 -dof 1 2 3 reaction;
recorder Node -file Data/FSBrace2EndForce.out -time -node 113 -dof 1 2 3 reaction;
recorder Node -file Data/FSBrace1EndForce1.out -time -node 4 -dof 1 2 3 reaction;
recorder Node -file Data/FSBrace2EndForce1.out -time -node 3 -dof 1 2 3 reaction;
# Brace curvature
recorder Node -file Data/FSBrace1Curv.out -time -node 36 -dof 4 5 6 disp;
recorder Node -file Data/FSBrace2Curv.out -time -node 35 -dof 4 5 6 disp;
# Stress/Strain in Braces
recorder Element -file Data/FSBr2sec7Top.out -time -ele 74 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr2sec1Top.out -time -ele 74 section 1 fiber 25 0 $steelTag stressStrain; # Brace End Stress
recorder Element -file Data/FSBr2sec7Side.out -time -ele 74 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr2sec1Side.out -time -ele 74 section 1 fiber 0 25 $steelTag stressStrain; # Brace End Stress
recorder Element -file Data/FSBr1sec7Top.out -time -ele 84 section $numintgrPtsBrace fiber 25 0 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr1sec1Top.out -time -ele 84 section 1 fiber 25 0 $steelTag stressStrain; # Brace End Stress
recorder Element -file Data/FSBr1sec7Side.out -time -ele 84 section $numintgrPtsBrace fiber 0 25 $steelTag stressStrain; # Mid Brace Stress
recorder Element -file Data/FSBr1sec1Side.out -time -ele 84 section 1 fiber 0 25 $steelTag stressStrain; # Brace End Stress
# ------------------------------------
# Define Gravity load case
# ------------------------------------
pattern Plain 101 Linear {
#Tag FX FY FZ MX MY MZ
load 7 $totalLoad7 0. $totalLoad7 0. 0. 0.
load 8 $totalLoad8 0. $totalLoad8 0. 0. 0.
load 9 $totalLoad7 0. $totalLoad7 0. 0. 0.
load 10 $totalLoad7 0. $totalLoad7 0. 0. 0.
load 11 $totalLoad8 0. $totalLoad8 0. 0. 0.
load 12 $totalLoad7 0. $totalLoad7 0. 0. 0.
}
# ------------------------------------
# Start of gravity analysis
# ------------------------------------
constraints Plain ;
set NumIter 10; # Set the number of iterations for convergence
set Tol 1.0e-6;
test NormDispIncr $Tol $NumIter;
numberer RCM ;
system BandGeneral ;
algorithm Newton ;
set LoadSteps 10;
set LoadIncr [expr 1.0/$LoadSteps];
integrator LoadControl $LoadIncr;
analysis Static ;
# ------------------------------------
# Maintain constant gravity loads and reset time to zero
# ------------------------------------
loadConst -time 0.0
set Tol 1.0e-6; # reduce tolerance after gravity loads
puts "Model Built"
Daniel McCrum
PhD Student
Trinity College Dublin
PhD Student
Trinity College Dublin
Next is the ANALYSIS file:
wipe all;
source 3D.TBFrame.Build.tcl ;
# -----------------------------
# Define Input Load
# -----------------------------
# DYNAMIC LOADS
set iGMfile "ElCentro10.txt ElCentro10.txt" ; # ground-motion filenames
set iGMdirection "3 1"; # ground-motion directions
set iGMfact "1.0 0.0"; # ground-motion scaling factor
# ------------------------------------
# Define Display
# ------------------------------------
source DisplayPlane.tcl;
source DisplayModel3D.tcl;
set xPixels 500; # height of graphical window in pixels
set yPixels 500; # height of graphical window in pixels
set xLoc 5; # horizontal location of graphical window (0=upper left-most corner)
set yLoc 5; # vertical location of graphical window (0=upper left-most corner)
set dAmp 10; # Relative amplification factor for deformations
set ShapeType1 DeformedShape;
set windowTitle "2D Frame Deformed Shape";
set viewPlane ZY;
set nEigen 0;
recorder display $windowTitle $xLoc $yLoc $xPixels $yPixels -wipe ; # display recorder
DisplayPlane $ShapeType1 $dAmp $viewPlane $nEigen 0;
recorder plot Data/RoofAccelSS.out Accel-Z 5 510 500 500 -columns 1 2; # Plot Load vs Disp
recorder plot Data/RoofDispSS.out FloorDrift-Z 515 510 500 500 -columns 1 2; # Plot Load vs Disp
set xLoc1 510;
set yLoc1 5;
set ShapeType DeformedShape;
DisplayModel3D $ShapeType $dAmp $xLoc1 $yLoc1 $xPixels $yPixels $nEigen
# -----------------------------
# Dynamic Analysis
# -----------------------------
# set up ground-motion-analysis parameters
set DtAnalysis 0.01; # select suitable time-step Dt for analysis
set TmaxAnalysis 15; # maximum duration of ground-motion analysis
constraints Transformation ;
numberer RCM ;
system UmfPack ;
set Tol 1.e-6;
set maxNumIter 10;
test NormDispIncr $Tol $maxNumIter ;
algorithm ModifiedNewton ;
set gamma 0.5;
integrator HHT $gamma ;
analysis Transient
# ------------------------------------
# Define Dampnig
# ------------------------------------
set xDamp 0.05; # 5.0% damping ratio assumed
set MpropSwitch 1.0;
set KcurrSwitch 0.0;
set KcommSwitch 1.0;
set KinitSwitch 0.0;
set nEigenI 1; # mode 1
set nEigenJ 3; # mode 3
set type frequency;
set lambdaN [eigen $type [expr $nEigenJ]]; # eigenvalue analysis for nEigenJ modes
set lambdaI [lindex $lambdaN [expr $nEigenI-1]]; # eigenvalue mode i
set lambdaJ [lindex $lambdaN [expr $nEigenJ-1]]; # eigenvalue mode j
set omegaI [expr pow($lambdaI,0.5)];
set omegaJ [expr pow($lambdaJ,0.5)];
set alphaM [expr $MpropSwitch*$xDamp*(2*$omegaI*$omegaJ)/($omegaI+$omegaJ)]; # M-prop. damping; D = alphaM*M
set betaKcurr [expr $KcurrSwitch*2.*$xDamp/($omegaI+$omegaJ)]; # current-K; +beatKcurr*KCurrent
set betaKcomm [expr $KcommSwitch*2.*$xDamp/($omegaI+$omegaJ)]; # last-committed K; +betaKcomm*KlastCommitt
set betaKinit [expr $KinitSwitch*2.*$xDamp/($omegaI+$omegaJ)]; # initial-K; +beatKinit*Kini
rayleigh $alphaM $betaKcurr $betaKinit $betaKcomm; # RAYLEIGH damping
set T1 [expr 2*3.141592654/$omegaI];
set Omega1 [expr $omegaI];
puts "The first period is: $T1";
puts "Omega 1 is: $Omega1";
puts "The first frequency is: [expr 1/$T1]";
set T3 [expr 2*3.141592654/$omegaJ];
set Omega3 [expr $omegaJ];
puts "The third period is: $T3";
puts "Omega 3 is: $Omega3";
puts "The third frequency is: [expr 1/$T3]";
# ------------------------------------
# Perform Dynamic Cyclic Analysis
# ------------------------------------
# The following commands are unique to the Uniform Earthquake excitation
set IDloadTag 400; # for uniformSupport excitation
# Uniform EXCITATION: acceleration input
foreach GMdirection $iGMdirection GMfile $iGMfile GMfact $iGMfact {
incr IDloadTag;
# set inFile $iGMfile;
# set outFile $GMfile.g3; # set variable holding new filename (PEER files have .at2/dt2 extension)
# ReadSMDFile $inFile $outFile dt; # call procedure to convert the ground-motion file
# set GMfatt [expr $g*$GMfact]; # data in input file is in g Unifts -- ACCELERATION TH
set AccelSeries "Series -dt $DtAnalysis -filePath $iGMfile -factor $iGMfact"; # time series information
pattern UniformExcitation $IDloadTag $GMdirection -accel $AccelSeries ; # create Unifform excitation
}
set Nsteps [expr int($TmaxAnalysis/$DtAnalysis)];
set ok [analyze $Nsteps $DtAnalysis]; # actually perform analysis; returns ok=0 if analysis was successful
if {$ok != 0} { ; # if analysis was not successful.
# change some analysis parameters to achieve convergence
# performance is slower inside this loop
# Time-controlled analysis
set ok 0;
set controlTime [getTime];
while {$controlTime < $TmaxAnalysis && $ok == 0} {
set ok [analyze 1 $DtAnalysis]
set controlTime [getTime]
set ok [analyze 1 $DtAnalysis]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 1000 0
algorithm Newton -initial
set ok [analyze 1 $DtAnalysis]
test $TestType $Tol $maxNumIter 0
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmType
}
}
}; # end if ok !0
puts "Ground Motion Done. End Time: [getTime]"
set fmt1 "%s Analysis Result: CtrlNode %.2i, dof %.1i, Disp=%.4f %s";
# -----------------------------
# If Convergence Fails
# -----------------------------
set LunitTXT "m";
set IDctrlNode 7;
set IDctrlDOF 3;
if {$ok != 0 } {
puts [format $fmt1 "PROBLEM WITH DYNAMIC ANALYSIS" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
} else {
puts [format $fmt1 "DYNAMIC ANALYSIS COMPLETE:" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
}
wipe all;
source 3D.TBFrame.Build.tcl ;
# -----------------------------
# Define Input Load
# -----------------------------
# DYNAMIC LOADS
set iGMfile "ElCentro10.txt ElCentro10.txt" ; # ground-motion filenames
set iGMdirection "3 1"; # ground-motion directions
set iGMfact "1.0 0.0"; # ground-motion scaling factor
# ------------------------------------
# Define Display
# ------------------------------------
source DisplayPlane.tcl;
source DisplayModel3D.tcl;
set xPixels 500; # height of graphical window in pixels
set yPixels 500; # height of graphical window in pixels
set xLoc 5; # horizontal location of graphical window (0=upper left-most corner)
set yLoc 5; # vertical location of graphical window (0=upper left-most corner)
set dAmp 10; # Relative amplification factor for deformations
set ShapeType1 DeformedShape;
set windowTitle "2D Frame Deformed Shape";
set viewPlane ZY;
set nEigen 0;
recorder display $windowTitle $xLoc $yLoc $xPixels $yPixels -wipe ; # display recorder
DisplayPlane $ShapeType1 $dAmp $viewPlane $nEigen 0;
recorder plot Data/RoofAccelSS.out Accel-Z 5 510 500 500 -columns 1 2; # Plot Load vs Disp
recorder plot Data/RoofDispSS.out FloorDrift-Z 515 510 500 500 -columns 1 2; # Plot Load vs Disp
set xLoc1 510;
set yLoc1 5;
set ShapeType DeformedShape;
DisplayModel3D $ShapeType $dAmp $xLoc1 $yLoc1 $xPixels $yPixels $nEigen
# -----------------------------
# Dynamic Analysis
# -----------------------------
# set up ground-motion-analysis parameters
set DtAnalysis 0.01; # select suitable time-step Dt for analysis
set TmaxAnalysis 15; # maximum duration of ground-motion analysis
constraints Transformation ;
numberer RCM ;
system UmfPack ;
set Tol 1.e-6;
set maxNumIter 10;
test NormDispIncr $Tol $maxNumIter ;
algorithm ModifiedNewton ;
set gamma 0.5;
integrator HHT $gamma ;
analysis Transient
# ------------------------------------
# Define Dampnig
# ------------------------------------
set xDamp 0.05; # 5.0% damping ratio assumed
set MpropSwitch 1.0;
set KcurrSwitch 0.0;
set KcommSwitch 1.0;
set KinitSwitch 0.0;
set nEigenI 1; # mode 1
set nEigenJ 3; # mode 3
set type frequency;
set lambdaN [eigen $type [expr $nEigenJ]]; # eigenvalue analysis for nEigenJ modes
set lambdaI [lindex $lambdaN [expr $nEigenI-1]]; # eigenvalue mode i
set lambdaJ [lindex $lambdaN [expr $nEigenJ-1]]; # eigenvalue mode j
set omegaI [expr pow($lambdaI,0.5)];
set omegaJ [expr pow($lambdaJ,0.5)];
set alphaM [expr $MpropSwitch*$xDamp*(2*$omegaI*$omegaJ)/($omegaI+$omegaJ)]; # M-prop. damping; D = alphaM*M
set betaKcurr [expr $KcurrSwitch*2.*$xDamp/($omegaI+$omegaJ)]; # current-K; +beatKcurr*KCurrent
set betaKcomm [expr $KcommSwitch*2.*$xDamp/($omegaI+$omegaJ)]; # last-committed K; +betaKcomm*KlastCommitt
set betaKinit [expr $KinitSwitch*2.*$xDamp/($omegaI+$omegaJ)]; # initial-K; +beatKinit*Kini
rayleigh $alphaM $betaKcurr $betaKinit $betaKcomm; # RAYLEIGH damping
set T1 [expr 2*3.141592654/$omegaI];
set Omega1 [expr $omegaI];
puts "The first period is: $T1";
puts "Omega 1 is: $Omega1";
puts "The first frequency is: [expr 1/$T1]";
set T3 [expr 2*3.141592654/$omegaJ];
set Omega3 [expr $omegaJ];
puts "The third period is: $T3";
puts "Omega 3 is: $Omega3";
puts "The third frequency is: [expr 1/$T3]";
# ------------------------------------
# Perform Dynamic Cyclic Analysis
# ------------------------------------
# The following commands are unique to the Uniform Earthquake excitation
set IDloadTag 400; # for uniformSupport excitation
# Uniform EXCITATION: acceleration input
foreach GMdirection $iGMdirection GMfile $iGMfile GMfact $iGMfact {
incr IDloadTag;
# set inFile $iGMfile;
# set outFile $GMfile.g3; # set variable holding new filename (PEER files have .at2/dt2 extension)
# ReadSMDFile $inFile $outFile dt; # call procedure to convert the ground-motion file
# set GMfatt [expr $g*$GMfact]; # data in input file is in g Unifts -- ACCELERATION TH
set AccelSeries "Series -dt $DtAnalysis -filePath $iGMfile -factor $iGMfact"; # time series information
pattern UniformExcitation $IDloadTag $GMdirection -accel $AccelSeries ; # create Unifform excitation
}
set Nsteps [expr int($TmaxAnalysis/$DtAnalysis)];
set ok [analyze $Nsteps $DtAnalysis]; # actually perform analysis; returns ok=0 if analysis was successful
if {$ok != 0} { ; # if analysis was not successful.
# change some analysis parameters to achieve convergence
# performance is slower inside this loop
# Time-controlled analysis
set ok 0;
set controlTime [getTime];
while {$controlTime < $TmaxAnalysis && $ok == 0} {
set ok [analyze 1 $DtAnalysis]
set controlTime [getTime]
set ok [analyze 1 $DtAnalysis]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 1000 0
algorithm Newton -initial
set ok [analyze 1 $DtAnalysis]
test $TestType $Tol $maxNumIter 0
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmType
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmType
}
}
}; # end if ok !0
puts "Ground Motion Done. End Time: [getTime]"
set fmt1 "%s Analysis Result: CtrlNode %.2i, dof %.1i, Disp=%.4f %s";
# -----------------------------
# If Convergence Fails
# -----------------------------
set LunitTXT "m";
set IDctrlNode 7;
set IDctrlDOF 3;
if {$ok != 0 } {
puts [format $fmt1 "PROBLEM WITH DYNAMIC ANALYSIS" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
} else {
puts [format $fmt1 "DYNAMIC ANALYSIS COMPLETE:" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] $LunitTXT]
}
Daniel McCrum
PhD Student
Trinity College Dublin
PhD Student
Trinity College Dublin
These three files are the section procedures:
1) HESection
# File Name: HEsection.tcl
# Author: Daniel McCrum
# Email: mccrumdp@tcd.ie
# Last Altered: May, 2009.
proc HEsection { beam1FiberSecTag matID d b dw t subWLen subWThk subFLen subFThk} {
# create a standard I section given the nominal section properties
# secID - section ID number
# matID - material ID number
# d = nominal depth
# tw = web thickness
# bf = flange width
# T = flange thickness
# ------------
# | ^ Y
# | |
# | |
# | -----> Z
# ------------
# Set fiber coordinates
set z1 [expr -$b/2];
set z2 [expr -$t/2];
set z3 [expr $t/2];
set z4 [expr $b/2];
set y1 [expr $d/2];
set y2 [expr $dw/2];
set y3 [expr -$dw/2];
set y4 [expr -$d/2];
section Fiber $beam1FiberSecTag {
patch quad $matID $subFLen $subFThk $z1 $y1 $z1 $y2 $z4 $y2 $z4 $y1
patch quad $matID $subWLen $subWThk $z2 $y2 $z2 $y3 $z3 $y3 $z3 $y2
patch quad $matID $subFLen $subFThk $z1 $y3 $z1 $y4 $z4 $y4 $z4 $y3
}
}
2) HESection1
# File Name: HEsection.tcl
# Author: Daniel McCrum
# Email: mccrumdp@tcd.ie
# Last Altered: May, 2009.
proc HEsection1 { beam2FiberSecTag matID d b dw t subWLen subWThk subFLen subFThk} {
# create a standard I section given the nominal section properties
# secID - section ID number
# matID - material ID number
# d = nominal depth
# tw = web thickness
# bf = flange width
# T = flange thickness
# ------------
# | ^ Y
# | |
# | |
# | -----> Z
# ------------
# Set fiber coordinates
set z1 [expr -$b/2];
set z2 [expr -$t/2];
set z3 [expr $t/2];
set z4 [expr $b/2];
set y1 [expr $d/2];
set y2 [expr $dw/2];
set y3 [expr -$dw/2];
set y4 [expr -$d/2];
section Fiber $beam2FiberSecTag {
patch quad $matID $subFLen $subFThk $z1 $y1 $z1 $y2 $z4 $y2 $z4 $y1
patch quad $matID $subWLen $subWThk $z2 $y2 $z2 $y3 $z3 $y3 $z3 $y2
patch quad $matID $subFLen $subFThk $z1 $y3 $z1 $y4 $z4 $y4 $z4 $y3
}
}
3) HSsection
# File Name: HSsection.tcl
# Author: Daniel McCrum
# Email: mccrumdp@tcd.ie
# Last Altered: May, 2009.
proc HSsection { braceFiberSecTag steelTag d b t subWLen subWThk subFLen subFThk} {
# create a standard box section given the nominal section properties
# braceFiberSecTag - section ID number
# matID - material ID number
# d = nominal depth
# t = thickness
# b = width
# ------------
# | | ^ Y
# | | |
# | | |
# | | -----> Z
# ------------
# Set fiber coordinates
set z1 [expr -$b/2];
set z2 [expr -(($b/2)-$t)];
set z3 [expr (($b/2)-$t)];
set z4 [expr $b/2];
set y1 [expr $d/2];
set y2 [expr (($d/2)-$t)];
set y3 [expr -(($d/2)-$t)];
set y4 [expr -$d/2];
section Fiber $braceFiberSecTag {
patch quad $steelTag $subFLen $subFThk $z1 $y1 $z1 $y2 $z4 $y2 $z4 $y1
patch quad $steelTag $subWLen $subWThk $z3 $y2 $z3 $y3 $z4 $y3 $z4 $y2
patch quad $steelTag $subFLen $subFThk $z1 $y2 $z1 $y3 $z2 $y3 $z2 $y2
patch quad $steelTag $subFLen $subFThk $z1 $y3 $z1 $y4 $z4 $y4 $z4 $y3
}
}
As far as I am aware, the DisplayPlane.tcl file and the DisplayModel3D.tcl file that I have used are the same as from your worked examples.
Let me know if you need the acceleration time history. The units are m/s^2. Any acceleration response history you have should work with time step of 0.01 seconds. I have scaled mine to 1.0g but in m/s^2.
1) HESection
# File Name: HEsection.tcl
# Author: Daniel McCrum
# Email: mccrumdp@tcd.ie
# Last Altered: May, 2009.
proc HEsection { beam1FiberSecTag matID d b dw t subWLen subWThk subFLen subFThk} {
# create a standard I section given the nominal section properties
# secID - section ID number
# matID - material ID number
# d = nominal depth
# tw = web thickness
# bf = flange width
# T = flange thickness
# ------------
# | ^ Y
# | |
# | |
# | -----> Z
# ------------
# Set fiber coordinates
set z1 [expr -$b/2];
set z2 [expr -$t/2];
set z3 [expr $t/2];
set z4 [expr $b/2];
set y1 [expr $d/2];
set y2 [expr $dw/2];
set y3 [expr -$dw/2];
set y4 [expr -$d/2];
section Fiber $beam1FiberSecTag {
patch quad $matID $subFLen $subFThk $z1 $y1 $z1 $y2 $z4 $y2 $z4 $y1
patch quad $matID $subWLen $subWThk $z2 $y2 $z2 $y3 $z3 $y3 $z3 $y2
patch quad $matID $subFLen $subFThk $z1 $y3 $z1 $y4 $z4 $y4 $z4 $y3
}
}
2) HESection1
# File Name: HEsection.tcl
# Author: Daniel McCrum
# Email: mccrumdp@tcd.ie
# Last Altered: May, 2009.
proc HEsection1 { beam2FiberSecTag matID d b dw t subWLen subWThk subFLen subFThk} {
# create a standard I section given the nominal section properties
# secID - section ID number
# matID - material ID number
# d = nominal depth
# tw = web thickness
# bf = flange width
# T = flange thickness
# ------------
# | ^ Y
# | |
# | |
# | -----> Z
# ------------
# Set fiber coordinates
set z1 [expr -$b/2];
set z2 [expr -$t/2];
set z3 [expr $t/2];
set z4 [expr $b/2];
set y1 [expr $d/2];
set y2 [expr $dw/2];
set y3 [expr -$dw/2];
set y4 [expr -$d/2];
section Fiber $beam2FiberSecTag {
patch quad $matID $subFLen $subFThk $z1 $y1 $z1 $y2 $z4 $y2 $z4 $y1
patch quad $matID $subWLen $subWThk $z2 $y2 $z2 $y3 $z3 $y3 $z3 $y2
patch quad $matID $subFLen $subFThk $z1 $y3 $z1 $y4 $z4 $y4 $z4 $y3
}
}
3) HSsection
# File Name: HSsection.tcl
# Author: Daniel McCrum
# Email: mccrumdp@tcd.ie
# Last Altered: May, 2009.
proc HSsection { braceFiberSecTag steelTag d b t subWLen subWThk subFLen subFThk} {
# create a standard box section given the nominal section properties
# braceFiberSecTag - section ID number
# matID - material ID number
# d = nominal depth
# t = thickness
# b = width
# ------------
# | | ^ Y
# | | |
# | | |
# | | -----> Z
# ------------
# Set fiber coordinates
set z1 [expr -$b/2];
set z2 [expr -(($b/2)-$t)];
set z3 [expr (($b/2)-$t)];
set z4 [expr $b/2];
set y1 [expr $d/2];
set y2 [expr (($d/2)-$t)];
set y3 [expr -(($d/2)-$t)];
set y4 [expr -$d/2];
section Fiber $braceFiberSecTag {
patch quad $steelTag $subFLen $subFThk $z1 $y1 $z1 $y2 $z4 $y2 $z4 $y1
patch quad $steelTag $subWLen $subWThk $z3 $y2 $z3 $y3 $z4 $y3 $z4 $y2
patch quad $steelTag $subFLen $subFThk $z1 $y2 $z1 $y3 $z2 $y3 $z2 $y2
patch quad $steelTag $subFLen $subFThk $z1 $y3 $z1 $y4 $z4 $y4 $z4 $y3
}
}
As far as I am aware, the DisplayPlane.tcl file and the DisplayModel3D.tcl file that I have used are the same as from your worked examples.
Let me know if you need the acceleration time history. The units are m/s^2. Any acceleration response history you have should work with time step of 0.01 seconds. I have scaled mine to 1.0g but in m/s^2.
Daniel McCrum
PhD Student
Trinity College Dublin
PhD Student
Trinity College Dublin
your input model is not as described and there are some other problems!
1. your brace connections are not pinned.
you don't want the 4,5 & 6 to be part of an equalDOF if they are to be pinned .. you only want the 1,2 and 3:
equalDOF 1 111 1 2 3 4 5 6
equalDOF 2 112 1 2 3 4 5 6
equalDOF 3 113 1 2 3 4 5 6
equalDOF 4 114 1 2 3 4 5 6
equalDOF 5 115 1 2 3 4 5 6
equalDOF 6 116 1 2 3 4 5 6
equalDOF 7 117 4 5 6
equalDOF 8 118 4 5 6
equalDOF 9 119 4 5 6
equalDOF 10 210 4 5 6
equalDOF 11 211 4 5 6
equalDOF 12 212 4 5 6
2. as the ground floor nodes are already pinned and seeing as how you don't want the overlapping nodes to have the same rotations you dont want the first 6 equalDOF commands.
3. as you have equalDOF for all bottom node in 1,2 and 3 directions what is the purpose of these elements?
element zeroLength 90 1 111 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 92 6 116 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
and elements 94, 96, 98, 100
4. the rigidDiahpragm command will impose large axial forces in the first floor beams as it constrains them from axial deformation, this may not be what you want.
5. nodes 7 and 8 are in 2 different rigidDiaphagm constraints to 2 different master nodes!
1. your brace connections are not pinned.
you don't want the 4,5 & 6 to be part of an equalDOF if they are to be pinned .. you only want the 1,2 and 3:
equalDOF 1 111 1 2 3 4 5 6
equalDOF 2 112 1 2 3 4 5 6
equalDOF 3 113 1 2 3 4 5 6
equalDOF 4 114 1 2 3 4 5 6
equalDOF 5 115 1 2 3 4 5 6
equalDOF 6 116 1 2 3 4 5 6
equalDOF 7 117 4 5 6
equalDOF 8 118 4 5 6
equalDOF 9 119 4 5 6
equalDOF 10 210 4 5 6
equalDOF 11 211 4 5 6
equalDOF 12 212 4 5 6
2. as the ground floor nodes are already pinned and seeing as how you don't want the overlapping nodes to have the same rotations you dont want the first 6 equalDOF commands.
3. as you have equalDOF for all bottom node in 1,2 and 3 directions what is the purpose of these elements?
element zeroLength 90 1 111 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
element zeroLength 92 6 116 -mat $matIDStiff $matIDStiff $matIDStiff -dir 1 2 3 -orient $x1 $x2 $x3 $yp1 $yp2 $yp3;
and elements 94, 96, 98, 100
4. the rigidDiahpragm command will impose large axial forces in the first floor beams as it constrains them from axial deformation, this may not be what you want.
5. nodes 7 and 8 are in 2 different rigidDiaphagm constraints to 2 different master nodes!
Many thanks for your reply Frank.
I realise that there was duplication in what I was doing in the model, however the reason I did this was that other approaches did not work for me. I should have explained better originaly, my apologies. The different connections I have tried are as follows (all with existing rigid diaphragm command);
1) equalDOF 1-6 & 7-12 restrained in 1, 2 & 3 directions with no zerolength elements. Result: Analysis does not run. Failed to get compatible element forces.
2) Zerolength elements for all brace ends restrained in 1, 2 & 3 directions. Result: Analysis does not run. Failed to get compatible element forces.
3) EqualDOF 7-12 (top nodes) restrained in 1, 2 & 3 directions and zerolength elements at the base nodes restrained in 1, 2 & 3 directions. Result: Analysis does not run. Failed to get compatible element forces.
4) EqualDOF 7-12 restrained in 4, 5 & 6 directions and and zerolength elements at the base nodes restrained in 1, 2 & 3 directions. Result: The analysis runs but the brace members are not restrained in the 1, 2 & 3 directions, so are free to displace.
5) EqualDOF 7-12 restrained in 1, 2, 3, 4, 5 & 6 directions and and zerolength elements at the base nodes restrained in 1, 2 & 3 directions. Result: The analysis runs.
My confusion lay in the fact that the
top of the braces required the 4, 5 & 6 directions to be restrained for my analysis to run. It may be that I have done something wrong, because this does not make sense to me. Do you think I may need bracing in the orthogonal direction to provide lateral stability in that direction? Maybe this is why I need the 4, 5 & 6 directions restrained as all the connections are pinned.
I note that nodes 7 and 8 are constrained to two different master nodes. What is the procedure when you have the geometry that I have? Are nodes 7 and 8 constrained to one master node and their duplicate nodes constrained to the other? Or is it possible to constrain more than four nodes to one master node?
Thanks again for your help.
I realise that there was duplication in what I was doing in the model, however the reason I did this was that other approaches did not work for me. I should have explained better originaly, my apologies. The different connections I have tried are as follows (all with existing rigid diaphragm command);
1) equalDOF 1-6 & 7-12 restrained in 1, 2 & 3 directions with no zerolength elements. Result: Analysis does not run. Failed to get compatible element forces.
2) Zerolength elements for all brace ends restrained in 1, 2 & 3 directions. Result: Analysis does not run. Failed to get compatible element forces.
3) EqualDOF 7-12 (top nodes) restrained in 1, 2 & 3 directions and zerolength elements at the base nodes restrained in 1, 2 & 3 directions. Result: Analysis does not run. Failed to get compatible element forces.
4) EqualDOF 7-12 restrained in 4, 5 & 6 directions and and zerolength elements at the base nodes restrained in 1, 2 & 3 directions. Result: The analysis runs but the brace members are not restrained in the 1, 2 & 3 directions, so are free to displace.
5) EqualDOF 7-12 restrained in 1, 2, 3, 4, 5 & 6 directions and and zerolength elements at the base nodes restrained in 1, 2 & 3 directions. Result: The analysis runs.
My confusion lay in the fact that the
top of the braces required the 4, 5 & 6 directions to be restrained for my analysis to run. It may be that I have done something wrong, because this does not make sense to me. Do you think I may need bracing in the orthogonal direction to provide lateral stability in that direction? Maybe this is why I need the 4, 5 & 6 directions restrained as all the connections are pinned.
I note that nodes 7 and 8 are constrained to two different master nodes. What is the procedure when you have the geometry that I have? Are nodes 7 and 8 constrained to one master node and their duplicate nodes constrained to the other? Or is it possible to constrain more than four nodes to one master node?
Thanks again for your help.
Daniel McCrum
PhD Student
Trinity College Dublin
PhD Student
Trinity College Dublin
the problem with the failed to get compatible element forces is the rigid diaphragm command .. when used with the transformation method, it is restraining the beam elements from having any axial deformation, which is causing huge axial forces in the element .. of course a rigid diahpragm does not really exist .. either use the Penalty method to enforce the constraints or model the floor with plane elements (i.e. enforce the diaphragm using the penalty method and use the transformation method for others)
I have followed your advice and applied the constraints using the Penalty Method for all gravity and transient analysis. The analysis did not run satisfactorily when using the penalty method for all constraints. I then reverted to Penalty Method for gravity analysis and Transformation Method for transient analysis. The rigid diaphragm is now modelled as one diaphragm with the entire top storey nodes restrained according to one master node. However, I am still getting similar results as per my previous post with different combinations of brace end fixity. I only get the analysis to run satisfactorily when the equalDOF 4, 5 & 6 of the top storey nodes are restrained as before. But even then my analysis fails in convergence after 2.828s. To me, the analysis should run when I either have equalDOF or zerolength elements restraining the 1, 2 & 3 directions for the brace end connections. If I have misunderstood your advice in the previous post in what I have done, I would appreciate your guidance. Thanks.
Daniel McCrum
PhD Student
Trinity College Dublin
PhD Student
Trinity College Dublin
as you seem intent on keeping the rigid diaphragm, change the beams to be dispBeamColumn instead of nonlinearBeamColumn(or forceBeamColumn) .. that will get rid of your error message about the element failing .. have a look at your beam forces!
implementinig the constraint using the equalDOF or a zero length element, the results should only be the same if the constrains are enforced via the penalty method and the factor applied is equal to the spring stiffness .. otherwise you have 2 different models.
implementinig the constraint using the equalDOF or a zero length element, the results should only be the same if the constrains are enforced via the penalty method and the factor applied is equal to the spring stiffness .. otherwise you have 2 different models.
Re: 3D Brace Modelling
Have anyone tried to model a brace with SMA wires?