hi sghanea
here is an example for a 30 story shear wall for modal pushover analysis. wall is model by using non-linear beam column elements. you can see that the in pattern Plain 2 Linear lateral force (Sn1=m*phi_1) has been applied and then the wall is pushed upto 1% drift. For 2nd and 3rd mode repeat the same process by just changing the Sn2=m*phi_2 and Sn3=m*phi_3.
Hope so it will help you
# units: KN, m, sec
wipe; # clear memory of all past model definitions
set val1 [clock seconds];
file mkdir Data; # create data directory
model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm=#dimension, ndf=#dofs
node 1 0 0 ;
node 2 0 3500 ;
node 3 0 7000 ;
node 4 0 10500 ;
node 5 0 14000 ;
node 6 0 17500 ;
node 7 0 21000 ;
node 8 0 24500 ;
node 9 0 28000 ;
node 10 0 31500 ;
node 11 0 35000 ;
node 12 0 38500 ;
node 13 0 42000 ;
node 14 0 45500 ;
node 15 0 49000 ;
node 16 0 52500 ;
node 17 0 56000 ;
node 18 0 59500 ;
node 19 0 63000 ;
node 20 0 66500 ;
node 21 0 70000 ;
node 22 0 73500 ;
node 23 0 77000 ;
node 24 0 80500 ;
node 25 0 84000 ;
node 26 0 87500 ;
node 27 0 91000 ;
node 28 0 94500 ;
node 29 0 98000 ;
node 30 0 101500 ;
puts "Generated - NODES"
fix 1 1 1 1
puts "Generated - RESTRAINTS"
# unconfined concrete
set fc1U -24; # UNCONFINED concrete (todeschini parabolic model), maximum stress
set eps1U -0.003; # strain at maximum strength of unconfined concrete
set fc2U [expr 0.2*$fc1U]; # ultimate stress
set eps2U -0.01; # strain at ultimate stress
set lambda 0.1; # ratio between unloading slope at $eps2 and initial slope $Ec
# tensile-strength properties
set ftU [expr -0.1*$fc1U]; # tensile strength +tension
set Ets [expr $ftU/0.002]; # tension softening stiffness
# -----------
uniaxialMaterial Concrete02 1 $fc1U $eps1U $fc2U $eps2U $lambda $ftU $Ets; # build cover concrete (unconfined)
# -----------
set Fy 400; # STEEL yield stress
set Es 200000; # modulus of steel
set Bs 0.01; # strain-hardening ratio
set R0 18; # control the transition from elastic to plastic branches
set cR1 0.925; # control the transition from elastic to plastic branches
set cR2 0.15; # control the transition from elastic to plastic branches
uniaxialMaterial Steel02 2 $Fy $Es $Bs $R0 $cR1 $cR2; # build reinforcement material
# FIBER SECTION properties -------------------------------------------------------------
## set some paramaters
section fiberSec 1 {
#patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL
patch quad 1 4 50 0 0 4500 0 4500 310 0 310
# Create the reinforcing fibers
layer straight 2 2 314 80 80 80 230
layer straight 2 2 314 220 80 220 230
layer straight 2 2 314 345 80 345 230
layer straight 2 2 314 470 80 470 230
layer straight 2 2 314 595 80 595 230
layer straight 2 2 314 720 80 720 230
layer straight 2 2 113 845 80 845 230
layer straight 2 2 113 1045 80 1045 230
layer straight 2 2 113 1245 80 1245 230
layer straight 2 2 113 1445 80 1445 230
layer straight 2 2 113 1645 80 1645 230
layer straight 2 2 113 1845 80 1845 230
layer straight 2 2 113 2045 80 2045 230
layer straight 2 2 113 2245 80 2245 230
layer straight 2 2 113 2445 80 2445 230
layer straight 2 2 113 2645 80 2645 230
layer straight 2 2 113 2845 80 2845 230
layer straight 2 2 113 3045 80 3045 230
layer straight 2 2 113 3245 80 3245 230
layer straight 2 2 113 3445 80 3445 230
layer straight 2 2 113 3645 80 3645 230
layer straight 2 2 490 3770 80 3770 230
layer straight 2 2 490 3895 80 3895 230
layer straight 2 2 490 4020 80 4020 230
layer straight 2 2 490 4145 80 4145 230
layer straight 2 2 490 4270 80 4270 230
layer straight 2 2 490 4395 80 4395 230
layer straight 2 2 490 4475 80 4475 230
}
section fiberSec 2 {
#patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL
patch quad 1 4 50 0 0 4500 0 4500 250 0 250
# Create the reinforcing fibers
layer straight 2 2 314 50 50 50 200
layer straight 2 2 314 190 50 190 200
layer straight 2 2 314 315 50 315 200
layer straight 2 2 314 440 50 440 200
layer straight 2 2 200 565 50 565 200
layer straight 2 2 200 690 50 690 200
layer straight 2 2 113 815 50 815 200
layer straight 2 2 113 1035 50 1035 200
layer straight 2 2 113 1255 50 1255 200
layer straight 2 2 113 1475 50 1475 200
layer straight 2 2 113 1695 50 1695 200
layer straight 2 2 113 1915 50 1915 200
layer straight 2 2 113 2135 50 2135 200
layer straight 2 2 113 2355 50 2355 200
layer straight 2 2 113 2575 50 2575 200
layer straight 2 2 113 2795 50 2795 200
layer straight 2 2 113 3015 50 3015 200
layer straight 2 2 113 3235 50 3235 200
layer straight 2 2 113 3455 50 3455 200
layer straight 2 2 113 3675 50 3675 200
layer straight 2 2 314 3800 50 3800 200
layer straight 2 2 314 3925 50 3925 200
layer straight 2 2 314 4050 50 4050 200
layer straight 2 2 314 4175 50 4175 200
layer straight 2 2 490 4300 50 4300 200
layer straight 2 2 490 4445 50 4445 200
}
section fiberSec 3 {
#patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL
patch quad 1 4 50 0 0 4500 0 4500 250 0 250
# Create the reinforcing fibers
layer straight 2 2 314 50 50 50 200
layer straight 2 2 314 190 50 190 200
layer straight 2 2 200 315 50 315 200
layer straight 2 2 200 440 50 440 200
layer straight 2 2 200 565 50 565 200
layer straight 2 2 200 690 50 690 200
layer straight 2 2 113 815 50 815 200
layer straight 2 2 113 1065 50 1065 200
layer straight 2 2 113 1315 50 1315 200
layer straight 2 2 113 1565 50 1565 200
layer straight 2 2 113 1815 50 1815 200
layer straight 2 2 113 2065 50 2065 200
layer straight 2 2 113 2315 50 2315 200
layer straight 2 2 113 2565 50 2565 200
layer straight 2 2 113 2815 50 2815 200
layer straight 2 2 113 3065 50 3065 200
layer straight 2 2 113 3315 50 3315 200
layer straight 2 2 113 3565 50 3565 200
layer straight 2 2 314 3815 50 3815 200
layer straight 2 2 314 3940 50 3940 200
layer straight 2 2 314 4065 50 4065 200
layer straight 2 2 314 4190 50 4190 200
layer straight 2 2 490 4315 50 4315 200
layer straight 2 2 490 4440 50 4440 200
}
section fiberSec 4 {
#patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL
patch quad 1 4 50 0 0 4500 0 4500 250 0 250
# Create the reinforcing fibers
layer straight 2 2 314 50 50 50 200
layer straight 2 2 314 190 50 190 200
layer straight 2 2 200 315 50 315 200
layer straight 2 2 200 440 50 440 200
layer straight 2 2 200 565 50 565 200
layer straight 2 2 200 690 50 690 200
layer straight 2 2 63 815 50 815 200
layer straight 2 2 113 965 50 965 200
layer straight 2 2 113 1115 50 1115 200
layer straight 2 2 113 1265 50 1265 200
layer straight 2 2 113 1415 50 1415 200
layer straight 2 2 113 1565 50 1565 200
layer straight 2 2 113 1715 50 1715 200
layer straight 2 2 113 1865 50 1865 200
layer straight 2 2 113 2015 50 2015 200
layer straight 2 2 113 2165 50 2165 200
layer straight 2 2 113 2315 50 2315 200
layer straight 2 2 113 2465 50 2465 200
layer straight 2 2 113 2615 50 2615 200
layer straight 2 2 113 2765 50 2765 200
layer straight 2 2 113 2915 50 2915 200
layer straight 2 2 113 3065 50 3065 200
layer straight 2 2 113 3215 50 3215 200
layer straight 2 2 113 3365 50 3365 200
layer straight 2 2 113 3515 50 3515 200
layer straight 2 2 113 3665 50 3665 200
layer straight 2 2 314 3815 50 3815 200
layer straight 2 2 314 3940 50 3940 200
layer straight 2 2 314 4065 50 4065 200
layer straight 2 2 314 4190 50 4190 200
layer straight 2 2 490 4315 50 4315 200
layer straight 2 2 490 4440 50 4440 200
}
section fiberSec 5 {
#patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL
patch quad 1 4 50 0 0 4500 0 4500 250 0 250
# Create the reinforcing fibers
layer straight 2 2 200 50 50 50 200
layer straight 2 2 200 190 50 190 200
layer straight 2 2 200 315 50 315 200
layer straight 2 2 200 440 50 440 200
layer straight 2 2 200 565 50 565 200
layer straight 2 2 200 690 50 690 200
layer straight 2 2 63 815 50 815 200
layer straight 2 2 113 990 50 990 200
layer straight 2 2 113 1165 50 1165 200
layer straight 2 2 113 1340 50 1340 200
layer straight 2 2 113 1515 50 1515 200
layer straight 2 2 113 1690 50 1690 200
layer straight 2 2 113 1865 50 1865 200
layer straight 2 2 113 2040 50 2040 200
layer straight 2 2 113 2215 50 2215 200
layer straight 2 2 113 2390 50 2390 200
layer straight 2 2 113 2565 50 2565 200
layer straight 2 2 113 2740 50 2740 200
layer straight 2 2 113 2915 50 2915 200
layer straight 2 2 113 3090 50 3090 200
layer straight 2 2 113 3265 50 3265 200
layer straight 2 2 113 3440 50 3440 200
layer straight 2 2 113 3615 50 3615 200
layer straight 2 2 314 3790 50 3790 200
layer straight 2 2 314 3915 50 3915 200
layer straight 2 2 314 4040 50 4040 200
layer straight 2 2 314 4165 50 4165 200
layer straight 2 2 314 4290 50 4290 200
layer straight 2 2 314 4415 50 4415 200
}
section fiberSec 6 {
#patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL
patch quad 1 4 50 0 0 4500 0 4500 250 0 250
# Create the reinforcing fibers
layer straight 2 2 200 50 50 50 200
layer straight 2 2 200 190 50 190 200
layer straight 2 2 200 315 50 315 200
layer straight 2 2 200 440 50 440 200
layer straight 2 2 200 565 50 565 200
layer straight 2 2 200 690 50 690 200
layer straight 2 2 63 815 50 815 200
layer straight 2 2 113 1015 50 1015 200
layer straight 2 2 113 1215 50 1215 200
layer straight 2 2 113 1415 50 1415 200
layer straight 2 2 113 1615 50 1615 200
layer straight 2 2 113 1815 50 1815 200
layer straight 2 2 113 2015 50 2015 200
layer straight 2 2 113 2215 50 2215 200
layer straight 2 2 113 2415 50 2415 200
layer straight 2 2 113 2615 50 2615 200
layer straight 2 2 113 2815 50 2815 200
layer straight 2 2 113 3015 50 3015 200
layer straight 2 2 113 3215 50 3215 200
layer straight 2 2 113 3415 50 3415 200
layer straight 2 2 113 3615 50 3615 200
layer straight 2 2 314 3815 50 3815 200
layer straight 2 2 314 3940 50 3940 200
layer straight 2 2 314 4065 50 4065 200
layer straight 2 2 314 4190 50 4190 200
layer straight 2 2 314 4315 50 4315 200
layer straight 2 2 314 4440 50 4440 200
}
# define geometric transformation: performs a linear geometric transformation of beam stiffness and resisting force from the basic system to the global-coordinate system
set ColTransfTag 1; # associate a tag to column transformation
geomTransf Linear $ColTransfTag ;
# element connectivity:
set numIntgrPts 5; # number of integration points for force-based element
element dispBeamColumn 1 1 2 $numIntgrPts 1 $ColTransfTag;
element dispBeamColumn 2 2 3 $numIntgrPts 1 $ColTransfTag;
element dispBeamColumn 3 3 4 $numIntgrPts 2 $ColTransfTag;
element dispBeamColumn 4 4 5 $numIntgrPts 2 $ColTransfTag;
element dispBeamColumn 5 5 6 $numIntgrPts 3 $ColTransfTag;
element dispBeamColumn 6 6 7 $numIntgrPts 4 $ColTransfTag;
element dispBeamColumn 7 7 8 $numIntgrPts 4 $ColTransfTag;
element dispBeamColumn 8 8 9 $numIntgrPts 4 $ColTransfTag;
element dispBeamColumn 9 9 10 $numIntgrPts 5 $ColTransfTag;
element dispBeamColumn 10 10 11 $numIntgrPts 5 $ColTransfTag;
element dispBeamColumn 11 11 12 $numIntgrPts 5 $ColTransfTag;
element dispBeamColumn 12 12 13 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 13 13 14 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 14 14 15 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 15 15 16 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 16 16 17 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 17 17 18 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 18 18 19 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 19 19 20 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 20 20 21 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 21 21 22 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 22 22 23 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 23 23 24 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 24 24 25 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 25 25 26 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 26 26 27 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 27 27 28 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 28 28 29 $numIntgrPts 6 $ColTransfTag;
element dispBeamColumn 29 29 30 $numIntgrPts 6 $ColTransfTag;
puts "Generated - ELEMENTS"
pattern Plain 1 Linear {
load 2 0 -279310.3448 0
load 3 0 -279310.3448 0
load 4 0 -279310.3448 0
load 5 0 -279310.3448 0
load 6 0 -279310.3448 0
load 7 0 -279310.3448 0
load 8 0 -279310.3448 0
load 9 0 -279310.3448 0
load 10 0 -279310.3448 0
load 11 0 -279310.3448 0
load 12 0 -279310.3448 0
load 13 0 -279310.3448 0
load 14 0 -279310.3448 0
load 15 0 -279310.3448 0
load 16 0 -279310.3448 0
load 17 0 -279310.3448 0
load 18 0 -279310.3448 0
load 19 0 -279310.3448 0
load 20 0 -279310.3448 0
load 21 0 -279310.3448 0
load 22 0 -279310.3448 0
load 23 0 -279310.3448 0
load 24 0 -279310.3448 0
load 25 0 -279310.3448 0
load 26 0 -279310.3448 0
load 27 0 -279310.3448 0
load 28 0 -279310.3448 0
load 29 0 -279310.3448 0
load 30 0 -279310.3448 0
}
puts "Generated - LOADS"
#NOTE: unit system;
#force = N;
#length = mm;
#mass = Ton;
#ground motion = G;
#ground motion scale = 9810;
constraints Transformation;
numberer RCM;
system UmfPack;
test NormUnbalance 1.0e-1 200 5
algorithm NewtonLineSearch 0.5
integrator LoadControl 0.1
puts "START : Gravity Load Analysis"
analysis Static
for {set i 1} {$i <= 9} {incr i} {
puts "Step = $i/10"
analyze 1
}
recorder Node -file Data/DFree.out -time -node 30 -dof 1 2 3 disp;
recorder Node -file Data/RBase.out -time -node 1 -dof 1 2 3 reaction;
recorder Element -file Data/ForceColumn.txt -time -ele 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 localForce;
puts "Step = 10/10"
analyze 1
puts "COMPLETED : Gravity Load Analysis"
loadConst -time 0.0
pattern Plain 2 Linear {
load 1 0 0 0 0 0 ;
load 2 0.032627923 0 0 0 0 ;
load 3 0.266232882 0 0 0 0 ;
load 4 0.886711781 0 0 0 0 ;
load 5 2.070090893 0 0 0 0 ;
load 6 3.976356713 0 0 0 0 ;
load 7 6.754802549 0 0 0 0 ;
load 8 10.54169796 0 0 0 0 ;
load 9 15.45740983 0 0 0 0 ;
load 10 21.61421658 0 0 0 0 ;
load 11 29.10876817 0 0 0 0 ;
load 12 38.0260617 0 0 0 0 ;
load 13 48.4401269 0 0 0 0 ;
load 14 60.41114723 0 0 0 0 ;
load 15 73.9924515 0 0 0 0 ;
load 16 89.2243448 0 0 0 0 ;
load 17 106.133423 0 0 0 0 ;
load 18 124.7458707 0 0 0 0 ;
load 19 145.0686796 0 0 0 0 ;
load 20 167.1103494 0 0 0 0 ;
load 21 190.867864 0 0 0 0 ;
load 22 216.3317642 0 0 0 0 ;
load 23 243.4898487 0 0 0 0 ;
load 24 272.3253923 0 0 0 0 ;
load 25 302.8178312 0 0 0 0 ;
load 26 334.950303 0 0 0 0 ;
load 27 368.6974457 0 0 0 0 ;
load 28 404.046921 0 0 0 0 ;
load 29 440.9759716 0 0 0 0 ;
load 30 479.47788 0 0 0 0 ;
}
set BuildingHeight 101500;
set TargetRoofDispInPercent 1;
set dU [expr 0.01/100*$BuildingHeight];
set nStep [expr int($TargetRoofDispInPercent*$BuildingHeight/100/$dU)];
set controlNode 30;
set story1node 2;
set story2node 6;
set story1Height 3200;
set ddirection 1;
set iterno 4000;
constraints Transformation;
numberer RCM;
system UmfPack;
integrator DisplacementControl $controlNode $ddirection $dU;
puts "START : Push Over Analysis";
analysis Static;
proc callAlgo {x nstep step drift} {
if {$x == 1} {
puts "";
puts "Step = $step/$nstep, Target drift (%) = $drift -- Trying KrylovNewton ..";
puts "";
algorithm KrylovNewton;
set ok [analyze 1];
}
if {$x == 2} {
puts "";
puts "Step = $step/$nstep, Target drift (%) = $drift -- Trying NewtonLineSearch ..";
puts "";
algorithm NewtonLineSearch 0.8;
set ok [analyze 1];
}
if {$x == 3} {
puts "";
puts "Step = $step/$nstep, Target drift (%) = $drift -- Trying Newton with Initial Tangent..";
puts "";
algorithm Newton -initial;
set ok [analyze 1]
}
return $ok;
}
for {set i 1} {$i <= $nStep} {incr i} {
set drift [expr $dU*$i*100/$BuildingHeight]
test NormDispIncr 1.0e-5 $iterno 5;
#set ok -7;
#set j 0;
#while {$ok == -7} {
# set j [expr $j+1];
# set ok [callAlgo $j $nStep $i $drift];
# if {$j == 3 && $ok < 0} {
# set ok -8;
# };
#}
#if {$ok == -8} {
# test NormDispIncr 1.0e-5 [expr 2*$iterno] 5;
# puts "";
# puts "Divided into 2 small steps";
# puts "";
# callAlgo 1 $nStep "$i.1" [expr (($i-1)*$dU + $dU/2)*100/$BuildingHeight];
# callAlgo 1 $nStep "$i.2" [expr $drift];
#}
#if {$ok < 0} {
# test NormDispIncr 1.0e-5 [expr 2*$iterno] 5;
# puts "Number of iterations = [expr 2*$iterno]";
# callAlgo 1 $nStep $i $drift;
#}
callAlgo 1 $nStep $i $drift;
set val2 [clock seconds]
set elapsedTime [expr $val2-$val1]
set days [expr int($elapsedTime/86400)]
set hours [expr int(($elapsedTime-$days*86400)/3600)]
set minutes [expr int(($elapsedTime- $days*86400-$hours*3600)/60)]
set seconds [expr int($elapsedTime- $days*86400-$hours*3600-$minutes*60)]
set curDrift [expr $dU*$i*100/$BuildingHeight]
puts "";
puts "Step = $i/$nStep, To = [clock format $val1 -format "%I:%M:%S %P"] ,Tc = [clock format $val2 -format "%I:%M:%S %P"]"
puts "Current Roof Drift (%) = $curDrift, Target Rooft Drift(%) = $TargetRoofDispInPercent"
set Node1Disp [nodeDisp $story1node $ddirection]
set Node2Disp [nodeDisp $story2node $ddirection]
set Story1Drift [expr ($Node2Disp-$Node1Disp)*100/$story1Height]
puts "1st-Drift (%) = $Story1Drift";
puts "";
puts "==================================================";
if {$Story1Drift > 100} {
puts "";
return "Either the building fails or the program fails";
}
}
puts "COMPLETED :"
puts "Total Time Required --> $days days $hours hours $minutes minutes $seconds seconds"