├── .DS_Store ├── Arias.tcl ├── IDA_HTF.tcl ├── IDA_HTF_1D.tcl ├── LP_SteelSection.tcl ├── LumpedHingeElement.tcl ├── README.md ├── Testing ├── .DS_Store ├── Add_PGV_getSaT │ ├── .DS_Store │ ├── Add_PGV_getSaT.tcl │ ├── Ground_Motion_Integration_Check.xlsx │ └── ground_response.txt ├── AvgSa_IDA_HTF_testing │ ├── AvgSa_IDA_HTF_testing.m │ ├── AvgSa_IDA_HTF_testing.tcl │ └── AvgSa_IDA_HTF_testing.xlsx └── eq_1g_0.01s.txt ├── Units.tcl ├── cyclicPush.tcl ├── getSaT.tcl ├── modalAnalysis.tcl ├── rcBC_duct.tcl ├── runNRHA1D.tcl ├── runNRHA3D.tcl └── singlePush.tcl /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gerardjoreilly/OpenSees-Procedures/168a2b3ef7a0c51bdb0b9741a846dfc66462a8b9/.DS_Store -------------------------------------------------------------------------------- /Arias.tcl: -------------------------------------------------------------------------------- 1 | # This is a function to compute the Arias Intensity of a ground motion 2 | proc Arias {EQ dt I1 I2} { 3 | upvar 1 I I 4 | upvar 1 t12 t12 5 | 6 | # Import the ground motion 7 | set imp [open $EQ "r"]; 8 | set accg [read $imp]; 9 | close $imp 10 | 11 | # Create time vector 12 | set t {0.0}; 13 | for {set i 1} {$i < [llength $accg]} {incr i 1} { 14 | lappend t [expr [lindex $t $i-1]+$dt]; 15 | } 16 | 17 | # Compute the Arias Intensity 18 | set Ia {0.0}; 19 | for {set i 1} {$i < [llength $accg]} {incr i 1} { 20 | lappend Ia [expr [lindex $Ia $i-1]+$dt*0.5*(pow([lindex $accg $i],2.0)+pow([lindex $accg $i-1],2.0))*3.14/2.0/9.81]; 21 | } 22 | 23 | # Get the Arias intensit of the record 24 | set I [lindex $Ia [llength $accg]-1]; 25 | 26 | # Find the time span between the specified percentages of I 27 | for {set i 1} {$i <= [llength $Ia]} {incr i 1} { 28 | if {[expr $I1*$I]>[lindex $Ia $i-1]} {set c1 $i}; 29 | if {[expr $I2*$I]>[lindex $Ia $i-1]} {set c2 $i}; 30 | } 31 | set t1 [lindex $t $c1-1]; 32 | set t2 [lindex $t $c2-1]; 33 | set t12 [expr $t2-$t1]; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /IDA_HTF.tcl: -------------------------------------------------------------------------------- 1 | # -------------------------------------------------------------------------------------------------- 2 | # -- Script to Conduct Incremental Dynamic Analysis Using Hunt, Trace and Fill Algorithm ----------- 3 | # -------------------------------------------------------------------------------------------------- 4 | # Gerard O'Reilly 5 | # EUCENTRE/IUSSPavia 6 | # Created: November 2015 7 | # Last Updated: November 2019 8 | 9 | # -------------------------------------------------------------------------------------------------- 10 | # ----------------------------------------- Overview ----------------------------------------------- 11 | # -------------------------------------------------------------------------------------------------- 12 | # This is a script that will conduct an Incremental Dynamic Analysis (IDA) of a given structure 13 | # using hunting, tracing and filling (HTF), where the user needs to provide a list of ground motion 14 | # records and specify the increments, steps and maximum number of runs to conduct per record. 15 | # 16 | # The algorithm is inspired by that described in the Vamvatsikos & Cornell [2004] paper in 17 | # Earthquake Spectra, but the main difference here is that the script is entirely TCL-based. This 18 | # means that the procedure does not need Matlab to work, so the back and forth between Matlab and 19 | # OpenSees during analysis is removed. The number of inputs is also reduced where just the initial 20 | # intensity, the increment by which to increment the record and the maximum number of runs to be 21 | # conducted per record are specified. 22 | # 23 | # The algorithm works by conducting an initial "hunting" phase, where the record is scaled up 24 | # relatively quickly to find a collapse - hence, we are hunting out the collapse. This collapsed run 25 | # is then discarded and this run is re-run at an intensity of the last non-collapsing run plus a 26 | # fraction of the difference between the hunted collapse's intensity and the last non-collapsing 27 | # intensity. This fraction is currently set at 0.25, but can be modified in the code. Once we go 28 | # back to the last non-collapsing run and start slowly incrementing, we are in the "tracing" phase 29 | # of the algorithm. Once collapse has been found from tracing, the remainder of the available runs 30 | # are then used to go back and fill in the biggest gaps in the hunting phase's intensity steps, 31 | # which is known as the "filling" phase. 32 | # 33 | # Some of the warning outputs: 34 | # "----- WARNING: Collapsed achieved on first increment, reduce increment..." 35 | # This means that the first step following the initial elastic run resuted in a collapse. In 36 | # short, you have well over-shot the runway with the increment step. This is the second run, 37 | # but if the building is collapsing on the very first run (i.e. the user defined intensity), 38 | # well it seems you have bigger problems. 39 | # 40 | # "--- WARNING: First trace for collapse resulted in collapse..." 41 | # Once the collapse has been hunted out, we go back to tracing the collapse more carefully. 42 | # If this first trace results in collapse, either the last non-collapsing run was quite close 43 | # to the collapsing intensity or the 44 | # fraction of the difference is too big. Ideally, we would like to reduce this fraction 45 | # automatically, but it's a bitch to code at the minute. Flagged for follow-up..... 46 | # 47 | # "----- WARNING: Collapse not achieved, increase increment or number of runs..." 48 | # This means the collapse hasn't been hunted out yet, so either the incrementing to reach 49 | # collapse is increased or the maximum nuber of runs at the current increment is increased 50 | # to allow it to go further. This warning could be used as a way of gauging when collapse 51 | # occurs, such that the max runs can be specified a priori such that there are enough runs left 52 | # for tracing and filling. 53 | # 54 | # "----- WARNING: No filling, algorithm still tracing for collapse (reduce increment & increase runs)..." 55 | # The algorithm is still tracing for collapse, either because there are not enough runs or 56 | # because the increment used during the hunting was too big with respect to the fraction of 57 | # the difference being used to trace. 58 | # 59 | # -------------------------------------------------------------------------------------------------- 60 | # Remaining issues 61 | # -------------------------------------------------------------------------------------------------- 62 | # Need to convert the names file into two column file for each direction. This current two 63 | # file setup is a pain in planar analysis 64 | # 65 | # Handle collapse upon first trace. Try an exit command and print an error ti the file 66 | # 67 | # The algorithm hasnt been checked against how it copes with intermediate collapsing systems. 68 | # 69 | # The occurrence of non-converging has yet to be handled. 70 | # 71 | # Could implement a method, whereby 1 more intensity after first collapse is tried just to be 72 | # sure 73 | # 74 | # The use of a single IM in 3D analysis is done by taking the IMX and IMY and getting the 75 | # geomtric mean of this. Although the relative scale between the two components is maintained. 76 | # 77 | # The periods are required to be know a priori which is a bit of a pain. An older version I 78 | # had written of this function didnt require this because it loaded the model and did a modal 79 | # analysis itself to get T1. But this can be problemnatic in the future when more complicated 80 | # buildings are being analysed since OpenSees doesn't tell you explicitly which are the 81 | # T1X T1Y T2X T2Y etc. so you might be mixing the periods from two different directions. 82 | # 83 | # There is bug that does a maxRun+1 run when collapse is reached at exactly maxRun number of runs 84 | # 85 | # -------------------------------------------------------------------------------------------------- 86 | # References 87 | # -------------------------------------------------------------------------------------------------- 88 | # Vamvatsikos, D., and Cornell, C. A. [2004] “Applied Incremental Dynamic Analysis,” 89 | # Earthquake Spectra, Vol. 20, No.2, pp. 523–553. 90 | # 91 | # Kazantzi, A. K., and Vamvatsikos, D. [2015a] “Intensity measure selection for vulnerability 92 | # studies of building classes,” Earthquake Engineering & Structural Dynamics, Vol. 44, No.15, 93 | # pp. 2677–2694 DOI: 10.1002/eqe.2603. 94 | # 95 | # Kazantzi, A. K., and Vamvatsikos, D. [2015b] “A Next Generation Scalar Intensity Measure for 96 | # Analytical Vulnerability Studies,” COMPDYN 2015 - 5th ECCOMAS Thematic Conference on Computational 97 | # Methods in Structural Dynamics and Earthquake Engineering, Crete Island, Greece. 98 | 99 | # Kohrangi, M., Bazzurro, P., Vamvatsikos, D., and Spillatura, A. [2017] “Conditional spectrum-based 100 | # ground motion record selection using average spectral acceleration,” Earthquake Engineering & 101 | # Structural Dynamics DOI: 10.1002/eqe.2876. 102 | # -------------------------------------------------------------------------------------------------- 103 | # Inputs: 104 | # -------------------------------------------------------------------------------------------------- 105 | # firstInt: This is the first intensity to run the elastic run (e.g. 0.05g) 106 | # incrStep: This is the increment used during the hunting phase (e.g. 0.10g) 107 | # maxRuns: This is the maximum number of runs to use (e.g. 20) 108 | # IMtype: Intensity measure with which to conduct the IDA. 109 | # 1: PGA - Peak ground acceeleration 110 | # 2: Sa(T) - (e.g. Sa(T1)), in 3D analysis this will take 111 | # the geometric mean of the two record Sa(T) as the IM 112 | # 3: AvgSa - the log average of the Sa values at a number of periods 113 | # (i.e. (1/n)*Sum(ln(Sa))) as defined in Kohrangi et al. [2017] 114 | # 4: PGV - Peak ground velocity 115 | # 5: From Kazantzi & Vamvatsikos [2015a], the intensity measure (d) which is 116 | # given as the geometric mean (Sa,gm) at four periods defined as 117 | # [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m], where T1m and T2m are 118 | # the mean first and second mode periods of the building class. Again 119 | # the 3D IM will be the Sa,gm of the two components. 120 | # 6: From Kazantzi & Vamvatsikos [2015a], the intensity measure (e) which is 121 | # given as the geometric mean (Sa,gm) at five periods defined as 122 | # [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m, 2T1m], where T1m and T2m 123 | # are the mean first and second mode periods of the building class. Again 124 | # the 3D IM will be the Sa,gm of the two components. 125 | # 7: From Kazantzi & Vamvatsikos [2015b], the intensity measure the same as 126 | # 4 above but with the inclusion of the duration via time between Arias 127 | # intensity of 5% and 75% raised to the power 0.2. This gives the IM as 128 | # Sa,gm*(t75%-t5%)^0.2 129 | # Tinfo: List of period info required by specified IM (e.g {1.0 2.0}) 130 | # 1 - Dont need anything, just specify an empty list {}. It will ignore 131 | # any entries if present 132 | # 2 - Single value of period to condition to, like {1.0} 133 | # 3 - List of the periods from Tlower to Tupper like {0.1 0.2 0.3 0.4 0.5} 134 | # 4 - Dont need anything, just specify an empty list {}. It will ignore 135 | # any entries if present 136 | # 5 - List of the two periods T1m and T2m, like {1.0 0.5} 137 | # 6 - List of the two periods T1m and T2m, like {1.0 0.5} 138 | # 7 - List of the two periods T1m and T2m, like {1.0 0.5} 139 | # xi: Elastic damping, typically 0.05 140 | # Dt: Analysis time step 141 | # dCap: Drift capacity in % 142 | # gmsdir: directory with the ground motions 143 | # nmsfileX: Text file with the names of the X direction records in the form "*.txt" 144 | # nmsfileY: Text file with the names of the Y direction records in the form "*.txt" 145 | # dtsfile: Text file with the time steps of the records 146 | # dursfile: Text file with the durations of the records 147 | # outsdir: Where to print the outputs 148 | # mdlfile: OpenSees model (in 3D), the model must have the EQ pattern and response recorders 149 | # already assigned inside model 150 | # pflag: Print flag (optional) put greater than 1 to print output on screen during analysis 151 | 152 | # -------------------------------------------------------------------------------------------------- 153 | # Outputs: 154 | # -------------------------------------------------------------------------------------------------- 155 | # The procedure will then print the intensities into the file: 156 | # $outsdir/IM_Record${record number}.txt 157 | # 158 | # and also print a log file with the NRHA results into: 159 | # $outsdir/log_IDA_Record${record number}_Run${run number}.txt 160 | 161 | # -------------------------------------------------------------------------------------------------- 162 | # REQUIREMENTS: 163 | # -------------------------------------------------------------------------------------------------- 164 | # To run this script, the following procedures are also required: 165 | # runNRHA3D: This is to run the actual non-linear response history analysis 166 | # getSaT: Get the spectral response ordinates 167 | # Arias: Get the Arias intensity of a record 168 | # 169 | proc IDA_HTF {firstInt incrStep maxRuns IMtype Tinfo xi Dt dCap gmsdir nmsfileX nmsfileY dtsfile dursfile outsdir mdlfile {pflag 0}} { 170 | # Create the output directory 171 | file mkdir $outsdir 172 | 173 | # Open an error file that will log the IDA_HTF errors 174 | set error_log [open $outsdir/IDA_HTF_error_log.txt "w"]; 175 | puts "^^^^^^^^ STARTING IDA HTF ^^^^^^^^" 176 | puts $error_log "^^^^^^^^ STARTING IDA HTF ^^^^^^^^" 177 | 178 | # Get the ground motion set information 179 | set eqnms_listX [read [open $gmsdir/$nmsfileX "r"]]; 180 | set eqnms_listY [read [open $gmsdir/$nmsfileY "r"]]; 181 | set dts_list [read [open $gmsdir/$dtsfile "r"]]; 182 | set durs_list [read [open $gmsdir/$dursfile "r"]]; 183 | set nrecs [llength $dts_list]; 184 | set g 9.81; 185 | 186 | for {set i 1} {$i <= $nrecs} {incr i 1} { 187 | set IM_log [open $outsdir/IM_${i}.txt "w"]; 188 | 189 | # Load the info about the record 190 | set EQnameX $gmsdir/[lindex $eqnms_listX $i-1]; # Get the name of the record1 191 | set EQnameY $gmsdir/[lindex $eqnms_listY $i-1]; # Get the name of the record2 192 | set dt [lindex $dts_list $i-1]; # Current dt 193 | set dur [lindex $durs_list $i-1]; # Current duration 194 | 195 | # Establish the IM 196 | if {$IMtype==1} { 197 | # IM is PGA 198 | # Now get the spectral ordinates 199 | getSaT $EQnameX $dt 1.0 $xi; # Get the PGA of the record in the X direction 200 | set IMX $pga 201 | getSaT $EQnameY $dt 1.0 $xi; # Get the PGA of the record in the Y direction 202 | set IMY $pga 203 | 204 | # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 205 | # "current" IM. This way, the same scale factor will be applied to both 206 | set IMgeomean [expr pow($IMX*$IMY,0.5)]; 207 | } elseif {$IMtype==2} { 208 | # IM is Sa at a specified period 209 | # Need to get the conditioning period 210 | set Tcond [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 211 | 212 | # Now get the spectral ordinates 213 | getSaT $EQnameX $dt $Tcond $xi; # Get the Sa(T1,5%) of the record in the X direction 214 | set IMX $Sa 215 | getSaT $EQnameY $dt $Tcond $xi; # Get the Sa(T1,5%) of the record in the Y direction 216 | set IMY $Sa 217 | 218 | # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 219 | # "current" IM. This way, the same scale factor will be applied to both 220 | set IMgeomean [expr pow($IMX*$IMY,0.5)]; 221 | } elseif {$IMtype==3} { 222 | # IM is AvgSa 223 | # Get the length of the periods 224 | set nT [llength $Tinfo] 225 | 226 | # Get the spectral accelerations at each period 227 | set Sa_listX {}; 228 | set Sa_listY {}; 229 | for {set pn 0} {$pn < $nT} {incr pn 1} { 230 | getSaT $EQnameX $dt [lindex $Tinfo $pn] $xi; # Get the Sa(T1,5%) of the record in the X direction 231 | lappend Sa_listX $Sa 232 | getSaT $EQnameY $dt [lindex $Tinfo $pn] $xi; # Get the Sa(T1,5%) of the record in the Y direction 233 | lappend Sa_listY $Sa 234 | } 235 | 236 | # Compute the geometric mean 237 | set SaXsumprod [lindex $Sa_listX 0] 238 | set SaYsumprod [lindex $Sa_listY 0] 239 | for {set pn 1} {$pn < $nT} {incr pn 1} { 240 | set SaXsumprod [expr [lindex $Sa_listX $pn]*$SaXsumprod] 241 | set SaYsumprod [expr [lindex $Sa_listX $pn]*$SaYsumprod] 242 | } 243 | set SaXgm [expr pow($SaXsumprod,1/($nT*1.0))] 244 | set SaYgm [expr pow($SaYsumprod,1/($nT*1.0))] 245 | 246 | # Using the geoetreic mean of the two compoents AvgSa 247 | # This is the same as just takeing the AvgSa of the combined set of X and Y (i.e. at Tinfo x 2 periods) 248 | set IMgeomean [expr pow($SaXgm*$SaYgm,0.5)] 249 | } elseif {$IMtype==4} { 250 | # IM is PGV 251 | # Now get the spectral ordinates 252 | getSaT $EQnameX $dt 1.0 $xi; # Get the PGA of the record in the X direction 253 | set IMX $pgv 254 | getSaT $EQnameY $dt 1.0 $xi; # Get the PGA of the record in the Y direction 255 | set IMY $pgv 256 | 257 | # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 258 | # "current" IM. This way, the same scale factor will be applied to both 259 | set IMgeomean [expr pow($IMX*$IMY,0.5)]; 260 | 261 | } elseif {$IMtype==5} { 262 | # IM is Sa,gm at a specified periods 263 | set T1m [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 264 | set T2m [lindex $Tinfo 1]; # It will be the second entry in the Tinfo list 265 | 266 | # Period list [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m] 267 | set p_list {}; 268 | lappend p_list $T2m; 269 | if {[expr 0.5*($T2m+$T1m)]<[expr 1.5*$T2m]} { 270 | lappend p_list [expr 0.5*($T2m+$T1m)]; 271 | } else { 272 | lappend p_list [expr 1.5*$T2m]; 273 | } 274 | lappend p_list $T1m; 275 | lappend p_list [expr 1.5*$T1m]; 276 | 277 | # Get Spectral values at each 278 | set Sa_listX {}; 279 | set Sa_listY {}; 280 | for {set pn 1} {$pn<=[llength $p_list]} {incr pn 1} { 281 | getSaT $EQnameX $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the X direction 282 | lappend Sa_listX $Sa 283 | getSaT $EQnameY $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the Y direction 284 | lappend Sa_listY $Sa 285 | } 286 | 287 | # Get the geometric mean of these 288 | set IMX [expr pow([lindex $Sa_listX 0]*[lindex $Sa_listX 1]*[lindex $Sa_listX 2]*[lindex $Sa_listX 3],1/4.0)]; 289 | set IMY [expr pow([lindex $Sa_listY 0]*[lindex $Sa_listY 1]*[lindex $Sa_listY 2]*[lindex $Sa_listY 3],1/4.0)]; 290 | 291 | # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 292 | # "current" IM. This way, the same scale factor will be applied to both 293 | set IMgeomean [expr pow($IMX*$IMY,0.5)]; 294 | } elseif {$IMtype==6} { 295 | # IM is Sa,gm at a specified periods 296 | set T1m [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 297 | set T2m [lindex $Tinfo 1]; # It will be the second entry in the Tinfo list 298 | 299 | # Period list [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m, 2T1m] 300 | set p_list {}; 301 | lappend p_list $T2m; 302 | if {[expr 0.5*($T2m+$T1m)]<[expr 1.5*$T2m]} { 303 | lappend p_list [expr 0.5*($T2m+$T1m)]; 304 | } else { 305 | lappend p_list [expr 1.5*$T2m]; 306 | } 307 | lappend p_list $T1m; 308 | lappend p_list [expr 1.5*$T1m]; 309 | lappend p_list [expr 2.0*$T1m]; 310 | 311 | # Get Spectral values at each 312 | set Sa_listX {}; 313 | set Sa_listY {}; 314 | for {set pn 1} {$pn<=[llength $p_list]} {incr pn 1} { 315 | getSaT $EQnameX $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the X direction 316 | lappend Sa_listX $Sa 317 | getSaT $EQnameY $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the Y direction 318 | lappend Sa_listY $Sa 319 | } 320 | 321 | # Get the geometric mean of these 322 | set IMX [expr pow([lindex $Sa_listX 0]*[lindex $Sa_listX 1]*[lindex $Sa_listX 2]*[lindex $Sa_listX 3]*[lindex $Sa_listX 4],1/5.0)]; 323 | set IMY [expr pow([lindex $Sa_listY 0]*[lindex $Sa_listY 1]*[lindex $Sa_listY 2]*[lindex $Sa_listY 3]*[lindex $Sa_listY 4],1/5.0)]; 324 | 325 | # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 326 | # "current" IM. This way, the same scale factor will be applied to both 327 | set IMgeomean [expr pow($IMX*$IMY,0.5)]; 328 | } elseif {$IMtype==7} { 329 | # IM is Sa,gm at a specified periods 330 | set T1m [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 331 | set T2m [lindex $Tinfo 1]; # It will be the second entry in the Tinfo list 332 | 333 | # Period list [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m, 2T1m] 334 | set p_list {}; 335 | lappend p_list $T2m; 336 | if {[expr 0.5*($T2m+$T1m)]<[expr 1.5*$T2m]} { 337 | lappend p_list [expr 0.5*($T2m+$T1m)]; 338 | } else { 339 | lappend p_list [expr 1.5*$T2m]; 340 | } 341 | lappend p_list $T1m; 342 | lappend p_list [expr 1.5*$T1m]; 343 | lappend p_list [expr 2.0*$T1m]; 344 | 345 | # Get Spectral values at each 346 | set Sa_listX {}; 347 | set Sa_listY {}; 348 | for {set pn 1} {$pn<=[llength $p_list]} {incr pn 1} { 349 | getSaT $EQnameX $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the X direction 350 | lappend Sa_listX $Sa 351 | getSaT $EQnameY $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the Y direction 352 | lappend Sa_listY $Sa 353 | } 354 | 355 | # Get the geometric mean of these 356 | set SagmX [expr pow([lindex $Sa_listX 0]*[lindex $Sa_listX 1]*[lindex $Sa_listX 2]*[lindex $Sa_listX 3]*[lindex $Sa_listX 4],1/5.0)]; 357 | set SagmY [expr pow([lindex $Sa_listY 0]*[lindex $Sa_listY 1]*[lindex $Sa_listY 2]*[lindex $Sa_listY 3]*[lindex $Sa_listY 4],1/5.0)]; 358 | 359 | # Get the time between 5 and 75% of Arias Intensity 360 | Arias $EQnameX $dt 0.05 0.75; 361 | set t12X $t12; 362 | Arias $EQnameY $dt 0.05 0.75; 363 | set t12Y $t12; 364 | 365 | # Get the IMs in the two directions 366 | set IMX [expr $SagmX*pow($t12X,0.2)]; 367 | set IMY [expr $SagmY*pow($t12Y,0.2)]; 368 | 369 | # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 370 | # "current" IM. This way, the same scale factor will be applied to both 371 | set IMgeomean [expr pow($IMX*$IMY,0.5)]; 372 | } 373 | 374 | # Set up the initial indices for HTF 375 | set j 1; 376 | set IM {}; # Initialise the list of IM used for printing 377 | set IMlist {}; # This is just a list that will be used in filling 378 | set hFlag 1; # Hunting flag (1 for when we're hunting) 379 | set tFlag 0; # Tracing flag (0 at first) 380 | set fFlag 0; # Filling flag (0 at first) 381 | 382 | while {$j<=$maxRuns} { 383 | # As long as the hunting flag is 1, meaning we havent reached a collapse 384 | if {$hFlag==1} { 385 | # Determine the intensity to run at during the hunting (Andiamo a cacciare!) 386 | if {$j==1} { 387 | lappend IM $firstInt; 388 | } else { 389 | lappend IM [expr [lindex $IM $j-2]+($j-1)*$incrStep]; # Ramp it up! 390 | } 391 | # Determine the scale factor that needs to be applied to the record 392 | set sfX [expr [lindex $IM $j-1]/$IMgeomean*$g]; 393 | set sfY [expr [lindex $IM $j-1]/$IMgeomean*$g]; 394 | set run "Record${i}_Run${j}"; # This is a tag that outputs will be labelled with 395 | set log [open $outsdir/log_IDA_${run}.txt "w"]; 396 | 397 | # The hunting intensity has been determined, now we can analyse 398 | source $mdlfile 399 | if {$pflag>0} {puts [format "Record:$i Run:$j IM:%.3f" [lindex $IM $j-1] ]} 400 | runNRHA3D $Dt $dur $dCap $tNode $bNode $log $pflag 401 | close $log 402 | incr j 1; 403 | 404 | # Check the hunted run for collapse 405 | if {$cIndex>0} { 406 | set hFlag 0; # Stop hunting 407 | set tFlag 1; # Start tracing 408 | incr j -1; # Reduce by 1 because j was increased at end of hunting and we want to redo that point 409 | set jhunt $j; # The value of j we hunted to 410 | if {$jhunt==2} {puts $error_log "WARNING: ${run} - Collapsed achieved on first increment, reduce increment..."}; 411 | } else { 412 | puts $IM_log [format "%.3f" [lindex $IM $j-2]]; # j-2 because we've already increased j, but need to know if collapsed 413 | } 414 | wipe; 415 | }; # Close hunting 416 | 417 | # When the first collapse is reached, we start tracing between last convergence and the first collapse 418 | if {$tFlag==1} { 419 | # The first phase is to trace the last DeltaIM to get within the resolution 420 | if {$j==$jhunt} { 421 | set firstC [lindex $IM $j-1]; # This is the IM of the hunting collapse 422 | set IM [lreplace $IM $j-1 $j-1]; # Remove that value of IM from the array (it's already been appended) 423 | } 424 | set diff [expr $firstC-[lindex $IM $j-2]]; # Determine the difference between the hunting's noncollapse and collapse IM 425 | set inctr [expr 0.20*$diff]; # Take 0.2 of the difference 426 | if {$inctr<0.05} {set inctr 0.025}; # Place a lower threshold on the increment so it doesnt start tracing too fine 427 | set IMtr [expr [lindex $IM $j-2]+$inctr]; # Calculate new tracing IM, which is previous noncollapse plus increment 428 | lappend IM $IMtr 429 | set sfX [expr [lindex $IM $j-1]/$IMgeomean*$g]; 430 | set sfY [expr [lindex $IM $j-1]/$IMgeomean*$g]; 431 | puts $IM_log [format "%.3f" $IMtr]; 432 | set run "Record${i}_Run${j}"; # This is a tag that outputs will be labelled with 433 | set log [open $outsdir/log_IDA_${run}.txt "w"]; 434 | 435 | # The trace intensity has been determined, now we can analyse 436 | source $mdlfile 437 | if {$pflag>0} {puts [format "Record:$i Run:$j IM:%.3f" $IMtr ]} 438 | runNRHA3D $Dt $dur $dCap $tNode $bNode $log $pflag 439 | 440 | close $log 441 | 442 | if {$cIndex>0} { 443 | # Not sure if this is the best way, to just trace back up to collapse again 444 | set tFlag 0; # Stop tracing 445 | set fFlag 1; # Start filling 446 | set jtrace $j; # The value of j we traced to 447 | set IMlist $IM; # Get the list of IMs 448 | if {$j==$jhunt} { 449 | # This means the first trace collapsed, should reduce the increment 450 | puts $error_log "WARNING: ${run} - First trace for collapse resulted in collapse..." 451 | } 452 | } 453 | incr j 1; 454 | wipe; 455 | }; # Close the tracing 456 | 457 | # When the required resolution is reached, we start filling 458 | if {$fFlag==1} { 459 | # Reorder the list so we can account for filled runs 460 | set IMlist [lsort -real $IMlist]; 461 | 462 | # Determine the biggest gap in IM for the hunted runs 463 | set gap 0.0; 464 | # We go to the end of the list minus 1 because, if not we would be filling between a noncollapsing and a collapsing run, 465 | # for which we are not sure if that filling run would be a non collapse - In short, does away with collapsing fills 466 | for {set ii 1} {$ii<[expr [llength $IMlist]-1]} {incr ii 1} { 467 | set temp [expr [lindex $IMlist $ii]-[lindex $IMlist $ii-1]]; # Find the running gap of hunted runs 468 | if {$temp>$gap} { 469 | set gap $temp 470 | set IMfil [expr [lindex $IMlist $ii-1]+$gap/2]; # Determine new filling IM 471 | }; # Update to maximum gap 472 | } 473 | 474 | lappend IM $IMfil 475 | lappend IMlist $IMfil 476 | set sfX [expr [lindex $IM $j-1]/$IMgeomean*$g]; 477 | set sfY [expr [lindex $IM $j-1]/$IMgeomean*$g]; 478 | puts $IM_log [format "%.3f" $IMfil]; 479 | set run "Record${i}_Run${j}"; # This is a tag that outputs will be labelled with 480 | set log [open $outsdir/log_IDA_${run}.txt "w"]; 481 | 482 | # The trace intensity has been determined, now we can analyse 483 | source $mdlfile 484 | if {$pflag>0} {puts [format "Record:$i Run:$j IM:%.3f" $IMfil ]} 485 | runNRHA3D $Dt $dur $dCap $tNode $bNode $log $pflag 486 | 487 | close $log 488 | incr j 1; 489 | wipe; 490 | }; # Close the filling 491 | 492 | # Wrap it up and finish 493 | if {$j==$maxRuns && $hFlag==1} { 494 | puts $error_log "WARNING: ${run} - Collapse not achieved, increase increment or number of runs..." 495 | }; 496 | if {$j==$maxRuns && $fFlag==0} { 497 | puts $error_log "WARNING: ${run} - No filling, algorithm still tracing for collapse (reduce increment & increase runs)..." 498 | }; 499 | wipe; 500 | }; # Close the maxRuns while loop 501 | close $IM_log 502 | }; # Close the ground motion loop 503 | 504 | puts "^^^^^^^^ FINISHED IDA HTF ^^^^^^^^" 505 | puts $error_log "^^^^^^^^ FINISHED IDA HTF ^^^^^^^^" 506 | close $error_log 507 | }; 508 | -------------------------------------------------------------------------------- /IDA_HTF_1D.tcl: -------------------------------------------------------------------------------- 1 | # -------------------------------------------------------------------------------------------------- 2 | # -- Script to Conduct 1D Incremental Dynamic Analysis Using Hunt, Trace and Fill Algorithm ----------- 3 | # -------------------------------------------------------------------------------------------------- 4 | # Gerard O'Reilly 5 | # EUCENTRE/IUSSPavia 6 | # Created: November 2015 7 | # Last Updated: December 2020 8 | 9 | # -------------------------------------------------------------------------------------------------- 10 | # ----------------------------------------- Overview ----------------------------------------------- 11 | # -------------------------------------------------------------------------------------------------- 12 | # This is a script that will conduct an Incremental Dynamic Analysis (IDA) of a given structure 13 | # using hunting, tracing and filling (HTF), where the user needs to provide a list of ground motion 14 | # records and specify the increments, steps and maximum number of runs to conduct per record. 15 | # 16 | # The algorithm is inspired by that described in the Vamvatsikos & Cornell [2004] paper in 17 | # Earthquake Spectra, but the main difference here is that the script is entirely TCL-based. This 18 | # means that the procedure does not need Matlab to work, so the back and forth between Matlab and 19 | # OpenSees during analysis is removed. The number of inputs is also reduced where just the initial 20 | # intensity, the increment by which to increment the record and the maximum number of runs to be 21 | # conducted per record are specified. 22 | # 23 | # The algorithm works by conducting an initial "hunting" phase, where the record is scaled up 24 | # relatively quickly to find a collapse - hence, we are hunting out the collapse. This collapsed run 25 | # is then discarded and this run is re-run at an intensity of the last non-collapsing run plus a 26 | # fraction of the difference between the hunted collapse's intensity and the last non-collapsing 27 | # intensity. This fraction is currently set at 0.25, but can be modified in the code. Once we go 28 | # back to the last non-collapsing run and start slowly incrementing, we are in the "tracing" phase 29 | # of the algorithm. Once collapse has been found from tracing, the remainder of the available runs 30 | # are then used to go back and fill in the biggest gaps in the hunting phase's intensity steps, 31 | # which is known as the "filling" phase. 32 | # 33 | # Some of the warning outputs: 34 | # "----- WARNING: Collapsed achieved on first increment, reduce increment..." 35 | # This means that the first step following the initial elastic run resuted in a collapse. In 36 | # short, you have well over-shot the runway with the increment step. This is the second run, 37 | # but if the building is collapsing on the very first run (i.e. the user defined intensity), 38 | # well it seems you have bigger problems. 39 | # 40 | # "--- WARNING: First trace for collapse resulted in collapse..." 41 | # Once the collapse has been hunted out, we go back to tracing the collapse more carefully. 42 | # If this first trace results in collapse, either the last non-collapsing run was quite close 43 | # to the collapsing intensity or the 44 | # fraction of the difference is too big. Ideally, we would like to reduce this fraction 45 | # automatically, but it's a bitch to code at the minute. Flagged for follow-up..... 46 | # 47 | # "----- WARNING: Collapse not achieved, increase increment or number of runs..." 48 | # This means the collapse hasn't been hunted out yet, so either the incrementing to reach 49 | # collapse is increased or the maximum nuber of runs at the current increment is increased 50 | # to allow it to go further. This warning could be used as a way of gauging when collapse 51 | # occurs, such that the max runs can be specified a priori such that there are enough runs left 52 | # for tracing and filling. 53 | # 54 | # "----- WARNING: No filling, algorithm still tracing for collapse (reduce increment & increase runs)..." 55 | # The algorithm is still tracing for collapse, either because there are not enough runs or 56 | # because the increment used during the hunting was too big with respect to the fraction of 57 | # the difference being used to trace. 58 | # 59 | # -------------------------------------------------------------------------------------------------- 60 | # Remaining issues 61 | # -------------------------------------------------------------------------------------------------- 62 | # Need to convert the names file into two column file for each direction. This current two 63 | # file setup is a pain in planar analysis 64 | # 65 | # Handle collapse upon first trace. Try an exit command and print an error ti the file 66 | # 67 | # The algorithm hasnt been checked against how it copes with intermediate collapsing systems. 68 | # 69 | # The occurrence of non-converging has yet to be handled. 70 | # 71 | # Could implement a method, whereby 1 more intensity after first collapse is tried just to be 72 | # sure 73 | # 74 | # The use of a single IM in 3D analysis is done by taking the IMX and IMY and getting the 75 | # geomtric mean of this. Although the relative scale between the two components is maintained. 76 | # 77 | # The periods are required to be know a priori which is a bit of a pain. An older version I 78 | # had written of this function didnt require this because it loaded the model and did a modal 79 | # analysis itself to get T1. But this can be problemnatic in the future when more complicated 80 | # buildings are being analysed since OpenSees doesn't tell you explicitly which are the 81 | # T1X T1Y T2X T2Y etc. so you might be mixing the periods from two different directions. 82 | # 83 | # There is bug that does a maxRun+1 run when collapse is reached at exactly maxRun number of runs 84 | # 85 | # -------------------------------------------------------------------------------------------------- 86 | # References 87 | # -------------------------------------------------------------------------------------------------- 88 | # Vamvatsikos, D., and Cornell, C. A. [2004] “Applied Incremental Dynamic Analysis,” 89 | # Earthquake Spectra, Vol. 20, No.2, pp. 523–553. 90 | # 91 | # Kazantzi, A. K., and Vamvatsikos, D. [2015a] “Intensity measure selection for vulnerability 92 | # studies of building classes,” Earthquake Engineering & Structural Dynamics, Vol. 44, No.15, 93 | # pp. 2677–2694 DOI: 10.1002/eqe.2603. 94 | # 95 | # Kazantzi, A. K., and Vamvatsikos, D. [2015b] “A Next Generation Scalar Intensity Measure for 96 | # Analytical Vulnerability Studies,” COMPDYN 2015 - 5th ECCOMAS Thematic Conference on Computational 97 | # Methods in Structural Dynamics and Earthquake Engineering, Crete Island, Greece. 98 | 99 | # Kohrangi, M., Bazzurro, P., Vamvatsikos, D., and Spillatura, A. [2017] “Conditional spectrum-based 100 | # ground motion record selection using average spectral acceleration,” Earthquake Engineering & 101 | # Structural Dynamics DOI: 10.1002/eqe.2876. 102 | # -------------------------------------------------------------------------------------------------- 103 | # Inputs: 104 | # -------------------------------------------------------------------------------------------------- 105 | # firstInt: This is the first intensity to run the elastic run (e.g. 0.05g) 106 | # incrStep: This is the increment used during the hunting phase (e.g. 0.10g) 107 | # maxRuns: This is the maximum number of runs to use (e.g. 20) 108 | # IMtype: Intensity measure with which to conduct the IDA. 109 | # 1: PGA - Peak ground acceeleration 110 | # 2: Sa(T) - (e.g. Sa(T1)), in 3D analysis this will take 111 | # the geometric mean of the two record Sa(T) as the IM 112 | # 3: AvgSa - the log average of the Sa values at a number of periods 113 | # (i.e. (1/n)*Sum(ln(Sa))) as defined in Kohrangi et al. [2017] 114 | # 4: PGV - Peak ground velocity 115 | # 5: From Kazantzi & Vamvatsikos [2015a], the intensity measure (d) which is 116 | # given as the geometric mean (Sa,gm) at four periods defined as 117 | # [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m], where T1m and T2m are 118 | # the mean first and second mode periods of the building class. Again 119 | # the 3D IM will be the Sa,gm of the two components. 120 | # 6: From Kazantzi & Vamvatsikos [2015a], the intensity measure (e) which is 121 | # given as the geometric mean (Sa,gm) at five periods defined as 122 | # [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m, 2T1m], where T1m and T2m 123 | # are the mean first and second mode periods of the building class. Again 124 | # the 3D IM will be the Sa,gm of the two components. 125 | # 7: From Kazantzi & Vamvatsikos [2015b], the intensity measure the same as 126 | # 4 above but with the inclusion of the duration via time between Arias 127 | # intensity of 5% and 75% raised to the power 0.2. This gives the IM as 128 | # Sa,gm*(t75%-t5%)^0.2 129 | # Tinfo: List of period info required by specified IM (e.g {1.0 2.0}) 130 | # 1 - Dont need anything, just specify an empty list {}. It will ignore 131 | # any entries if present 132 | # 2 - Single value of period to condition to, like {1.0} 133 | # 3 - List of the periods from Tlower to Tupper like {0.1 0.2 0.3 0.4 0.5} 134 | # 4 - Dont need anything, just specify an empty list {}. It will ignore 135 | # any entries if present 136 | # 5 - List of the two periods T1m and T2m, like {1.0 0.5} 137 | # 6 - List of the two periods T1m and T2m, like {1.0 0.5} 138 | # 7 - List of the two periods T1m and T2m, like {1.0 0.5} 139 | # xi: Elastic damping, typically 0.05 140 | # Dt: Analysis time step 141 | # dCap: Drift capacity in % 142 | # gmsdir: directory with the ground motions 143 | # nmsfileX: Text file with the names of the X direction records in the form "*.txt" 144 | # nmsfileY: Text file with the names of the Y direction records in the form "*.txt" 145 | # dtsfile: Text file with the time steps of the records 146 | # dursfile: Text file with the durations of the records 147 | # outsdir: Where to print the outputs 148 | # mdlfile: OpenSees model (in 3D), the model must have the EQ pattern and response recorders 149 | # already assigned inside model 150 | # pflag: Print flag (optional) put greater than 1 to print output on screen during analysis 151 | 152 | # -------------------------------------------------------------------------------------------------- 153 | # Outputs: 154 | # -------------------------------------------------------------------------------------------------- 155 | # The procedure will then print the intensities into the file: 156 | # $outsdir/IM_Record${record number}.txt 157 | # 158 | # and also print a log file with the NRHA results into: 159 | # $outsdir/log_IDA_Record${record number}_Run${run number}.txt 160 | 161 | # -------------------------------------------------------------------------------------------------- 162 | # REQUIREMENTS: 163 | # -------------------------------------------------------------------------------------------------- 164 | # To run this script, the following procedures are also required: 165 | # runNRHA1D: This is to run the actual non-linear response history analysis 166 | # getSaT: Get the spectral response ordinates 167 | # Arias: Get the Arias intensity of a record 168 | # 169 | proc IDA_HTF_1D {firstInt incrStep maxRuns IMtype Tinfo xi Dt dCap gmsdir nmsfile dtsfile dursfile outsdir mdlfile {pflag 0}} { 170 | # Create the output directory 171 | file mkdir $outsdir 172 | 173 | # Open an error file that will log the IDA_HTF errors 174 | set error_log [open $outsdir/IDA_HTF_error_log.txt "w"]; 175 | puts "^^^^^^^^ STARTING IDA HTF ^^^^^^^^" 176 | puts $error_log "^^^^^^^^ STARTING IDA HTF ^^^^^^^^" 177 | 178 | # Get the ground motion set information 179 | set eqnms_list [read [open $gmsdir/$nmsfile "r"]]; 180 | set dts_list [read [open $gmsdir/$dtsfile "r"]]; 181 | set durs_list [read [open $gmsdir/$dursfile "r"]]; 182 | set nrecs [llength $dts_list]; 183 | set g 9.81; 184 | 185 | for {set i 1} {$i <= $nrecs} {incr i 1} { 186 | set IM_log [open $outsdir/IM_${i}.txt "w"]; 187 | 188 | # Load the info about the record 189 | set EQname [lindex $eqnms_list $i-1]; # Get the name of the record 190 | set dt [lindex $dts_list $i-1]; # Current dt 191 | set dur [lindex $durs_list $i-1]; # Current duration 192 | 193 | # Establish the IM 194 | if {$IMtype==1} { 195 | # IM is PGA 196 | # Now get the spectral ordinates 197 | getSaT $gmsdir/$EQname $dt 1.0 $xi; # Get the PGA of the record in the X direction 198 | set IMrecord $pga 199 | 200 | } elseif {$IMtype==2} { 201 | # IM is Sa at a specified period 202 | # Need to get the conditioning period 203 | set Tcond [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 204 | 205 | # Now get the spectral ordinates 206 | getSaT $gmsdir/$EQname $dt $Tcond $xi; # Get the Sa(T1,5%) of the record in the X direction 207 | set IMrecord $Sa 208 | 209 | } elseif {$IMtype==3} { 210 | # # IM is AvgSa 211 | # # Get the length of the periods 212 | # set nT [llength $Tinfo] 213 | # 214 | # # Get the spectral accelerations at each period 215 | # set Sa_listX {}; 216 | # set Sa_listY {}; 217 | # for {set pn 0} {$pn < $nT} {incr pn 1} { 218 | # getSaT $gmsdir/$EQnameX $dt [lindex $Tinfo $pn] $xi; # Get the Sa(T1,5%) of the record in the X direction 219 | # lappend Sa_listX $Sa 220 | # getSaT $gmsdir/$EQnameY $dt [lindex $Tinfo $pn] $xi; # Get the Sa(T1,5%) of the record in the Y direction 221 | # lappend Sa_listY $Sa 222 | # } 223 | # 224 | # # Compute the geometric mean 225 | # set SaXsumprod [lindex $Sa_listX 0] 226 | # set SaYsumprod [lindex $Sa_listY 0] 227 | # for {set pn 1} {$pn < $nT} {incr pn 1} { 228 | # set SaXsumprod [expr [lindex $Sa_listX $pn]*$SaXsumprod] 229 | # set SaYsumprod [expr [lindex $Sa_listX $pn]*$SaYsumprod] 230 | # } 231 | # set SaXgm [expr pow($SaXsumprod,1/($nT*1.0))] 232 | # set SaYgm [expr pow($SaYsumprod,1/($nT*1.0))] 233 | # 234 | # # Using the geoetreic mean of the two compoents AvgSa 235 | # # This is the same as just takeing the AvgSa of the combined set of X and Y (i.e. at Tinfo x 2 periods) 236 | # set IMgeomean [expr pow($SaXgm*$SaYgm,0.5)] 237 | } elseif {$IMtype==4} { 238 | # # IM is PGV 239 | # # Now get the spectral ordinates 240 | # getSaT $gmsdir/$EQnameX $dt 1.0 $xi; # Get the PGA of the record in the X direction 241 | # set IMX $pgv 242 | # getSaT $gmsdir/$EQnameY $dt 1.0 $xi; # Get the PGA of the record in the Y direction 243 | # set IMY $pgv 244 | # 245 | # # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 246 | # # "current" IM. This way, the same scale factor will be applied to both 247 | # set IMgeomean [expr pow($IMX*$IMY,0.5)]; 248 | # 249 | # } elseif {$IMtype==5} { 250 | # # IM is Sa,gm at a specified periods 251 | # set T1m [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 252 | # set T2m [lindex $Tinfo 1]; # It will be the second entry in the Tinfo list 253 | # 254 | # # Period list [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m] 255 | # set p_list {}; 256 | # lappend p_list $T2m; 257 | # if {[expr 0.5*($T2m+$T1m)]<[expr 1.5*$T2m]} { 258 | # lappend p_list [expr 0.5*($T2m+$T1m)]; 259 | # } else { 260 | # lappend p_list [expr 1.5*$T2m]; 261 | # } 262 | # lappend p_list $T1m; 263 | # lappend p_list [expr 1.5*$T1m]; 264 | # 265 | # # Get Spectral values at each 266 | # set Sa_listX {}; 267 | # set Sa_listY {}; 268 | # for {set pn 1} {$pn<=[llength $p_list]} {incr pn 1} { 269 | # getSaT $gmsdir/$EQnameX $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the X direction 270 | # lappend Sa_listX $Sa 271 | # getSaT $gmsdir/$EQnameY $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the Y direction 272 | # lappend Sa_listY $Sa 273 | # } 274 | # 275 | # # Get the geometric mean of these 276 | # set IMX [expr pow([lindex $Sa_listX 0]*[lindex $Sa_listX 1]*[lindex $Sa_listX 2]*[lindex $Sa_listX 3],1/4.0)]; 277 | # set IMY [expr pow([lindex $Sa_listY 0]*[lindex $Sa_listY 1]*[lindex $Sa_listY 2]*[lindex $Sa_listY 3],1/4.0)]; 278 | # 279 | # # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 280 | # # "current" IM. This way, the same scale factor will be applied to both 281 | # set IMgeomean [expr pow($IMX*$IMY,0.5)]; 282 | } elseif {$IMtype==6} { 283 | # # IM is Sa,gm at a specified periods 284 | # set T1m [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 285 | # set T2m [lindex $Tinfo 1]; # It will be the second entry in the Tinfo list 286 | # 287 | # # Period list [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m, 2T1m] 288 | # set p_list {}; 289 | # lappend p_list $T2m; 290 | # if {[expr 0.5*($T2m+$T1m)]<[expr 1.5*$T2m]} { 291 | # lappend p_list [expr 0.5*($T2m+$T1m)]; 292 | # } else { 293 | # lappend p_list [expr 1.5*$T2m]; 294 | # } 295 | # lappend p_list $T1m; 296 | # lappend p_list [expr 1.5*$T1m]; 297 | # lappend p_list [expr 2.0*$T1m]; 298 | # 299 | # # Get Spectral values at each 300 | # set Sa_listX {}; 301 | # set Sa_listY {}; 302 | # for {set pn 1} {$pn<=[llength $p_list]} {incr pn 1} { 303 | # getSaT $gmsdir/$EQnameX $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the X direction 304 | # lappend Sa_listX $Sa 305 | # getSaT $gmsdir/$EQnameY $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the Y direction 306 | # lappend Sa_listY $Sa 307 | # } 308 | # 309 | # # Get the geometric mean of these 310 | # set IMX [expr pow([lindex $Sa_listX 0]*[lindex $Sa_listX 1]*[lindex $Sa_listX 2]*[lindex $Sa_listX 3]*[lindex $Sa_listX 4],1/5.0)]; 311 | # set IMY [expr pow([lindex $Sa_listY 0]*[lindex $Sa_listY 1]*[lindex $Sa_listY 2]*[lindex $Sa_listY 3]*[lindex $Sa_listY 4],1/5.0)]; 312 | # 313 | # # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 314 | # # "current" IM. This way, the same scale factor will be applied to both 315 | # set IMgeomean [expr pow($IMX*$IMY,0.5)]; 316 | } elseif {$IMtype==7} { 317 | # # IM is Sa,gm at a specified periods 318 | # set T1m [lindex $Tinfo 0]; # It will be the first entry in the Tinfo list 319 | # set T2m [lindex $Tinfo 1]; # It will be the second entry in the Tinfo list 320 | # 321 | # # Period list [T2m, min[(T2m+T1m)/2, 1.5T2m], T1m, 1.5T1m, 2T1m] 322 | # set p_list {}; 323 | # lappend p_list $T2m; 324 | # if {[expr 0.5*($T2m+$T1m)]<[expr 1.5*$T2m]} { 325 | # lappend p_list [expr 0.5*($T2m+$T1m)]; 326 | # } else { 327 | # lappend p_list [expr 1.5*$T2m]; 328 | # } 329 | # lappend p_list $T1m; 330 | # lappend p_list [expr 1.5*$T1m]; 331 | # lappend p_list [expr 2.0*$T1m]; 332 | # 333 | # # Get Spectral values at each 334 | # set Sa_listX {}; 335 | # set Sa_listY {}; 336 | # for {set pn 1} {$pn<=[llength $p_list]} {incr pn 1} { 337 | # getSaT $gmsdir/$EQnameX $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the X direction 338 | # lappend Sa_listX $Sa 339 | # getSaT $gmsdir/$EQnameY $dt [lindex $p_list $pn-1] $xi; # Get the Sa(T1,5%) of the record in the Y direction 340 | # lappend Sa_listY $Sa 341 | # } 342 | # 343 | # # Get the geometric mean of these 344 | # set SagmX [expr pow([lindex $Sa_listX 0]*[lindex $Sa_listX 1]*[lindex $Sa_listX 2]*[lindex $Sa_listX 3]*[lindex $Sa_listX 4],1/5.0)]; 345 | # set SagmY [expr pow([lindex $Sa_listY 0]*[lindex $Sa_listY 1]*[lindex $Sa_listY 2]*[lindex $Sa_listY 3]*[lindex $Sa_listY 4],1/5.0)]; 346 | # 347 | # # Get the time between 5 and 75% of Arias Intensity 348 | # Arias $gmsdir/$EQnameX $dt 0.05 0.75; 349 | # set t12X $t12; 350 | # Arias $gmsdir/$EQnameY $dt 0.05 0.75; 351 | # set t12Y $t12; 352 | # 353 | # # Get the IMs in the two directions 354 | # set IMX [expr $SagmX*pow($t12X,0.2)]; 355 | # set IMY [expr $SagmY*pow($t12Y,0.2)]; 356 | # 357 | # # Now we have the IMX and IMY. In IDA we will use the geomen of these to get the 358 | # # "current" IM. This way, the same scale factor will be applied to both 359 | # set IMgeomean [expr pow($IMX*$IMY,0.5)]; 360 | } 361 | 362 | # Set up the initial indices for HTF 363 | set j 1; 364 | set IM {}; # Initialise the list of IM used for printing 365 | set IMlist {}; # This is just a list that will be used in filling 366 | set hFlag 1; # Hunting flag (1 for when we're hunting) 367 | set tFlag 0; # Tracing flag (0 at first) 368 | set fFlag 0; # Filling flag (0 at first) 369 | 370 | while {$j<=$maxRuns} { 371 | # As long as the hunting flag is 1, meaning we havent reached a collapse 372 | if {$hFlag==1} { 373 | # Determine the intensity to run at during the hunting (Andiamo a cacciare!) 374 | if {$j==1} { 375 | lappend IM $firstInt; 376 | } else { 377 | lappend IM [expr [lindex $IM $j-2]+($j-1)*$incrStep]; # Ramp it up! 378 | } 379 | # Determine the scale factor that needs to be applied to the record 380 | set sf [expr [lindex $IM $j-1]/$IMrecord*$g]; 381 | set run "Record${i}_Run${j}"; # This is a tag that outputs will be labelled with 382 | set log [open $outsdir/log_IDA_${run}.txt "w"]; 383 | 384 | # The hunting intensity has been determined, now we can analyse 385 | source $mdlfile 386 | if {$pflag>0} {puts [format "Record:$i Run:$j IM:%.3f" [lindex $IM $j-1] ]} 387 | runNRHA1D $Dt $dur $dCap $tNode $bNode $log $pflag 388 | close $log 389 | incr j 1; 390 | 391 | # Check the hunted run for collapse 392 | if {$cIndex>0} { 393 | set hFlag 0; # Stop hunting 394 | set tFlag 1; # Start tracing 395 | incr j -1; # Reduce by 1 because j was increased at end of hunting and we want to redo that point 396 | set jhunt $j; # The value of j we hunted to 397 | if {$jhunt==2} {puts $error_log "WARNING: ${run} - Collapsed achieved on first increment, reduce increment..."}; 398 | } else { 399 | puts $IM_log [format "%.3f" [lindex $IM $j-2]]; # j-2 because we've already increased j, but need to know if collapsed 400 | } 401 | wipe; 402 | }; # Close hunting 403 | 404 | # When the first collapse is reached, we start tracing between last convergence and the first collapse 405 | if {$tFlag==1} { 406 | # The first phase is to trace the last DeltaIM to get within the resolution 407 | if {$j==$jhunt} { 408 | set firstC [lindex $IM $j-1]; # This is the IM of the hunting collapse 409 | set IM [lreplace $IM $j-1 $j-1]; # Remove that value of IM from the array (it's already been appended) 410 | } 411 | set diff [expr $firstC-[lindex $IM $j-2]]; # Determine the difference between the hunting's noncollapse and collapse IM 412 | set inctr [expr 0.20*$diff]; # Take 0.2 of the difference 413 | if {$inctr<0.05} {set inctr 0.025}; # Place a lower threshold on the increment so it doesnt start tracing too fine 414 | set IMtr [expr [lindex $IM $j-2]+$inctr]; # Calculate new tracing IM, which is previous noncollapse plus increment 415 | lappend IM $IMtr 416 | set sf [expr [lindex $IM $j-1]/$IMrecord*$g]; 417 | puts $IM_log [format "%.3f" $IMtr]; 418 | set run "Record${i}_Run${j}"; # This is a tag that outputs will be labelled with 419 | set log [open $outsdir/log_IDA_${run}.txt "w"]; 420 | 421 | # The trace intensity has been determined, now we can analyse 422 | source $mdlfile 423 | if {$pflag>0} {puts [format "Record:$i Run:$j IM:%.3f" $IMtr ]} 424 | runNRHA1D $Dt $dur $dCap $tNode $bNode $log $pflag 425 | 426 | close $log 427 | 428 | if {$cIndex>0} { 429 | # Not sure if this is the best way, to just trace back up to collapse again 430 | set tFlag 0; # Stop tracing 431 | set fFlag 1; # Start filling 432 | set jtrace $j; # The value of j we traced to 433 | set IMlist $IM; # Get the list of IMs 434 | if {$j==$jhunt} { 435 | # This means the first trace collapsed, should reduce the increment 436 | puts $error_log "WARNING: ${run} - First trace for collapse resulted in collapse..." 437 | } 438 | } 439 | incr j 1; 440 | wipe; 441 | }; # Close the tracing 442 | 443 | # When the required resolution is reached, we start filling 444 | if {$fFlag==1} { 445 | # Reorder the list so we can account for filled runs 446 | set IMlist [lsort -real $IMlist]; 447 | 448 | # Determine the biggest gap in IM for the hunted runs 449 | set gap 0.0; 450 | # We go to the end of the list minus 1 because, if not we would be filling between a noncollapsing and a collapsing run, 451 | # for which we are not sure if that filling run would be a non collapse - In short, does away with collapsing fills 452 | for {set ii 1} {$ii<[expr [llength $IMlist]-1]} {incr ii 1} { 453 | set temp [expr [lindex $IMlist $ii]-[lindex $IMlist $ii-1]]; # Find the running gap of hunted runs 454 | if {$temp>$gap} { 455 | set gap $temp 456 | set IMfil [expr [lindex $IMlist $ii-1]+$gap/2]; # Determine new filling IM 457 | }; # Update to maximum gap 458 | } 459 | 460 | lappend IM $IMfil 461 | lappend IMlist $IMfil 462 | set sf [expr [lindex $IM $j-1]/$IMrecord*$g]; 463 | puts $IM_log [format "%.3f" $IMfil]; 464 | set run "Record${i}_Run${j}"; # This is a tag that outputs will be labelled with 465 | set log [open $outsdir/log_IDA_${run}.txt "w"]; 466 | 467 | # The trace intensity has been determined, now we can analyse 468 | source $mdlfile 469 | if {$pflag>0} {puts [format "Record:$i Run:$j IM:%.3f" $IMfil ]} 470 | runNRHA1D $Dt $dur $dCap $tNode $bNode $log $pflag 471 | 472 | close $log 473 | incr j 1; 474 | wipe; 475 | }; # Close the filling 476 | 477 | # Wrap it up and finish 478 | if {$j==$maxRuns && $hFlag==1} { 479 | puts $error_log "WARNING: ${run} - Collapse not achieved, increase increment or number of runs..." 480 | }; 481 | if {$j==$maxRuns && $fFlag==0} { 482 | puts $error_log "WARNING: ${run} - No filling, algorithm still tracing for collapse (reduce increment & increase runs)..." 483 | }; 484 | wipe; 485 | }; # Close the maxRuns while loop 486 | close $IM_log 487 | }; # Close the ground motion loop 488 | 489 | puts "^^^^^^^^ FINISHED IDA HTF ^^^^^^^^" 490 | puts $error_log "^^^^^^^^ FINISHED IDA HTF ^^^^^^^^" 491 | close $error_log 492 | }; 493 | -------------------------------------------------------------------------------- /LP_SteelSection.tcl: -------------------------------------------------------------------------------- 1 | # Procedure to create a lumped hinge of a steel section 2 | # Gerard O'Reilly 3 | # IUSS Pavia 4 | # Date Created: February 2016 5 | # Last Updated: February 2016 6 | # 7 | # This procedure requires the Units.tcl file to be loaded 8 | # 9 | # /\ y 10 | # | 11 | # ------------------------ 12 | # | 13 | # | 14 | # | 15 | # Z <--------------- 16 | # | 17 | # | 18 | # | 19 | # ------------------------ 20 | # 21 | # 22 | # 23 | 24 | proc LP_SteelSection {SecLabel ET iNode jNode fy Es bs Lpr muphi GT {IOflag 0}} { 25 | # -------------------------------------------------- 26 | # Description of Parameters 27 | # -------------------------------------------------- 28 | # SecLabel: Cross section chosen from selected database (e.g. IPE100A) 29 | # ET: Unique tag for the element 30 | # iNode: ith Node of the element 31 | # jNode: jth Node of the element 32 | # fy: Yield stress 33 | # Es: Elastic modulus 34 | # bs: Steel Hardening ratio 35 | # Lpr: Plastic hinge length ratio expressed as a fraction of section height h 36 | # muphi: Maximum curvature ductility 37 | # GT: Transfer tag 38 | # IOflag: Option to print element details (Options: 0 for none, 1 for element details, 2 for complete element and section details) 39 | # --------------------------------------------------- 40 | upvar 1 Sections Sections 41 | set mm 0.001; # 1mm in m 42 | set cm 0.01; # 1cm in m 43 | set found 0 44 | 45 | foreach {section prop} [array get Sections $SecLabel] { 46 | set propList [split $prop] 47 | set Wt [expr [lindex $propList 1]] 48 | set h [expr [lindex $propList 2]*$mm] 49 | set b [expr [lindex $propList 3]*$mm] 50 | set A [expr [lindex $propList 20]*$cm*$cm] 51 | set Izz [expr [lindex $propList 8]*$cm*$cm*$cm*$cm] 52 | set Iyy [expr [lindex $propList 9]*$cm*$cm*$cm*$cm] 53 | set Wpzz [expr [lindex $propList 14]*$cm*$cm*$cm] 54 | set Wpyy [expr [lindex $propList 15]*$cm*$cm*$cm] 55 | set J [expr [lindex $propList 19]*$cm*$cm*$cm*$cm] 56 | set found 1 57 | } 58 | 59 | if {$found == 0} {puts "LP_SteelSection - Could not find section: $SecLabel with tag $ET"} 60 | 61 | # Compute some properties 62 | set Mpzz [expr $Wpzz*$fy]; 63 | set Mpyy [expr $Wpyy*$fy]; 64 | set EIzz [expr $Es*$Izz]; 65 | set EIyy [expr $Es*$Iyy]; 66 | set Gs [expr $Es/2.6]; # Shear modulus (nu=0.3) 67 | set Lp [expr $Lpr*$h]; # plastic hinge length 68 | 69 | # Find the maximum curvature 70 | set phiyzz [expr $Mpzz/$EIzz]; 71 | set phiyyy [expr $Mpyy/$EIyy]; 72 | set phizz_lim [expr $phiyzz*$muphi]; 73 | set phiyy_lim [expr $phiyyy*$muphi]; 74 | 75 | if {$IOflag == 1 || $IOflag == 2 } { 76 | puts "LP_SteelSection $ET with section:$SecLabel found. i:$iNode - j:$jNode" 77 | } 78 | if {$IOflag == 2 } { 79 | puts [format "Mpzz:%.0fkNm Mpyy:%.0fkNm h:%.3fm b:%.3fm Lp:%0.3fm A:%.4fm2 EIzz:%.0fkNm2 EIyy:%.0fkNm2" $Mpzz $Mpyy $h $b $Lp $A $EIzz $EIyy] 80 | } 81 | 82 | # Create the Material Model 83 | set hTagzz 101${ET}; # Basic zz material tag 84 | set hTagyy 102${ET}; # Basic yy material tag 85 | set hTagzzL 103${ET}; # MaxMin zz material tag 86 | set hTagyyL 104${ET}; # MaxMin yy material tag 87 | set intTag 105${ET}; # Internal elastic section tag 88 | set fTag 106${ET}; # Section tag for Mzz 89 | set aTag 107${ET}; # Material tag for P 90 | set phTag 108${ET}; # Plastic hinge tag with Myy and Mzz 91 | 92 | # Create the basic bilinear material 93 | uniaxialMaterial Steel02 $hTagzz $Mpzz $EIzz $bs 94 | uniaxialMaterial Steel02 $hTagyy $Mpyy $EIyy $bs 95 | uniaxialMaterial Elastic $aTag [expr $A*$Es] 96 | 97 | # Apply the MaxMin curvature to the bilinear one 98 | uniaxialMaterial MinMax $hTagzzL $hTagzz -min -$phizz_lim -max $phizz_lim 99 | uniaxialMaterial MinMax $hTagyyL $hTagyy -min -$phiyy_lim -max $phiyy_lim 100 | 101 | # Create the internal elastic element behaviour 102 | section Elastic $intTag $Es $A $Izz $Iyy $Gs $J 103 | 104 | # Create the plastic hinge section 105 | section Uniaxial $fTag $hTagzzL Mz 106 | section Aggregator $phTag $hTagyyL My $aTag P -section $fTag; # Aggregate Myy and P behaviour to Mzz behaviour 107 | 108 | element forceBeamColumn $ET $iNode $jNode $GT "HingeRadau $phTag $Lp $phTag $Lp $intTag" 109 | # element elasticBeamColumn $ET $iNode $jNode $A $Es $Gs $J $Iyy $Izz $GT 110 | 111 | } 112 | 113 | # ################################################## 114 | # ###### LIST OF AVAILABLE SECTIONS ################ 115 | # ################################################## 116 | 117 | # Sections List 118 | # Wt(kg/m) h(mm) b(mm) tw(mm) tf(mm) r(mm) d(mm) Izz(cm4) Iyy(cm4) izz(cm) iyy(cm) Wezz(cm3) Weyy(cm3) Wpzz(cm3) Wpyy(cm3) u(-) x(-) H(dm6) J(cm4) A(cm2) 119 | array set Sections { 120 | HE100AA " 12.2 91 100 4.2 5.5 12 56 237 92.1 3.89 2.43 52 18.4 58.4 28.4 0.827 12.5 0.00168 2.33 15.6 " 121 | HE100A " 16.7 96 100 5 8 12 56 349 134 4.06 2.51 72.8 26.8 83 41.1 0.835 9.99 0.00259 5.28 21.2 " 122 | HE100B " 20.4 100 100 6 10 12 56 450 167 4.16 2.53 89.9 33.5 104 51.4 0.84 8.51 0.00339 9.33 26 " 123 | HE120AA " 14.6 109 120 4.2 5.5 12 74 413 159 4.72 2.93 75.8 26.5 84.1 40.6 0.829 15.7 0.00425 2.59 18.6 " 124 | HE120A " 19.9 114 120 5 8 12 74 606 231 4.89 3.02 106 38.5 119 58.9 0.837 12.3 0.00649 6.04 25.3 " 125 | HE120B " 26.7 120 120 6.5 11 12 74 864 318 5.04 3.06 144 52.9 165 81 0.842 9.64 0.00943 13.9 34 " 126 | HE120M " 52.1 140 126 12.5 21 12 74 2018 702.8 5.51 3.25 288.2 111.6 350.6 171.6 0 0 0 0 66.41 " 127 | HE140AA " 18.1 128 140 4.3 6 12 92 719 275 5.59 3.45 112 39.3 124 59.9 0.832 17.9 0.0102 3.43 23 " 128 | HE140A " 24.7 133 140 5.5 8.5 12 92 1033 389 5.73 3.52 155 55.6 173 84.8 0.837 13.9 0.0151 8.1 31.4 " 129 | HE140B " 33.7 140 140 7 12 12 92 1509 550 5.93 3.58 216 78.5 245 120 0.844 10.6 0.0225 20.2 43 " 130 | HE140M " 63.2 160 146 13 22 12 92 3291 1144 6.39 3.77 411.4 156.8 494 240.5 0 0 0 0 80.56 " 131 | HE160AA " 23.8 148 160 4.5 7 15 104 1283 479 6.5 3.97 173 59.8 190 91.4 0.839 17.3 0.0238 6.43 30.4 " 132 | HE160A " 30.4 152 160 6 9 15 104 1673 616 6.57 3.98 220 76.9 245 118 0.838 14.5 0.0315 12.1 38.8 " 133 | HE160B " 42.6 160 160 8 13 15 104 2492 889 6.78 4.05 312 111 354 170 0.844 11 0.048 31.3 54.3 " 134 | HE160M " 76.2 180 166 14 23 15 104 5098 1759 7.25 4.26 566 212 675 325 0.847 6.91 0.108 161 97.1 " 135 | HE180AA " 28.7 167 180 5 7.5 15 122 1967 730 7.34 4.47 ` 81.1 258 124 0.838 18.9 0.0464 8.31 36.5 " 136 | HE180A " 35.5 171 180 6 9.5 15 122 2510 925 7.45 4.52 294 103 325 156 0.841 15.9 0.0603 14.9 45.3 " 137 | HE180B " 51.2 180 180 8.5 14 15 122 3831 1363 7.66 4.57 426 151 481 231 0.845 11.7 0.0939 42.2 65.3 " 138 | HE180M " 88.9 200 186 14.5 24 15 122 7483 2580 8.13 4.77 748 277 883 425 0.847 7.47 0.2 201 113 " 139 | HE200AA " 34.6 186 200 5.5 8 18 134 2944 1068 8.17 4.92 317 107 347 163 0.84 18.9 0.0846 12.5 44.1 " 140 | HE200A " 42.3 190 200 6.5 10 18 134 3692 1336 8.28 4.98 389 134 429 204 0.842 16.3 0.108 21 53.8 " 141 | HE200B " 61.3 200 200 9 15 18 134 5696 2003 8.54 5.07 570 200 643 306 0.846 12 0.171 59.7 78.1 " 142 | HE200M " 103.1 220 206 15 25 18 134 10642 3651 9 5.27 967 354 1135 543 0.848 7.88 0.347 258 131 " 143 | HE220AA " 40.4 205 220 6 8.5 18 152 4170 1510 9 5.42 407 137 445 209 0.839 20.2 0.146 15.5 51.5 " 144 | HE220A " 50.5 210 220 7 11 18 152 5410 1955 9.17 5.51 515 178 568 271 0.842 16.9 0.194 28.6 64.3 " 145 | HE220B " 71.5 220 220 9.5 16 18 152 8091 2843 9.43 5.59 736 258 827 394 0.847 12.6 0.296 77 91 " 146 | HE220M " 117.3 240 226 15.5 26 18 152 14605 5012 9.89 5.79 1217 444 1419 679 0.848 8.37 0.574 313 149 " 147 | HE240AA " 47.4 224 240 6.5 9 21 164 5835 2077 9.83 5.87 521 173 571 264 0.84 20.1 0.24 22.1 60.4 " 148 | HE240A " 60.3 230 240 7.5 12 21 164 7763 2769 10.1 6 675 231 745 352 0.844 16.7 0.329 42.1 76.8 " 149 | HE240B " 83.2 240 240 10 17 21 164 11259 3923 10.3 6.08 938 327 1053 498 0.848 12.7 0.488 104 106 " 150 | HE240M " 156.7 270 248 18 32 21 164 24290 8153 11 6.39 1799 657 2117 1006 0.852 7.61 1.15 626 200 " 151 | HE260AA " 54.1 244 260 6.5 9.5 24 177 7981 2788 10.8 6.36 654 214 714 328 0.844 20.1 0.383 30.1 69 " 152 | HE260A " 68.2 250 260 7.5 12.5 24 177 10455 3668 11 6.5 836 282 920 430 0.848 17 0.517 54.2 86.8 " 153 | HE260B " 93 260 260 10 17.5 24 177 14919 5135 11.2 6.58 1148 395 1283 602 0.851 13.3 0.755 127 118 " 154 | HE260M " 172.4 290 268 18 32.5 24 177 31307 10449 11.9 6.9 2159 780 2524 1192 0.853 8.05 1.73 720 220 " 155 | HE280AA " 61.2 264 280 7 10 24 196 10558 3664 11.6 6.85 800 262 873 399 0.844 21.3 0.591 35.5 78 " 156 | HE280A " 76.4 270 280 8 13 24 196 13673 4763 11.9 7 1013 340 1112 518 0.848 18 0.786 63.5 97.3 " 157 | HE280B " 103.1 280 280 10.5 18 24 196 19270 6595 12.1 7.09 1376 471 1534 718 0.85 14.1 1.13 146 131 " 158 | HE280M " 188.5 310 288 18.5 33 24 196 39547 13163 12.8 7.4 2551 914 2966 1397 0.853 8.55 2.52 807 240 " 159 | HE300AA " 69.8 283 300 7.5 10.5 27 208 13804 4734 12.5 7.3 976 316 1065 482 0.844 21 0.879 47.8 88.9 " 160 | HE300A " 88.3 290 300 8.5 14 27 208 18263 6310 12.7 7.49 1260 421 1383 641 0.849 17.7 1.2 87.8 113 " 161 | HE300B " 117 300 300 11 19 27 208 25166 8563 13 7.58 1678 571 1869 870 0.851 14.1 1.69 189 149 " 162 | HE300C " 176.7 320 305 16 29 27 208 40951 13736 13.5 7.81 2559 901 2927 1374 0.854 10.1 2.91 604 225 " 163 | HE300M " 237.9 340 310 21 39 27 208 59201 19403 14 8 3482 1252 4078 1913 0.856 7.9 4.39 1411 303 " 164 | HE320AA " 74.2 301 300 8 11 27 225 16447 4959 13.2 7.24 1093 331 1196 506 0.854 21.8 1.04 53.6 94.6 " 165 | HE320A " 97.6 310 300 9 15.5 27 225 22929 6985 13.6 7.49 1479 466 1628 710 0.861 17.6 1.51 112 124 " 166 | HE320B " 126.7 320 300 11.5 20.5 27 225 30824 9239 13.8 7.57 1926 616 2149 939 0.863 14.2 2.07 230 161 " 167 | HE320M " 245 359 309 21 40 27 225 68135 19709 14.8 7.95 3796 1276 4435 1951 0.867 8.22 5.01 1506 312 " 168 | HE340AA " 78.9 320 300 8.5 11.5 27 243 19552 5185 13.9 7.18 1222 346 1341 529 0.861 22.6 1.23 60 101 " 169 | HE340A " 104.8 330 300 9.5 16.5 27 243 27693 7436 14.4 7.46 1678 496 1850 756 0.87 17.9 1.83 131 133 " 170 | HE340B " 134.2 340 300 12 21.5 27 243 36656 9690 14.6 7.53 2156 646 2408 986 0.871 14.5 2.46 263 171 " 171 | HE340M " 247.9 377 309 21 40 27 243 76372 19711 15.6 7.9 4052 1276 4718 1953 0.874 8.72 5.6 1512 316 " 172 | HE360AA " 83.7 339 300 9 12 27 261 23037 5410 14.7 7.12 1359 361 1495 553 0.866 23.3 1.45 67.1 107 " 173 | HE360A " 112.1 350 300 10 17.5 27 261 33090 7887 15.2 7.43 1891 526 2088 802 0.876 18.2 2.18 153 143 " 174 | HE360B " 141.8 360 300 12.5 22.5 27 261 43193 10141 15.5 7.49 2400 676 2683 1032 0.877 14.9 2.89 298 181 " 175 | HE360M " 250.3 395 308 21 40 27 261 84867 19522 16.3 7.83 4297 1268 4989 1942 0.88 9.22 6.15 1513 319 " 176 | HE400AA " 92.4 378 300 9.5 13 27 298 31252 5861 16.3 7.06 1654 391 1824 600 0.875 24.9 1.95 81.3 118 " 177 | HE400x107 " 107.2 384 297 10 16 27 298 37641 6998 16.6 7.16 1960 471 2165 721 0.882 21.7 2.37 126 136 " 178 | HE400A " 124.8 390 300 11 19 27 298 45069 8564 16.8 7.34 2311 571 2562 873 0.884 19 2.95 193 159 " 179 | HE400B " 155.3 400 300 13.5 24 27 298 57681 10819 17.1 7.4 2884 721 3232 1104 0.885 15.8 3.82 361 198 " 180 | HE400M " 255.7 432 307 21 40 27 298 104119 19335 17.9 7.7 4820 1260 5571 1934 0.887 10.3 7.43 1520 326 " 181 | HE450AA " 99.7 425 300 10 13.5 27 344 41888 6088 18.2 6.92 1971 406 2183 624 0.879 27.5 2.58 91.4 127 " 182 | HE450x124 " 123.9 435 300 10.2 18.5 27 344 55861 8338 18.8 7.27 2568 556 2836 850 0.892 22.2 3.62 178 158 " 183 | HE450A " 139.8 440 300 11.5 21 27 344 63722 9465 18.9 7.29 2896 631 3216 966 0.892 20 4.15 250 178 " 184 | HE450B " 171.1 450 300 14 26 27 344 79888 11721 19.1 7.33 3551 781 3982 1198 0.892 16.7 5.27 448 218 " 185 | HE450M " 263.3 478 307 21 40 27 344 131484 19339 19.8 7.59 5501 1260 6331 1939 0.892 11.6 9.28 1534 335 " 186 | HE500AA " 107.4 472 300 10.5 14 27 390 54643 6314 20 6.79 2315 421 2576 649 0.879 29.9 3.31 103 137 " 187 | HE500A " 155.1 490 300 12 23 27 390 86975 10367 21 7.24 3550 691 3949 1059 0.896 20.8 5.65 318 198 " 188 | HE500B " 187.3 500 300 14.5 28 27 390 107176 12624 21.2 7.27 4287 842 4815 1292 0.896 17.6 7.03 548 239 " 189 | HE500M " 270.3 524 306 21 40 27 390 161929 19155 21.7 7.46 6180 1252 7094 1932 0.894 12.9 11.2 1544 344 " 190 | HE550AA " 120 522 300 11.5 15 27 438 72871 6767 21.8 6.65 2792 451 3128 699 0.877 31.5 4.35 127 153 " 191 | HE550A " 166.2 540 300 12.5 24 27 438 111932 10819 23 7.15 4146 721 4622 1107 0.897 22.4 7.2 360 212 " 192 | HE550B " 199.4 550 300 15 29 27 438 136691 13077 23.2 7.17 4971 872 5591 1341 0.896 19 8.87 610 254 " 193 | HE550M " 278.2 572 306 21 40 27 438 197984 19158 23.6 7.35 6923 1252 7933 1937 0.894 14.4 13.6 1559 354 " 194 | HE600AA " 128.8 571 300 12 15.5 27 486 91872 6993 23.7 6.53 3218 466 3623 724 0.874 33.8 5.4 142 164 " 195 | HE600x137 " 137.4 575 300 11.8 17.5 27 486 101459 7893 24.1 6.72 3529 526 3952 814 0.882 31.4 6.13 177 175 " 196 | HE600x151 " 151.2 582 300 11.6 20.6 27 486.8 117096 9287 24.7 6.94 4024 619 4483 953 0.892 28 7.32 247 193 " 197 | HE600x175 " 175.2 588 300 13.6 23.9 27 486.2 136377 10778 24.7 6.95 4639 719 5202 1109 0.891 24.7 8.57 374 223 " 198 | HE600A " 177.8 590 300 13 25 27 486 141208 11271 25 7.05 4787 751 5350 1156 0.896 23.9 9 407 226 " 199 | HE600B " 211.9 600 300 15.5 30 27 486 171041 13530 25.2 7.08 5701 902 6425 1391 0.895 20.4 11 677 270 " 200 | HE600M " 285.5 620 305 21 40 27 486 237448 18975 25.6 7.22 7660 1244 8772 1930 0.893 15.8 16 1569 364 " 201 | HE650AA " 138 620 300 12.5 16 27 534 113944 7221 25.5 6.41 3676 481 4160 751 0.871 36 6.59 158 176 " 202 | HE650A " 189.7 640 300 13.5 26 27 534 175178 11724 26.9 6.97 5474 782 6136 1205 0.894 25.3 11 458 242 " 203 | HE650B " 224.8 650 300 16 31 27 534 210616 13984 27.1 6.99 6480 932 7320 1441 0.893 21.7 13.4 749 286 " 204 | HE650M " 293.4 668 305 21 40 27 534 281668 18979 27.5 7.13 8433 1245 9657 1936 0.891 17.3 18.7 1584 374 " 205 | HE700AA " 149.9 670 300 13 17 27 582 142721 7673 27.3 6.34 4260 512 4840 800 0.869 37.4 8.18 186 191 " 206 | HE700x166 " 166.2 678 300 12.5 21 27 582 168906 9471 28.2 6.69 4982 631 5598 978 0.884 32.7 10.2 274 212 " 207 | HE700A " 204.5 690 300 14.5 27 27 582 215301 12179 28.8 6.84 6241 812 7032 1257 0.889 26.5 13.4 522 260 " 208 | HE700B " 240.5 700 300 17 32 27 582 256888 14441 29 6.87 7340 963 8327 1495 0.889 22.9 16.1 839 306 " 209 | HE700M " 300.7 716 304 21 40 27 582 329278 18797 29.3 7.01 9198 1237 10539 1929 0.889 18.8 21.5 1595 383 " 210 | HE800AA " 171.5 770 300 14 18 30 674 208882 8134 30.9 6.1 5426 542 6225 857 0.862 40.4 11.5 243 218 " 211 | HE800A " 224.4 790 300 15 28 30 674 303443 12639 32.6 6.65 7682 843 8699 1312 0.884 29.6 18.3 609 286 " 212 | HE800B " 262.3 800 300 17.5 33 30 674 359084 14904 32.8 6.68 8977 994 10229 1553 0.884 25.6 21.9 959 334 " 213 | HE800M " 317.3 814 303 21 40 30 674 442598 18627 33.1 6.79 10875 1230 12488 1930 0.884 21.6 27.9 1657 404 " 214 | HE900AA " 198 870 300 15 20 30 770 301145 9041 34.6 5.99 6923 603 7999 958 0.857 42.6 16.3 322 252 " 215 | HE900A " 251.6 890 300 16 30 30 770 422075 13547 36.3 6.5 9485 903 10811 1414 0.878 31.8 25 749 321 " 216 | HE900B " 291.5 900 300 18.5 35 30 770 494065 15816 36.5 6.53 10979 1054 12584 1658 0.878 27.8 29.6 1150 371 " 217 | HE900M " 332.5 910 302 21 40 30 770 570434 18452 36.7 6.6 12537 1222 14442 1929 0.878 24.7 34.9 1683 424 " 218 | HE1000AA " 221.5 970 300 16 21 30 868 406451 9501 38 5.8 8380 633 9777 1016 0.849 45.9 21.4 387 282 " 219 | HE1000A " 272.3 990 300 16.5 31 30 868 553846 14004 40 6.35 11189 934 12824 1470 0.873 35 32.2 835 347 " 220 | HE1000B " 314 1000 300 19 36 30 868 644748 16276 40.1 6.38 12895 1085 14855 1716 0.872 30.7 37.8 1267 400 " 221 | HE1000M " 348.7 1008 302 21 40 30 868 722299 18459 40.3 6.45 14331 1222 16568 1940 0.872 27.9 43.2 1713 444 " 222 | HD260x54.1 " 54.1409996575284 244 260 6.5 9.5 24 225 7980.54656127725 2788.04365463619 10.7569217918674 6.35801397269494 654.143160760431 214.464896510476 714.454797890607 327.734124209255 NA NA 0.382576334291667 30.3124817151925 68.9694263153228 " 223 | HD260x68.2 " 68.1532496575284 250 260 7.5 12.5 24 225 10454.9364362773 3667.55789991873 10.9736787558046 6.49950127831491 836.39491490218 282.119838455287 919.771047890607 430.168845525021 NA NA 0.516352213541667 52.3747091810123 86.8194263153228 " 224 | HD260x93 " 92.9788746575284 260 260 10 17.5 24 225 14919.4077904439 5134.51208819176 11.2232458887632 6.58403719925767 1147.64675311107 394.962468322443 1282.91167289061 602.247836314436 NA NA 0.753651098958333 123.778273885198 118.444426315323 " 225 | HD260x114 " 114.397599657528 268 262 12.5 21.5 24 225 18912.1519279439 6455.85144679812 11.3919179000805 6.6558440338997 1411.35462148835 492.813087541841 1599.71179789061 752.452952103851 NA NA 0.978959982780708 222.360545351546 145.729426315323 " 226 | HD260x142 " 141.511499657528 278 265 15.5 26.5 24 225 24331.4710612773 8235.72872629908 11.6177799166141 6.7591172195441 1750.46554397678 621.564432173516 2015.30479789061 950.47786605115 NA NA 1.29971530425065 406.751182596291 180.269426315323 " 227 | HD260x172 " 172.420874657528 290 268 18 32.5 24 225 31306.8411237773 10448.5790613054 11.9387685013023 6.89713176656367 2159.09249129498 779.74470606757 2523.61167289061 1192.46560684057 NA NA 1.72834711129167 719.01521059163 219.644426315323 " 228 | HD320x74.2 " 74.2435648009344 301 300 8 11 27 279 16447.3300212079 4959.08232148169 13.1872161159241 7.24112557515862 1092.84584858524 330.605488098779 1196.20413249747 505.741147621524 NA NA 1.0407375 55.8705326155747 94.5777895553304 " 229 | HD320x97.6 " 97.6287148009344 310 300 9 15.5 27 279 22928.5578462079 6985.23025438174 13.5779564689124 7.49439199947783 1479.26179652954 465.682016958783 1628.08938249747 709.739787099291 NA NA 1.512358734375 107.974827356644 124.36778955533 " 230 | HD320x127 " 126.654089800934 320 300 11.5 20.5 27 279 30823.5086587079 9238.81677148186 13.8218525569859 7.56716835513601 1926.46929116924 615.921118098791 2149.24000749747 939.096698293707 NA NA 2.068712015625 225.069261099348 161.34278955533 " 231 | HD320x158 " 157.975589800934 330 303 14.5 25.5 27 279 39644.4336587079 11842.425386112 14.0355987690438 7.67114451128414 2402.6929490126 781.678243307723 2718.41500749747 1193.54061672701 NA NA 2.74051017059498 420.462717290815 201.24278955533 " 232 | HD320x198 " 198.069464800934 343 306 18 32 27 279 51895.6966712079 15310.6885910822 14.3414062271328 7.7897483159303 3025.98814409376 1000.69860072432 3479.11863249747 1530.18104239919 NA NA 3.695079562848 805.332579125952 252.31778955533 " 233 | HD320x245 " 244.957514800934 359 309 21 40 27 279 68134.8172462079 19709.3145662223 14.7765821446726 7.94740243814112 3795.81154574975 1275.683790694 4435.02738249747 1950.72446083249 NA NA 5.003864651115 1500.58888544144 312.04778955533 " 234 | HD360x134 " 133.929961975597 356 369 11.2 18 15 320 41508.7422339748 15078.4684950916 15.5978860240477 9.40101124287204 2331.95181089746 817.261165045614 2561.97153967663 1237.21291805061 NA NA 4.305006013347 168.791960049591 170.611416529423 " 235 | HD360x147 " 147.470583975597 360 370 12.3 19.8 15 320.4 46288.6178339425 16722.3538453753 15.6970931284504 9.43475947141282 2571.58987966347 903.911018668936 2838.26706000722 1369.26327495973 NA NA 4.836461548149 223.714340873691 187.860616529423 " 236 | HD360x162 " 161.945983975597 364 371 13.3 21.8 15 320.4 51539.1997006092 18561.913198756 15.8058760672583 9.48551916383304 2831.82415937413 1000.6422209572 3139.27106000722 1516.3873057862 NA NA 5.43159013847496 295.509669896201 206.300616529423 " 237 | HD360x179 " 179.180501975597 368 373 15 23.9 15 320.2 57440.4238803387 20682.9865498314 15.8634729345837 9.51910415308478 3121.76216740971 1109.00732170678 3482.30327384193 1682.6984871912 NA NA 6.1190288371948 393.83465221045 228.255416529423 " 238 | HD360x196 " 196.502625975597 372 374 16.4 26.2 15 319.6 63632.3813950737 22858.0924845777 15.9437228893698 9.55587899986327 3421.09577392869 1222.35788687581 3837.43300734604 1856.09639034826 NA NA 6.8289641700627 517.105142867096 250.321816529423 " 239 | HD400x187 " 186.524961975597 368 391 15 24 15 320 60183.4339673081 23922.0143864981 15.9149335788162 10.0337949581912 3270.83880257109 1223.63244943724 3642.35153967663 1854.6676871912 NA NA 7.073708472256 414.593021415756 237.611416529423 " 240 | HD400x216 " 216.266099975597 375 394 17.3 27.7 15 319.6 71138.463673927 28253.6344874986 16.069147790031 10.1269290050629 3794.05139594277 1434.19464403546 4262.35314334604 2176.24967109209 NA NA 8.51464919089567 637.340535221729 275.498216529423 " 241 | HD400x237 " 236.218915975597 380 395 18.9 30.2 15 319.6 78777.4921249403 31041.6680716544 16.1800018811283 10.1566390268036 4146.18379604949 1571.73002894453 4685.61226734604 2386.99089241444 NA NA 9.48913441249537 825.495348968716 300.915816529423 " 242 | HD400x262 " 262.663995975597 387 398 21.1 33.3 15 320.4 89406.0523977025 35018.8254256585 16.3462454055496 10.2302286968505 4620.46782417067 1759.73997113862 5259.53299200722 2675.77269023267 NA NA 10.9434013588444 1115.58615631788 334.603816529423 " 243 | HD400x287 " 287.525259975597 393 399 22.6 36.6 15 319.8 99706.1640254509 38782.9916139245 16.4990078814884 10.2900498602297 5074.10503946315 1944.009604708 5812.72501151134 2957.04318747238 NA NA 12.3044986079298 1463.76940182828 366.274216529423 " 244 | HD400x314 " 313.335588975597 399 401 24.9 39.6 15 319.8 110232.234321431 42603.7096258867 16.6182110771056 10.3312690977652 5525.42527926972 2124.87329804921 6374.00791451134 3236.48133787327 NA NA 13.7427361236006 1870.10911530938 399.153616529423 " 245 | HD400x347 " 346.937513975597 407 404 27.2 43.7 15 319.6 124944.509462647 48085.0614194222 16.8138738791885 10.4307199373275 6139.77933477381 2380.44858511991 7138.78603934605 3628.65666727415 NA NA 15.8469280579867 2510.18817414397 441.958616529423 " 246 | HD400x382 " 382.335361975597 416 406 29.8 48 15 320 141316.967833975 53615.887727772 17.0337296400076 10.4920256863403 6794.08499201802 2641.17673535823 7964.71953967663 4030.63213542297 NA NA 18.126073376768 3326.26045509608 487.051416529423 " 247 | HD400x421 " 421.618645975597 425 409 32.8 52.6 15 319.8 159581.144039438 60081.445387794 17.2371599205524 10.5765763733507 7509.70089597353 2937.96798962318 8880.45711351134 4489.31835590239 NA NA 20.7952320569945 4398.20878237059 537.093816529423 " 248 | HD400x463 " 462.788127975597 435 412 35.8 57.4 15 320.2 180161.824355125 67035.3363305093 17.4813556802727 10.6633980231 8283.30226920116 3254.14254031599 9877.68769184193 4978.3524423818 NA NA 23.8482365080972 5734.52403138414 589.539016529423 " 249 | HD400x509 " 509.425762975597 446 416 39.1 62.7 15 320.6 204527.740333086 75400.8883393622 17.7529482124606 10.7791026403473 9171.6475485689 3625.04270862318 11032.7211611725 5552.26276560916 NA NA 27.6321023909765 7513.10836634029 648.950016529423 " 250 | HD400x551 " 550.585981975597 455 418 42 67.6 15 319.8 226110.189411758 82494.7344274428 17.954872284793 10.8451451209807 9938.90942469264 3947.11647978195 12050.7769655113 6051.40609950592 NA NA 30.8733340714526 9410.10790804507 701.383416529423 " 251 | HD400x592 " 592.578771975597 465 421 45 72.3 15 320.4 250160.794575183 90171.6081779181 18.2041920007089 10.9294093208295 10759.6040677498 4283.68684930727 13138.2963780072 6574.45746198534 NA NA 34.6653145762094 11563.9477920692 754.877416529423 " 252 | HD400x634 " 634.251909975597 474 424 47.6 77.1 15 319.8 274171.159300451 98250.9662667745 18.4210686360224 11.027380282794 11568.4033460106 4634.47954088559 14222.0932615113 7116.75620813416 NA NA 38.5747307982611 14022.6795472757 807.964216529423 " 253 | HD400x677 " 677.777961975597 483 428 51.2 81.5 15 320 299469.536667308 106871.325512985 18.6237628109828 11.1255554995041 12400.3948930562 4993.98717350397 15346.0985396766 7680.05475110946 NA NA 42.9189188470937 16789.4408014898 863.411416529423 " 254 | HD400x744 " 744.226013975597 498 432 55.6 88.9 15 320.2 342121.142257779 119931.81591574 18.9964461923428 11.2473344604167 13739.804909951 5552.39888498796 17166.8182898419 8548.91663074593 NA NA 49.9805140689147 21842.6794746048 948.058616529423 " 255 | HD400x818 " 818.999461975597 514 437 60.5 97 15 320 392190.972433975 135528.893923027 19.3883931017698 11.397483368318 15260.3491219445 6202.69537405157 19255.2685396766 9561.30615979564 NA NA 58.6512015168979 28510.897196354 1043.31141652942 " 256 | HD400x900 " 902.116046975597 531 442 65.9 106 15 319 450203.934527855 153339.630159384 19.7928469915948 11.551299119485 16956.8336921979 6938.44480359204 21618.7714438502 10707.6422397586 NA NA 68.8873203904167 37351.5744833885 1149.19241652942 " 257 | HD400x990 " 990.992961975597 550 448 71.9 115 15 320 518907.056367308 173359.00489696 20.2742282508827 11.718519472153 18869.3475042658 7739.24129004284 24282.0955396766 11961.6393672174 NA NA 81.526566912 48207.9651585234 1262.41141652942 " 258 | HD400x1086 " 1087.8148619756 569 454 78 125 15 319 595723.264860355 196247.694337813 20.7338338923033 11.9003467486368 20939.3063219809 8645.27287831777 27211.4984688502 13375.6286492589 NA NA 96.079839762 62287.936035101 1385.75141652942 " 259 | IPE100A " 6.89 98 55 3.6 4.7 7 74.6 141 13.1 4.01 1.22 28.8 4.77 33 7.54 0.876 18.4 0.000286 0.727 8.78 " 260 | IPE100 " 8.1 100 55 4.1 5.7 7 74.6 171 15.9 4.07 1.24 34.2 5.79 39.4 9.15 0.878 15.9 0.000354 1.16 10.3 " 261 | IPE120A " 8.66 117.6 64 3.8 5.1 7 93.4 257 22.4 4.83 1.42 43.8 7 49.9 11 0.876 21.2 0.000708 0.996 11 " 262 | IPE120 " 10.4 120 64 4.4 6.3 7 93.4 318 27.7 4.9 1.45 53 8.65 60.7 13.6 0.879 18 0.000894 1.69 13.2 " 263 | IPE140A " 10.5 137.4 73 3.8 5.6 7 112.2 435 36.4 5.7 1.65 63.3 9.98 71.6 15.5 0.881 23.6 0.00158 1.34 13.4 " 264 | IPE140 " 12.9 140 73 4.7 6.9 7 112.2 541 44.9 5.74 1.65 77.3 12.3 88.3 19.2 0.88 19.7 0.00199 2.4 16.4 " 265 | IPE140R " 14.4 142 72 5.3 7.8 7 112.4 611 48.8 5.77 1.63 86.1 13.5 99.1 21.3 0.879 17.8 0.0022 3.36 18.4 " 266 | IPE160A " 12.7 157 82 4 5.9 9 127.2 689 54.4 6.53 1.83 87.8 13.3 99.1 20.7 0.882 24.7 0.00311 1.93 16.2 " 267 | IPE160 " 15.8 160 82 5 7.4 9 127.2 869 68.3 6.58 1.84 109 16.7 124 26.1 0.881 20.6 0.00398 3.54 20.1 " 268 | IPE160R " 17.7 162 81 5.6 8.5 9 127 989 75.7 6.62 1.83 122 18.7 140 29.4 0.881 18.4 0.00446 5.05 22.6 " 269 | IPE180A " 15.4 177 91 4.3 6.5 9 146 1063 81.9 7.37 2.05 120 18 135 28 0.883 26.1 0.00595 2.67 19.6 " 270 | IPE180 " 18.8 180 91 5.3 8 9 146 1317 101 7.42 2.05 146 22.2 166 34.6 0.881 21.9 0.00746 4.73 23.9 " 271 | IPE180O " 21.3 182 92 6 9 9 146 1505 117 7.45 2.08 165 25.5 189 39.9 0.88 19.8 0.00878 6.65 27.1 " 272 | IPE180R " 22.1 183 89 6.4 9.5 9 146 1554 112 7.44 2 170 25.2 195 39.7 0.878 18.8 0.00844 7.63 28.1 " 273 | IPE200A " 18.4 197 100 4.5 7 12 159 1591 117 8.23 2.23 162 23.4 182 36.5 0.886 25.6 0.0106 4.14 23.5 " 274 | IPE200 " 22.4 200 100 5.6 8.5 12 159 1943 142 8.26 2.24 194 28.5 221 44.6 0.882 22 0.0131 6.92 28.5 " 275 | IPE200O " 25.1 202 102 6.2 9.5 12 159 2211 169 8.32 2.3 219 33.1 249 51.9 0.883 20.1 0.0156 9.36 32 " 276 | IPE200R " 26.6 204 98 6.6 10.5 12 159 2363 166 8.35 2.21 232 33.8 265 53.2 0.883 18.7 0.0155 11.7 33.9 " 277 | IPE220A " 22.2 217 110 5 7.7 12 177.6 2317 171 9.05 2.46 214 31.2 240 48.5 0.884 26.4 0.0188 5.68 28.3 " 278 | IPE220 " 26.2 220 110 5.9 9.2 12 177.6 2772 205 9.11 2.48 252 37.3 285 58.1 0.884 22.9 0.0228 9.03 33.4 " 279 | IPE220O " 29.4 222 112 6.6 10.2 12 177.6 3134 240 9.16 2.53 282 42.8 321 66.9 0.883 21 0.0269 12.2 37.4 " 280 | IPE220R " 31.6 225 108 6.7 11.8 12 177.4 3474 249 9.29 2.49 309 46.1 352 71.8 0.889 18.9 0.0283 16.4 40.2 " 281 | IPE240A " 26.2 237 120 5.2 8.3 15 190.4 3290 240 9.94 2.68 278 40 312 62.4 0.887 25.6 0.0314 8.5 33.3 " 282 | IPE240 " 30.7 240 120 6.2 9.8 15 190.4 3892 284 9.97 2.69 324 47.3 367 73.9 0.886 22.6 0.0376 13 39.1 " 283 | IPE240O " 34.3 242 122 7 10.8 15 190.4 4369 329 10 2.74 361 53.9 410 84.4 0.884 20.9 0.0439 17.1 43.7 " 284 | IPE240R " 37.3 245 118 7.5 12.3 15 190.4 4823 339 10.1 2.67 394 57.4 449 90.1 0.886 19 0.0459 22.8 47.5 " 285 | IPE270A " 30.7 267 135 5.5 8.7 15 219.6 4917 358 11.2 3.02 368 53 412 82.3 0.886 28.3 0.0597 10.4 39.1 " 286 | IPE270 " 36.1 270 135 6.6 10.2 15 219.6 5790 420 11.2 3.02 429 62.2 484 97 0.884 25 0.0708 15.9 45.9 " 287 | IPE270O " 42.3 274 136 7.5 12.2 15 219.6 6947 513 11.4 3.09 507 75.5 575 118 0.886 21.7 0.088 25 53.8 " 288 | IPE270R " 44 276 133 7.7 13.1 15 219.8 7312 516 11.4 3.03 530 77.6 602 121 0.888 20.6 0.0891 29.1 56 " 289 | IPE300A " 36.5 297 150 6.1 9.2 15 248.6 7173 519 12.4 3.34 483 69.2 542 107 0.883 30.4 0.107 13.3 46.5 " 290 | IPE300 " 42.2 300 150 7.1 10.7 15 248.6 8356 604 12.5 3.35 557 80.5 628 125 0.882 26.9 0.126 19.9 53.8 " 291 | IPE300O " 49.3 304 152 8 12.7 15 248.6 9994 746 12.6 3.45 658 98.1 744 153 0.884 23.5 0.158 31 62.8 " 292 | IPE300R " 51.7 306 147 8.5 13.7 15 248.6 10498 728 12.6 3.32 686 99 780 155 0.884 22.1 0.155 37 65.9 " 293 | IPE330A " 43 327 160 6.5 10 18 271 10231 685 13.7 3.54 626 85.6 702 133 0.884 30 0.172 19.6 54.7 " 294 | IPE330 " 49.1 330 160 7.5 11.5 18 271 11767 788 13.7 3.55 713 98.5 804 154 0.883 26.9 0.2 28.1 62.6 " 295 | IPE330O " 57 334 162 8.5 13.5 18 271 13910 960 13.8 3.64 833 119 943 185 0.884 23.8 0.247 42.2 72.6 " 296 | IPE330R " 60.3 336 158 9.2 14.5 18 271 14688 958 13.8 3.53 874 121 995 190 0.882 22.4 0.247 50.6 76.8 " 297 | IPE360A " 50.2 357.6 170 6.6 11.5 18 298.6 14515 944 15.1 3.84 812 111 907 172 0.89 29.9 0.283 27.4 64 " 298 | IPE360 " 57.1 360 170 8 12.7 18 298.6 16266 1043 15 3.79 904 123 1019 191 0.884 27.4 0.315 37.4 72.7 " 299 | IPE360O " 66 364 172 9.2 14.7 18 298.6 19047 1251 15 3.86 1047 145 1186 227 0.883 24.3 0.382 55.7 84.1 " 300 | IPE360R " 70.3 366 168 9.9 16 18 298 20288 1270 15 3.76 1109 151 1262 236 0.883 22.6 0.389 68.7 89.6 " 301 | IPE400A " 57.4 397 180 7 12 21 331 20293 1171 16.7 4 1022 130 1144 202 0.888 31 0.434 36.2 73.1 " 302 | IPE400 " 66.3 400 180 8.6 13.5 21 331 23128 1318 16.5 3.95 1156 146 1307 229 0.882 28.1 0.492 51.3 84.5 " 303 | IPE400O " 75.7 404 182 9.7 15.5 21 331 26747 1564 16.7 4.03 1324 172 1502 269 0.882 25.2 0.59 73.3 96.4 " 304 | IPE400R " 81.5 407 178 10.6 17 21 331 28863 1606 16.7 3.93 1418 180 1618 284 0.881 23.4 0.611 92.5 104 " 305 | IPE400V " 84 408 182 10.6 17.5 21 331 30136 1766 16.8 4.06 1477 194 1681 304 0.884 22.9 0.673 99.6 107 " 306 | IPE450A " 67.2 447 190 7.6 13.1 21 378.8 29759 1502 18.7 4.19 1331 158 1494 246 0.886 33.1 0.707 47.1 85.5 " 307 | IPE450 " 77.6 450 190 9.4 14.6 21 378.8 33743 1676 18.5 4.12 1500 176 1702 276 0.878 30 0.794 66.7 98.8 " 308 | IPE450O " 92.4 456 192 11 17.6 21 378.8 40923 2085 18.6 4.21 1795 217 2046 341 0.879 25.8 1 109 118 " 309 | IPE450R " 95.2 458 188 11.3 18.6 21 378.8 42396 2070 18.7 4.13 1851 220 2115 346 0.88 24.7 0.999 123 121 " 310 | IPE450V " 103.6 460 194 12.4 19.6 21 378.8 46201 2397 18.7 4.26 2009 247 2301 389 0.878 23.5 1.16 149 132 " 311 | IPE500A " 79.4 497 200 8.4 14.5 21 426 42933 1939 20.6 4.38 1728 194 1946 302 0.883 34.2 1.13 64.3 101 " 312 | IPE500 " 90.7 500 200 10.2 16 21 426 48199 2142 20.4 4.31 1928 214 2194 336 0.876 31.2 1.25 89.1 116 " 313 | IPE500O " 107.3 506 202 12 19 21 426 57777 2622 20.6 4.38 2284 260 2613 409 0.876 27 1.55 143 137 " 314 | IPE500R " 111.4 508 198 12.6 20 21 426 59933 2600 20.5 4.28 2360 263 2709 415 0.875 25.8 1.55 162 142 " 315 | IPE500V " 128.8 514 204 14.2 23 21 426 70720 3271 20.8 4.47 2752 321 3168 507 0.876 22.9 1.97 242 164 " 316 | IPE550A " 92.1 547 210 9 15.7 24 467.6 59979 2432 22.6 4.55 2193 232 2475 362 0.882 34.5 1.72 89.3 117 " 317 | IPE550 " 105.5 550 210 11.1 17.2 24 467.6 67117 2668 22.3 4.45 2441 254 2787 401 0.873 31.5 1.89 123 134 " 318 | IPE550O " 122.5 556 212 12.7 20.2 24 467.6 79157 3224 22.5 4.55 2847 304 3263 481 0.874 27.7 2.31 187 156 " 319 | IPE550R " 133.7 560 210 14 22.2 24 467.6 86601 3447 22.5 4.5 3093 328 3562 521 0.873 25.6 2.49 242 170 " 320 | IPE550V " 158.6 566 216 17.1 25.2 24 467.6 102339 4265 22.5 4.6 3616 395 4205 632 0.868 22.5 3.12 372 202 " 321 | IPE600A " 107.6 597 220 9.8 17.5 24 514 82919 3116 24.6 4.77 2778 283 3141 442 0.881 34.7 2.62 122 137 " 322 | IPE600 " 122.4 600 220 12 19 24 514 92083 3387 24.3 4.66 3069 308 3512 486 0.872 32 2.86 165 156 " 323 | IPE600O " 154.5 610 224 15 24 24 514 118302 4521 24.5 4.79 3879 404 4471 640 0.872 26.2 3.88 316 197 " 324 | IPE600R " 144.4 608 218 14 23 24 514 110306 3993 24.5 4.66 3629 366 4175 580 0.873 27.3 3.42 271 184 " 325 | IPE600V " 183.5 618 228 18 28 24 514 141580 5570 24.6 4.88 4582 489 5324 780 0.87 22.7 4.85 506 234 " 326 | IPE750x137 " 137 753 263 11.5 17 17 685 159878 5166 30.3 5.44 4246 393 4865 614 0.863 47.3 7 135 175 " 327 | IPE750x147 " 147.2 753 265 13.2 17 17 685 166064 5289 29.8 5.31 4411 399 5110 631 0.854 45.5 7.16 157 187 " 328 | IPE750x161 " 160.5 758 266 13.8 19.3 17 685.4 186061 6073 30.2 5.45 4909 457 5666 720 0.859 41.5 8.28 208 204 " 329 | IPE750x174 " 173.7 762 267 14.4 21.6 17 684.8 205825 6873 30.5 5.57 5402 515 6218 810 0.864 37.9 9.42 270 221 " 330 | IPE750x185 " 185 766 267 14.9 23.6 17 684.8 222957 7510 30.8 5.65 5821 563 6691 884 0.867 35.3 10.3 334 236 " 331 | IPE750x197 " 196.9 770 268 15.6 25.4 17 685.2 240280 8175 31 5.71 6241 610 7174 959 0.869 33.1 11.3 406 251 " 332 | IPE750x210 " 210.1 775 268 16 28 17 685 262161 9011 31.3 5.8 6765 672 7762 1054 0.874 30.6 12.6 512 268 " 333 | IPE750x223 " 222.5 778 269 17 29.5 17 685 278205 9604 31.3 5.82 7152 714 8225 1122 0.873 29.1 13.5 601 283 " 334 | W40x12x359 " 534.5 1046 311.4 33 58.9 30 868.2 1130708 29965 40.8 6.63 21620 1925 25566 3126 0.866 19.5 73 5576 681 " 335 | W40x12x327 " 486.6 1036.1 308.5 30 54.1 30 867.9 1021420 26721 40.6 6.57 19717 1732 23200 2800 0.867 21.1 64.4 4299 620 " 336 | W40x12x294 " 436.9 1025.9 305.4 26.9 49 30 867.9 909906 23447 40.4 6.49 17739 1535 20762 2469 0.868 23.1 55.9 3185 557 " 337 | W40x12x264 " 392.7 1016 303 24.4 43.9 30 868.2 807689 20496 40.2 6.4 15899 1353 18539 2168 0.868 25.5 48.4 2330 500 " 338 | W40x12x235 " 349.4 1008.1 302 21.1 40 30 868.1 723131 18460 40.3 6.44 14346 1223 16592 1941 0.872 27.9 43.3 1718 445 " 339 | W40x12x211 " 314.3 1000 300 19.1 35.9 30 868.2 644212 16232 40.1 6.37 12884 1082 14851 1713 0.872 30.7 37.7 1264 400 " 340 | W40x12x183 " 272.3 990.1 300 16.5 31 30 868.1 553974 14004 40 6.35 11190 934 12826 1470 0.873 35 32.2 835 347 " 341 | W40x12x167 " 248.7 980.2 300 16.5 26 30 868.2 481306 11754 39 6.09 9821 784 11350 1245 0.861 39.9 26.8 582 317 " 342 | W40x12x149 " 222 970.3 300 16 21.1 30 868.1 407961 9546 38 5.81 8409 636 9807 1020 0.85 45.7 21.5 390 283 " 343 | W36x16.5x359 " 533.9 950 425 28.4 51.1 24.1 799.6 1031306 65561 38.9 9.82 21712 3085 24834 4796 0.887 19.7 132 4515 680 " 344 | W36x16.5x328 " 487.7 942 422 25.9 47 24.1 799.8 935460 59009 38.8 9.75 19861 2797 22616 4336 0.887 21.3 118 3499 621 " 345 | W36x16.5x300 " 447.2 933.2 423 24 42.7 24.1 799.6 847310 53978 38.6 9.73 18159 2552 20606 3951 0.887 23.3 107 2675 570 " 346 | W36x16.5x280 " 417.7 927.6 421.5 22.5 39.9 24.1 799.6 786069 49894 38.4 9.68 16948 2367 19181 3660 0.887 24.8 98.3 2191 532 " 347 | W36x16.5x260 " 387.2 921 420.4 21.3 36.6 24.1 799.6 718984 45405 38.2 9.59 15613 2160 17644 3338 0.885 26.7 88.8 1729 493 " 348 | W36x16.5x245 " 364.9 916.4 419.4 20.3 34.3 24.1 799.6 671766 42245 38 9.53 14661 2015 16546 3112 0.884 28.3 82.2 1442 465 " 349 | W36x16.5x230 " 342.5 911.9 418.3 19.3 32 24.1 799.7 625178 39099 37.9 9.47 13712 1869 15456 2886 0.883 30.2 75.7 1189 436 " 350 | W36x12x387 " 575.6 992.9 321.8 36.1 65 20 822.9 1101498 36457 38.8 7.05 22187 2266 26275 3654 0.871 16.8 78.5 7150 733 " 351 | W36x12x350 " 521 980.7 318.8 33 58.9 20 822.9 981806 32081 38.5 6.95 20023 2013 23598 3235 0.871 18.4 68.1 5355 664 " 352 | W36x12x318 " 473.3 970.8 315.7 29.9 54.1 20 822.6 884638 28576 38.3 6.88 18225 1810 21365 2895 0.872 19.9 60 4106 603 " 353 | W36x12x286 " 425.5 960.9 312.8 26.9 49 20 822.9 788179 25146 38.1 6.81 16405 1608 19131 2559 0.873 21.8 52.3 3039 542 " 354 | W36x12x256 " 381.8 950.7 310.3 24.4 43.9 20 822.9 697408 21975 37.9 6.72 14671 1416 17041 2248 0.872 24.1 45.2 2208 486 " 355 | W36x12x232 " 345.2 942.9 307.8 22.1 39.9 20 823.1 625712 19479 37.7 6.66 13272 1266 15352 2001 0.872 26.3 39.7 1656 440 " 356 | W36x12x210 " 313.2 931.9 309.4 21.1 34.5 20 822.9 549262 17106 37.1 6.55 11788 1106 13653 1753 0.866 29.7 34.4 1169 399 " 357 | W36x12x194 " 288.7 926.8 307.7 19.4 32 20 822.8 504448 15597 37 6.51 10886 1014 12568 1601 0.867 31.9 31.2 928 368 " 358 | W36x12x182 " 271.8 922.8 306.7 18.4 30 20 822.8 471583 14477 36.9 6.47 10221 944 11786 1489 0.866 33.8 28.8 774 346 " 359 | W36x12x170 " 253.7 918.7 305.6 17.3 27.9 20 822.9 437289 13315 36.8 6.42 9520 871 10962 1372 0.866 36.1 26.4 630 323 " 360 | W36x12x160 " 238.4 914.7 304.8 16.5 25.9 20 822.9 406506 12262 36.6 6.35 8888 805 10235 1266 0.864 38.5 24.2 518 304 " 361 | W36x12x150 " 224.5 910.6 304.2 15.9 23.9 20 822.8 377244 11248 36.3 6.27 8286 739 9552 1165 0.861 41.1 22.1 426 286 " 362 | W36x12x135 " 201.4 903 303.5 15.2 20.1 20 822.8 325422 9396 35.6 6.05 7208 619 8361 980 0.853 46.7 18.3 294 257 " 363 | W33x15.75x468 " 697.6 935 418 38.6 69.1 20 756.8 1253181 84513 37.6 9.75 26806 4044 31272 6342 0.886 14.2 158 10569 889 " 364 | W33x15.75x424 " 631.8 923 414 35.1 63 20 757 1119651 74810 37.3 9.64 24261 3614 28140 5652 0.886 15.5 138 7983 805 " 365 | W33x15.75x387 " 576.6 913 411 32 57.9 20 757.2 1011779 67229 37.1 9.57 22164 3271 25568 5101 0.887 16.7 123 6168 734 " 366 | W33x15.75x354 " 528.2 903 409 29.5 53.1 20 756.8 915086 60733 36.9 9.5 20268 2970 23276 4621 0.887 18.1 110 4777 673 " 367 | W33x15.75x318 " 473.8 893 406 26.4 48 20 757 813203 53672 36.7 9.43 18213 2644 20795 4101 0.888 19.8 95.8 3511 604 " 368 | W33x15.75x291 " 433.8 885 404 24.4 43.9 20 757.2 736273 48352 36.5 9.35 16639 2394 18929 3707 0.887 21.5 85.5 2705 553 " 369 | W33x15.75x263 " 392.2 877 401 22.1 39.9 20 757.2 659651 42960 36.3 9.27 15043 2143 17040 3311 0.888 23.5 75.3 2027 500 " 370 | W33x15.75x241 " 359.8 868.2 402.8 21.1 35.6 20 757 591682 38847 35.9 9.21 13630 1929 15425 2982 0.884 26 67.3 1510 458 " 371 | W33x15.75x221 " 330.1 861.8 401.4 19.7 32.4 20 757 535993 34982 35.7 9.12 12439 1743 14050 2692 0.883 28.3 60.2 1160 421 " 372 | W33x15.75x201 " 299.9 855.5 399.9 18.2 29.2 20 757.1 480950 31170 35.5 9.03 11244 1559 12675 2405 0.881 31.1 53.2 866 382 " 373 | W33x11.5x361 " 537.5 925.1 310.6 35.6 64 20 757.1 893922 32279 36.1 6.87 19326 2079 22907 3347 0.873 15.8 59.8 6546 685 " 374 | W33x11.5x332 " 494.2 915.2 308.1 33 58.9 20 757.4 811135 28965 35.9 6.78 17726 1880 20920 3020 0.873 17 53.1 5131 630 " 375 | W33x11.5x301 " 449.6 905 305.2 30 54.1 20 756.8 730340 25826 35.7 6.72 16140 1692 18946 2706 0.874 18.3 46.7 3945 573 " 376 | W33x11.5x271 " 403.4 895.1 302.1 26.9 49 20 757.1 649314 22657 35.5 6.64 14508 1500 16933 2386 0.875 20.1 40.5 2912 514 " 377 | W33x11.5x243 " 362 885.2 299.7 24.4 43.9 20 757.4 574465 19802 35.3 6.55 12979 1321 15083 2096 0.874 22.2 35 2117 461 " 378 | W33x11.5x219 " 327.2 877.1 297.2 22.1 39.9 20 757.3 514568 17537 35.1 6.49 11733 1180 13575 1865 0.874 24.3 30.7 1587 417 " 379 | W33x11.5x204 " 303.8 871.2 295.7 20.6 37.1 20 757 474112 16053 35 6.44 10884 1086 12557 1712 0.874 26 27.9 1281 387 " 380 | W33x11.5x187 " 279.2 865.1 294.1 19.1 34 20 757.1 431479 14468 34.8 6.38 9975 984 11480 1548 0.874 28.1 25 996 356 " 381 | W33x11.5x169 " 251.2 859 292.1 17 31 20 757 387599 12916 34.8 6.35 9024 884 10333 1385 0.876 30.7 22.1 746 320 " 382 | W33x11.5x152 " 227 850.6 293.8 16.1 26.8 20 757 340527 11361 34.3 6.27 8007 773 9178 1213 0.87 34.7 19.3 522 289 " 383 | W33x11.5x141 " 211.3 845.8 293 15.4 24.4 20 757 311550 10259 34 6.17 7367 700 8453 1099 0.867 37.5 17.3 413 269 " 384 | W33x11.5x130 " 194.3 840.5 292.4 14.7 21.7 20 757.1 280121 9068 33.6 6.05 6666 620 7666 975 0.863 41.3 15.2 312 248 " 385 | W33x11.5x118 " 176.4 834.6 291.6 14 18.8 20 757 246852 7792 33.1 5.89 5915 534 6831 842 0.856 46 13 227 225 " 386 | W30x15x357 " 531.6 833 393 31.5 56.9 20 679.2 776646 57764 33.9 9.24 18647 2940 21550 4579 0.888 15.3 87 5563 677 " 387 | W30x15x326 " 485.3 823 390 29 52.1 20 678.8 698762 51668 33.6 9.14 16981 2650 19532 4120 0.888 16.6 76.8 4280 618 " 388 | W30x15x292 " 434.4 813 387 25.9 47 20 679 618848 45517 33.4 9.07 15224 2352 17402 3646 0.889 18.2 66.8 3127 553 " 389 | W30x15x261 " 389.2 803 385 23.6 41.9 20 679.2 545191 39940 33.2 8.98 13579 2075 15451 3211 0.888 20.2 57.8 2248 496 " 390 | W30x15x235 " 350.3 795 382 21.1 38.1 20 678.8 486883 35461 33 8.91 12249 1857 13863 2865 0.889 22.1 50.8 1675 446 " 391 | W30x15x211 " 315.1 785.9 383.7 19.7 33.4 20 679.1 428459 31500 32.7 8.86 10904 1642 12312 2533 0.886 24.8 44.6 1182 401 " 392 | W30x15x191 " 284.8 779.3 382 18 30.1 20 679.1 382978 28006 32.5 8.79 9829 1466 11063 2259 0.885 27.3 39.3 875 363 " 393 | W30x15x173 " 258.3 773.2 380.6 16.6 27.1 20 679 342952 24935 32.3 8.7 8871 1310 9963 2017 0.884 30 34.7 651 329 " 394 | W30x10.5x295 " 439.5 835.2 281.7 32 57.9 20 679.4 597263 21783 32.7 6.24 14302 1547 16940 2489 0.874 15.7 32.9 4409 560 " 395 | W30x10.5x269 " 401.8 825 279.1 29.5 53.1 20 678.8 537837 19408 32.4 6.16 13038 1391 15372 2231 0.874 16.9 28.9 3414 512 " 396 | W30x10.5x246 " 367.3 817.1 276.6 26.9 49 20 679.1 488039 17410 32.3 6.1 11946 1259 14010 2011 0.875 18.2 25.7 2661 468 " 397 | W30x10.5x226 " 336.8 809 274.6 24.9 44.9 20 679.2 441866 15598 32.1 6.03 10924 1136 12763 1810 0.874 19.7 22.8 2065 429 " 398 | W30x10.5x207 " 308.2 801.1 272.7 23.1 40.9 20 679.3 398565 13907 31.9 5.95 9950 1020 11589 1622 0.873 21.4 20.1 1585 393 " 399 | W30x10.5x185 " 276.3 793 270.1 20.6 37.1 20 678.8 354594 12245 31.7 5.9 8943 907 10357 1435 0.875 23.5 17.5 1171 352 " 400 | W30x10.5x165 " 246 785.1 268.1 18.5 33 20 679.1 312043 10644 31.6 5.83 7949 794 9168 1252 0.874 26.1 15.1 833 313 " 401 | W30x10.5x148 " 221.2 779 266.2 16.5 30 20 679 279564 9465 31.5 5.8 7178 711 8236 1116 0.876 28.6 13.3 621 282 " 402 | W30x10.5x132 " 197.5 769.9 267.8 15.6 25.4 20 679.1 241257 8159 31 5.69 6267 609 7203 959 0.869 32.8 11.3 416 252 " 403 | W30x10.5x124 " 185.8 766.3 267.1 14.9 23.6 20 679.1 224413 7520 30.8 5.64 5857 563 6730 886 0.868 34.9 10.4 344 237 " 404 | W30x10.5x116 " 174.4 762.3 266.6 14.4 21.6 20 679.1 206964 6845 30.5 5.55 5430 513 6249 809 0.864 37.4 9.39 278 222 " 405 | W30x10.5x108 " 161.3 757.7 266.4 13.8 19.3 20 679.1 187291 6102 30.2 5.45 4944 458 5702 723 0.86 40.8 8.32 215 205 " 406 | W30x10.5x99 " 148 753.1 265.3 13.2 17 20 679.1 167443 5309 29.8 5.31 4447 400 5148 633 0.854 44.8 7.19 163 189 " 407 | W30x10.5x90 " 134.2 750 264.2 11.9 15.5 20 679 151668 4778 29.8 5.29 4044 362 4668 570 0.856 48.8 6.44 124 171 " 408 | W27x14x336 " 500.5 762 369 32 57.9 20 606.2 606231 48676 30.8 8.74 15912 2638 18493 4114 0.889 13.6 60.3 5459 638 " 409 | W27x14x307 " 458.2 752 367 29.5 53.1 20 605.8 546559 43898 30.6 8.67 14536 2392 16805 3723 0.889 14.7 53.6 4229 584 " 410 | W27x14x281 " 419.1 744 364 26.9 49 20 606 495392 39503 30.5 8.6 13317 2170 15312 3369 0.89 15.8 47.7 3299 534 " 411 | W27x14x258 " 384.7 736 362 24.9 45 20 606 448882 35672 30.3 8.53 12198 1971 13964 3054 0.89 17.1 42.6 2569 490 " 412 | W27x14x235 " 351 728 360 23.1 40.9 20 606.2 403405 31880 30 8.44 11083 1771 12638 2742 0.889 18.6 37.6 1953 447 " 413 | W27x14x217 " 324.4 722 359 21.1 38.1 20 605.8 371042 29439 30 8.44 10278 1640 11664 2532 0.89 19.9 34.4 1568 413 " 414 | W27x14x194 " 289.1 714 356 19 34 20 606 326247 25611 29.8 8.34 9139 1439 10322 2218 0.89 22.1 29.6 1121 368 " 415 | W27x14x178 " 265.7 706.4 357.8 18.4 30.2 20 606 292025 23096 29.4 8.26 8268 1291 9336 1992 0.885 24.4 26.4 834 338 " 416 | W27x14x161 " 241.1 700.8 356.1 16.8 27.4 20 606 262576 20653 29.2 8.2 7494 1160 8433 1787 0.885 26.7 23.4 627 307 " 417 | W27x14x146 " 218.9 695.4 354.7 15.4 24.8 20 605.8 235930 18470 29.1 8.14 6785 1041 7614 1603 0.884 29.2 20.8 471 279 " 418 | W27x10x302 " 451.5 771.9 273.8 35.1 63 20 605.9 516867 21802 30 6.16 13392 1593 15998 2568 0.876 13.1 27.4 5428 575 " 419 | W27x10x271 " 404 760 270.3 31.5 56.9 20 606.2 455305 18911 29.7 6.06 11982 1399 14212 2246 0.877 14.3 23.4 3980 515 " 420 | W27x10x247 " 368.1 749.8 267.7 28.9 52.1 20 605.6 408380 16801 29.5 5.99 10893 1255 12852 2008 0.877 15.5 20.4 3060 469 " 421 | W27x10x221 " 329.4 739.9 264.8 25.9 47 20 605.9 360863 14649 29.3 5.91 9754 1106 11434 1762 0.878 17 17.6 2239 420 " 422 | W27x10x201 " 300.9 732 262.8 23.9 42.9 20 606.2 325256 13060 29.1 5.84 8887 994 10373 1579 0.877 18.4 15.5 1719 383 " 423 | W27x10x182 " 271.9 723.9 260.2 21.6 39.1 20 605.7 290749 11543 29 5.77 8033 887 9328 1404 0.878 20 13.5 1295 346 " 424 | W27x10x159 " 237.2 714 257.8 19.1 34 20 606 249214 9754 28.7 5.68 6981 757 8062 1194 0.877 22.7 11.3 866 302 " 425 | W27x10x143 " 213.4 707.9 255.8 17 31 20 605.9 223453 8681 28.7 5.65 6313 679 7250 1065 0.879 24.8 9.94 649 272 " 426 | W27x10x129 " 192.7 701.8 254.3 15.5 27.9 20 606 199504 7673 28.5 5.59 5685 603 6508 945 0.878 27.3 8.71 480 245 " 427 | W27x10x114 " 171 693.2 255.8 14.5 23.6 20 606 171451 6605 28.1 5.51 4947 516 5664 810 0.873 31.3 7.4 319 218 " 428 | W27x10x102 " 153.4 688.1 254.4 13.1 21.1 20 605.9 152344 5807 27.9 5.45 4428 457 5056 714 0.872 34.6 6.46 232 195 " 429 | W27x10x94 " 140.9 683.8 253.7 12.4 18.9 20 606 137360 5158 27.7 5.36 4018 407 4591 637 0.869 37.9 5.7 177 179 " 430 | W27x10x84 " 126.8 678.4 253 11.7 16.3 20 605.8 120152 4412 27.3 5.23 3542 349 4060 547 0.863 42.5 4.84 126 161 " 431 | W24x12.75x306 " 455.8 689 340 32 57.9 20 533.2 446089 38100 27.7 8.1 12949 2241 15149 3500 0.889 12.2 37.9 5004 581 " 432 | W24x12.75x279 " 417.1 679 338 29.5 53.1 20 532.8 401327 34310 27.5 8.04 11821 2030 13750 3164 0.889 13.1 33.6 3877 531 " 433 | W24x12.75x250 " 373.9 669 335 26.4 48 20 533 354794 30175 27.3 7.96 10607 1802 12249 2799 0.89 14.4 29.1 2850 476 " 434 | W24x12.75x229 " 342 661 333 24.4 43.9 20 533.2 319846 27097 27.1 7.89 9678 1627 11122 2525 0.89 15.6 25.8 2196 436 " 435 | W24x12.75x207 " 308.9 653 330 22.1 39.9 20 533.2 285235 23958 26.9 7.8 8736 1452 9985 2248 0.89 17 22.5 1646 393 " 436 | W24x12.75x192 " 287 647 329 20.6 37.1 20 532.8 262288 22069 26.8 7.77 8108 1342 9231 2074 0.89 18.1 20.5 1329 366 " 437 | W24x12.75x176 " 262.7 641 327 19 34 20 533 237554 19854 26.6 7.7 7412 1214 8405 1874 0.89 19.6 18.3 1028 335 " 438 | W24x12.75x162 " 243.4 635 329.1 17.9 31 20 533 217053 18450 26.5 7.71 6836 1121 7728 1729 0.889 21.3 16.8 802 310 " 439 | W24x12.75x146 " 219.4 628.4 327.7 16.5 27.7 20 533 192489 16274 26.2 7.63 6126 993 6904 1531 0.887 23.5 14.7 586 280 " 440 | W24x12.75x131 " 197 621.8 326.5 15.4 24.4 20 533 169113 14177 26 7.52 5439 868 6120 1339 0.884 26.2 12.6 418 251 " 441 | W24x12.75x117 " 175.9 616.2 325.1 14 21.6 20 533 148869 12388 25.8 7.43 4832 762 5421 1173 0.883 29.2 10.9 298 224 " 442 | W24x12.75x104 " 156.4 611.1 323.9 12.7 19 20 533.1 130567 10775 25.6 7.35 4273 665 4784 1023 0.881 32.7 9.44 209 199 " 443 | W24x9x239 " 357.7 685 245.6 31 55.9 20 533.2 323775 13959 26.7 5.53 9453 1137 11280 1830 0.877 13 13.8 3425 456 " 444 | W24x9x218 " 325.1 675.1 243.1 28.4 51 20 533.1 289272 12333 26.4 5.46 8570 1015 10166 1629 0.877 14.1 12 2611 414 " 445 | W24x9x198 " 296.7 667 240.5 25.9 47 20 533 261006 10990 26.3 5.39 7826 914 9231 1461 0.878 15.1 10.6 2029 378 " 446 | W24x9x181 " 270.8 658.6 238.5 23.9 42.9 20 532.8 234408 9775 26.1 5.32 7118 820 8357 1308 0.878 16.4 9.26 1558 345 " 447 | W24x9x163 " 244.6 651 235.9 21.6 39.1 20 532.8 209471 8611 25.9 5.26 6435 730 7513 1160 0.878 17.8 8.06 1174 312 " 448 | W24x9x146 " 219.8 643.1 234.1 19.6 35.1 20 532.9 185486 7549 25.7 5.19 5769 645 6701 1022 0.878 19.6 6.98 860 280 " 449 | W24x9x128 " 191.5 635 231.5 17 30.9 20 533.2 160054 6419 25.6 5.13 5041 555 5815 874 0.879 22.1 5.86 584 244 " 450 | W24x9x114 " 173.1 628.9 229.9 15.5 27.9 20 533.1 142970 5674 25.5 5.07 4547 494 5225 776 0.879 24.2 5.12 436 221 " 451 | W24x9x103 " 155.1 623.1 228.6 14 24.9 20 533.3 126621 4976 25.3 5.02 4064 435 4652 683 0.879 26.8 4.45 315 198 " 452 | W24x9x94 " 141.9 617.5 230.3 13.1 22.2 20 533.1 113915 4535 25.1 5.01 3690 394 4216 617 0.876 29.5 4.02 236 181 " 453 | W24x9x84 " 126.7 612.1 229.1 11.9 19.6 20 532.9 100225 3940 24.9 4.94 3275 344 3734 538 0.875 32.8 3.46 168 161 " 454 | W24x9x76 " 115.1 607.6 228.3 11.2 17.3 20 533 89123 3442 24.7 4.85 2934 301 3348 472 0.871 36.3 3 124 147 " 455 | W24x9x68 " 103.2 602.7 227.7 10.5 14.9 20 532.9 77807 2941 24.3 4.73 2582 258 2953 405 0.866 40.7 2.54 87.8 131 " 456 | W24x7x62 " 93.8 603 178.8 10.9 15 20 533 66195 1439 23.5 3.47 2196 161 2569 260 0.85 40.4 1.24 81 120 " 457 | W24x7x55 " 83.4 598.7 177.9 10 12.8 20 533.1 57509 1209 23.3 3.37 1921 136 2252 220 0.846 45.3 1.04 57 106 " 458 | W21x12.25x275 " 408.6 613 327 31 55.6 12.7 476.4 316871 32531 24.7 7.91 10338 1990 12120 3096 0.89 11.2 25.3 4130 521 " 459 | W21x12.25x248 " 361.2 603 324 26.2 50.5 12.7 476.6 278899 28706 24.6 7.9 9250 1772 10725 2739 0.894 12.3 21.9 2996 460 " 460 | W21x12.25x223 " 331.2 593 322 25.4 45.5 12.7 476.6 247722 25390 24.2 7.76 8355 1577 9656 2442 0.89 13.4 19 2263 422 " 461 | W21x12.25x201 " 299.5 585 319 23.1 41.4 12.7 476.8 220740 22453 24.1 7.67 7547 1408 8670 2175 0.89 14.6 16.6 1700 382 " 462 | W21x12.25x182 " 271.3 577 317 21.1 37.6 12.7 476.4 196746 20004 23.9 7.61 6820 1262 7792 1947 0.89 15.9 14.6 1277 346 " 463 | W21x12.25x166 " 246.9 571 315.5 19 34.5 12.7 476.6 177748 18089 23.8 7.58 6226 1147 7071 1764 0.891 17.2 13 979 314 " 464 | W21x12.25x147 " 218.9 560.3 317.8 18.3 29.2 12.7 476.5 151141 15648 23.3 7.49 5395 985 6115 1518 0.884 19.8 11 642 279 " 465 | W21x12.25x132 " 196.6 554.5 316 16.5 26.3 12.7 476.5 134266 13852 23.2 7.44 4843 877 5463 1349 0.884 21.8 9.66 470 250 " 466 | W21x12.25x122 " 181.5 550.7 314.7 15.2 24.4 12.7 476.5 123290 12691 23.1 7.41 4478 807 5033 1239 0.885 23.4 8.79 374 231 " 467 | W21x12.25x111 " 165.5 546.4 313.4 14 22.2 12.7 476.6 111260 11402 23 7.35 4072 728 4563 1116 0.885 25.6 7.83 284 211 " 468 | W21x12.25x101 " 150.6 542.5 312.2 12.7 20.3 12.7 476.5 100688 10305 22.9 7.33 3712 660 4144 1011 0.885 27.8 7.03 216 192 " 469 | W21x8.25x93 " 138.3 549.1 213.9 14.7 23.6 12.7 476.5 86088 3864 22.1 4.68 3136 361 3613 568 0.873 25 2.67 250 176 " 470 | W21x8.25x83 " 123.3 544.3 212.2 13.1 21.2 12.7 476.5 76237 3387 22 4.64 2801 319 3213 500 0.874 27.6 2.32 181 157 " 471 | W21x8.25x73 " 109 539.5 210.7 11.6 18.8 12.7 476.5 66797 2939 21.9 4.6 2476 279 2827 435 0.875 30.9 1.99 126 139 " 472 | W21x8.25x68 " 101.4 536.7 210.1 10.9 17.4 12.7 476.5 61648 2696 21.8 4.57 2297 257 2619 400 0.874 33.1 1.82 102 129 " 473 | W21x8.25x2 " 92.5 533.1 209.3 10.2 15.6 12.7 476.5 55333 2389 21.7 4.5 2076 228 2366 356 0.871 36.4 1.6 76.3 118 " 474 | W21x6.5x57 " 84.8 534.9 166.5 10.3 16.5 12.7 476.5 48631 1275 21.2 3.44 1818 153 2107 243 0.862 35.5 0.857 73.8 108 " 475 | W21x6.5x50 " 74.7 529.1 165.9 9.7 13.6 12.7 476.5 41058 1040 20.8 3.3 1552 125 1808 200 0.853 41.1 0.691 47.9 95.2 " 476 | W21x6.5x44 " 65.7 524.8 165.1 8.9 11.4 12.7 476.6 35044 859 20.5 3.2 1336 104 1561 166 0.847 47 0.566 32 83.7 " 477 | W18x7.5x71 " 106.1 469.1 193.9 12.6 20.6 12.7 402.5 49045 2511 19 4.31 2091 259 2397 405 0.878 24.2 1.26 149 135 " 478 | W18x7.5x65 " 96.9 466.4 192.8 11.4 19 12.7 403 44772 2276 19 4.29 1920 236 2191 368 0.879 26.1 1.14 116 123 " 479 | W18x7.5x60 " 89.7 463.2 191.9 10.5 17.7 12.7 402.4 41192 2090 19 4.28 1779 218 2023 339 0.88 27.9 1.04 93.3 114 " 480 | W18x7.5x55 " 82.4 460 191.3 9.9 16 12.7 402.6 37268 1871 18.8 4.22 1620 196 1842 304 0.878 30.5 0.922 71.4 105 " 481 | W18x7.5x50 " 74.7 457 190.4 9 14.5 12.7 402.6 33536 1672 18.8 4.19 1468 176 1663 273 0.878 33.4 0.818 53.6 95.1 " 482 | W18x6x46 " 68.9 458.7 153.9 9.1 15.4 12.7 402.5 29855 939 18.4 3.27 1302 122 1496 192 0.87 32.3 0.461 52.9 87.7 " 483 | W18x6x40 " 59.9 454.7 152.8 8 13.3 12.7 402.7 25652 793 18.3 3.23 1128 104 1293 163 0.869 36.9 0.386 35.1 76.3 " 484 | W18x6x35 " 52.5 449.6 152.4 7.6 10.8 12.7 402.6 21432 639 17.9 3.09 953 83.9 1100 133 0.859 43.1 0.308 22.2 66.8 " 485 | W16x7x57 " 85.1 417.3 180.8 10.9 18.2 11.5 357.9 31645 1798 17.1 4.07 1517 199 1730 310 0.881 24.3 0.716 93.9 108 " 486 | W16x7x50 " 75 413 179.6 9.7 16 11.5 358 27529 1548 17 4.03 1333 172 1514 268 0.881 27.3 0.61 64.7 95.6 " 487 | W16x7x45 " 67.6 409.7 178.7 8.8 14.4 11.5 357.9 24568 1372 16.9 3.99 1199 154 1358 238 0.88 30.1 0.536 47.7 86.1 " 488 | W16x7x40 " 59.6 406.7 177.7 7.7 12.8 11.5 358.1 21605 1199 16.9 3.97 1062 135 1197 208 0.882 33.6 0.465 33.4 76 " 489 | W16x7x36 " 53.7 402.8 177.4 7.5 10.9 11.5 358 18711 1016 16.5 3.85 929 115 1051 178 0.873 38.1 0.39 23.2 68.4 " 490 | W16x5.5x31 " 46.5 403.4 140.3 7 11.1 12.7 355.8 15706 513 16.3 2.94 779 73.1 891 115 0.869 38.1 0.197 20.1 59.2 " 491 | W16x5.5x26 " 39.5 398.5 139.7 6.4 8.8 12.7 355.5 12771 401 15.9 2.82 641 57.4 737 90.6 0.86 45.3 0.152 12 50.3 " 492 | W14x16x730 " 1090 569.4 454.4 78 125 20 279.4 597675 196796 20.7 11.9 20993 8662 27285 13406 0.851 3.79 97.2 61282 1389 " 493 | W14x16x665 " 992.5 549.7 448.3 71.9 115 20 279.7 518869 173731 20.3 11.7 18878 7751 24301 11983 0.849 4.01 82.1 47520 1264 " 494 | W14x16x605 " 904 531.4 442.3 65.9 106 20 279.4 451718 153674 19.8 11.6 17001 6949 21678 10728 0.848 4.25 69.5 36912 1152 " 495 | W14x16x550 " 820.1 514.1 436.9 60.5 97 20 280.1 392655 135456 19.4 11.4 15275 6201 19280 9563 0.846 4.54 58.9 28212 1045 " 496 | W14x16x500 " 745.5 497.8 432.1 55.6 88.9 20 280 342210 120032 19 11.2 13749 5556 17184 8558 0.844 4.85 50.2 21666 950 " 497 | W14x16x455 " 678.5 483.1 427.6 51.2 81.5 20 280.1 299714 106588 18.6 11.1 12408 4985 15360 7671 0.843 5.18 43 16670 864 " 498 | W14x16x426 " 635.6 474.2 424.1 47.6 77.1 20 280 274874 98334 18.4 11 11593 4637 14256 7125 0.843 5.41 38.8 13964 810 " 499 | W14x16x398 " 594.1 464.6 421.4 45 72.3 20 280 250218 90440 18.2 10.9 10771 4292 13158 6591 0.842 5.69 34.8 11536 757 " 500 | W14x16x370 " 552.3 455.2 418.4 42 67.6 20 280 226913 82742 18 10.8 9970 3955 12091 6067 0.841 6 31.1 9404 704 " 501 | W14x16x342 " 510 445.5 415.5 39.1 62.7 20 280.1 204102 75140 17.7 10.8 9163 3617 11028 5543 0.84 6.37 27.5 7504 650 " 502 | W14x16x311 " 464.6 436.6 412.2 35.8 57.4 20 281.8 182190 67142 17.5 10.7 8346 3258 9953 4987 0.84 6.88 24.1 5752 592 " 503 | W14x16x283 " 423 425.2 409.2 32.8 52.6 20 280 160189 60177 17.2 10.6 7535 2941 8913 4497 0.838 7.36 20.9 4419 539 " 504 | W14x16x257 " 383.8 416.1 406.3 29.8 48 20 280.1 141852 53741 17 10.5 6818 2645 7996 4040 0.837 7.96 18.2 3350 489 " 505 | W14x16x233 " 347.9 407.4 403.6 27.2 43.7 20 280 125471 47949 16.8 10.4 6160 2376 7164 3625 0.836 8.62 15.9 2530 443 " 506 | W14x16x219 " 326.9 403.1 402 25.5 41.2 20 280.7 116773 44664 16.7 10.4 5794 2222 6703 3387 0.836 9.09 14.6 2117 416 " 507 | W14x16x211 " 314.2 399.3 401.3 24.9 39.5 20 280.3 110666 42597 16.6 10.3 5543 2123 6395 3236 0.835 9.4 13.8 1880 400 " 508 | W14x16x193 " 288.1 393.2 399 22.6 36.5 20 280.2 99988 38682 16.5 10.3 5086 1939 5828 2952 0.835 10.1 12.3 1474 367 " 509 | W14x16x176 " 263.5 386.6 397.5 21.1 33.3 20 280 89449 34891 16.3 10.2 4627 1756 5270 2672 0.833 10.9 10.9 1132 336 " 510 | W14x16x159 " 237.6 380.4 395.4 18.9 30.2 20 280 79396 31140 16.2 10.1 4174 1575 4719 2394 0.833 11.9 9.55 843 303 " 511 | W14x16x145 " 217.4 375.4 393.7 17.3 27.7 20 280 71616 28193 16.1 10.1 3815 1432 4288 2175 0.833 12.8 8.52 652 277 " 512 | W14x14.5x132 " 197.7 372.4 374 16.4 26.2 20 280 64143 22861 16 9.53 3445 1223 3866 1858 0.843 13.5 6.85 531 252 " 513 | W14x14.5x120 " 180.2 367.8 372.6 15 23.9 20 280 57671 20620 15.9 9.48 3136 1107 3500 1681 0.843 14.6 6.1 406 230 " 514 | W14x14.5x109 " 163.1 363.7 371 13.3 21.8 20 280.1 51802 18565 15.8 9.45 2849 1001 3159 1518 0.844 15.9 5.43 307 208 " 515 | W14x14.5x99 " 148.6 360 370 12.3 19.8 20 280.4 46647 16725 15.7 9.4 2591 904 2861 1371 0.843 17.3 4.84 233 189 " 516 | W14x14.5x90 " 135.1 356.1 368.8 11.2 18 20 280.1 41871 15056 15.6 9.35 2352 816 2585 1238 0.843 18.9 4.3 177 172 " 517 | W14x6.75x38 " 57.7 358.1 172.1 7.9 13.1 16 299.9 16410 1116 14.9 3.9 917 130 1031 201 0.886 27.3 0.332 37.7 73.5 " 518 | W14x6.75x34 " 51.7 355.1 171.3 7.2 11.6 16 299.9 14501 974 14.8 3.85 817 114 917 176 0.885 30.1 0.287 27.4 65.8 " 519 | W14x6.75x30 " 46 351.5 170.9 6.9 9.8 16 299.9 12462 817 14.6 3.74 709 95.7 798 149 0.878 34 0.239 19 58.6 " 520 | W14x5x26 " 40.1 353.3 127.6 6.5 10.7 16 299.9 10575 372 14.4 2.7 599 58.4 682 92.1 0.875 32.4 0.109 18.2 51.1 " 521 | W14x5x22 " 33.8 349 127 5.8 8.5 16 300 8608 292 14.1 2.6 493 46 563 72.8 0.869 38 0.0846 11.1 43 " 522 | W12x12x336 " 501.6 427.2 340 45.1 75.1 20 237 169284 49433 16.3 8.8 7925 2908 9902 4491 0.861 4.97 15.3 10288 639 " 523 | W12x12x305 " 455.2 414.5 336.2 41.3 68.7 20 237.1 147851 43696 16 8.68 7134 2599 8826 4009 0.86 5.32 13.1 7860 580 " 524 | W12x12x279 " 415.9 402.6 333.8 38.9 62.7 20 237.2 129794 39023 15.7 8.58 6448 2338 7907 3606 0.857 5.69 11.3 6063 530 " 525 | W12x12x252 " 376.3 391.4 330.3 35.4 57.2 20 237 113426 34473 15.4 8.48 5796 2087 7039 3215 0.856 6.11 9.63 4588 479 " 526 | W12x12x230 " 344.1 382.3 327.5 32.6 52.6 20 237.1 100820 30889 15.2 8.39 5274 1886 6351 2902 0.856 6.54 8.39 3566 438 " 527 | W12x12x210 " 314.3 373.6 324.9 30 48.3 20 237 89571 27684 15 8.32 4795 1704 5726 2618 0.855 7.01 7.32 2762 400 " 528 | W12x12x190 " 284 365.3 321.8 26.9 44.1 20 237.1 79053 24550 14.8 8.24 4328 1526 5121 2340 0.855 7.57 6.33 2085 362 " 529 | W12x12x170 " 254.3 356.4 319.3 24.4 39.6 20 237.2 68730 21529 14.6 8.15 3857 1349 4520 2066 0.854 8.28 5.4 1518 324 " 530 | W12x12x152 " 227.9 348.2 317 22.1 35.6 20 237 59909 18934 14.4 8.08 3441 1195 3998 1828 0.854 9.05 4.63 1109 290 " 531 | W12x12x136 " 203.7 340.6 315 20.1 31.8 20 237 52106 16592 14.2 8 3060 1053 3525 1611 0.852 9.96 3.96 800 259 " 532 | W12x12x120 " 179.9 333.2 312.9 18 28.1 20 237 44844 14368 14 7.92 2692 918 3074 1403 0.851 11.1 3.34 558 229 " 533 | W12x12x106 " 158.8 327.2 310.6 15.5 25.1 20 237 39020 12549 13.9 7.88 2385 808 2699 1232 0.853 12.2 2.86 394 202 " 534 | W12x12x96 " 144.2 322.8 308.9 14 22.9 20 237 34970 11261 13.8 7.83 2167 729 2436 1110 0.853 13.3 2.53 300 184 " 535 | W12x12x87 " 130.8 318.3 308 13.1 20.6 20 237.1 31101 10041 13.7 7.76 1954 652 2186 993 0.852 14.5 2.22 224 167 " 536 | W12x12x79 " 118.7 314.5 306.8 11.9 18.7 20 237.1 27861 9008 13.6 7.72 1772 587 1972 893 0.852 15.8 1.97 170 151 " 537 | W12x12x72 " 108 311.2 305.8 10.9 17 20 237.2 25076 8109 13.5 7.68 1612 530 1785 807 0.852 17.1 1.75 130 138 " 538 | W12x12x65 " 97.9 307.8 304.8 9.9 15.4 20 237 22455 7274 13.4 7.64 1459 477 1608 725 0.852 18.6 1.55 98.3 125 " 539 | W12x4x22 " 35.1 312.7 102.4 6.6 10.8 20 251.1 7083 197 12.6 2.1 453 38.4 522 62.5 0.873 25.5 0.0448 20.1 44.8 " 540 | W12x4x19 " 30.6 308.9 101.7 6 8.9 20 251.1 5992 159 12.4 2.02 388 31.3 447 51.2 0.868 28.3 0.0358 14.1 39 " 541 | W12x4x16 " 26.1 304.5 101.3 5.6 6.7 20 251.1 4845 119 12.1 1.89 318 23.5 369 39.2 0.857 31.9 0.0263 9.32 33.3 " 542 | W10x10x112 " 168.7 289 264.5 19.2 31.8 20 185.4 30197 9828 11.9 6.76 2090 743 2444 1138 0.852 8.28 1.63 665 215 " 543 | W10x10x100 " 150.4 282 262.6 17.3 28.4 20 185.2 26131 8587 11.7 6.7 1853 654 2148 1001 0.851 9.08 1.38 478 192 " 544 | W10x10x88 " 132.6 275.3 260.7 15.4 25.1 20 185.1 22415 7425 11.5 6.63 1628 570 1869 870 0.85 10.1 1.16 334 169 " 545 | W10x10x77 " 116.3 269.3 258.8 13.5 22.1 20 185.1 19207 6394 11.4 6.57 1426 494 1622 754 0.85 11.2 0.977 231 148 " 546 | W10x10x68 " 102.9 264.2 257.3 11.9 19.6 20 185 16649 5572 11.3 6.52 1260 433 1421 660 0.85 12.4 0.833 163 131 " 547 | W10x10x60 " 91.1 259.6 256 10.7 17.3 20 185 14440 4844 11.2 6.46 1112 378 1246 577 0.85 13.8 0.711 115 116 " 548 | W10x10x54 " 81.7 256.3 254.8 9.4 15.6 20 185.1 12826 4306 11.1 6.43 1001 338 1113 515 0.851 15 0.624 85.3 104 " 549 | W10x10x49 " 74.5 253.5 254 8.6 14.2 20 185.1 11558 3883 11 6.4 912 306 1009 465 0.851 16.2 0.556 66 94.9 " 550 | W10x5.75x30 " 45.5 265.9 147.6 7.6 13 12.7 214.5 7206 698 11.1 3.47 542 94.6 611 146 0.89 20.4 0.112 28.7 58 " 551 | W10x5.75x26 " 39.3 262.4 146.6 6.6 11.2 12.7 214.6 6134 589 11.1 3.43 468 80.4 524 124 0.89 23.2 0.093 18.8 50.1 " 552 | W10x5.75x22 " 33.5 258.3 146.1 6.1 9.1 12.7 214.7 5024 474 10.9 3.33 389 64.9 435 100 0.883 27.2 0.0736 11.4 42.6 " 553 | 10x4x19 " 29.2 260.1 102.1 6.4 10 12.7 214.7 4123 178 10.5 2.19 317 35 364 55.4 0.875 25.5 0.0279 11.4 37.2 " 554 | 10x4x17 " 26 256.8 101.9 6.1 8.4 12.7 214.6 3535 149 10.3 2.12 275 29.3 317 46.7 0.868 28.7 0.023 7.96 33.1 " 555 | 10x4x15 " 23 253.7 101.6 5.8 6.9 12.7 214.5 2993 122 10.1 2.04 236 23.9 273 38.4 0.859 32.3 0.0185 5.49 29.3 " 556 | W8x8x67 " 100.6 228.6 210.3 14.5 23.7 16 149.2 11395 3681 9.43 5.36 997 350 1159 536 0.852 8.81 0.386 222 128 " 557 | W8x8x58 " 87.7 222.3 208.8 13 20.6 16 149.1 9590 3131 9.26 5.29 863 300 993 459 0.85 9.88 0.318 149 112 " 558 | W8x8x48 " 72.5 215.9 206 10.2 17.4 16 149.1 7751 2539 9.16 5.24 718 246 814 376 0.853 11.5 0.25 88.6 92.4 " 559 | W8x8x40 " 60.4 209.6 205 9.1 14.2 16 149.2 6185 2042 8.97 5.15 590 199 663 304 0.85 13.5 0.195 51.5 76.9 " 560 | W8x8x35 " 53.2 206.2 203.7 7.9 12.6 16 149 5373 1777 8.9 5.12 521 174 581 266 0.851 15 0.167 36.4 67.8 " 561 | W8x8x31 " 47.1 203.2 203.2 7.2 11 16 149.2 4657 1540 8.81 5.07 458 152 508 231 0.849 16.7 0.142 25.5 59.9 " 562 | W8x5.25x21 " 32.1 210.3 133.9 6.4 10.2 12.7 164.5 3219 409 8.88 3.16 306 61.1 344 94.2 0.886 19.6 0.041 13.7 40.9 " 563 | W8x5.25x18 " 27.3 206.8 133.4 5.8 8.4 12.7 164.6 2656 333 8.73 3.09 257 50 287 77.1 0.882 22.7 0.0328 8.55 34.8 " 564 | W6x6x25 " 38 162.1 154.4 8.1 11.6 12.7 113.5 2275 713 6.85 3.84 281 92.4 318 142 0.85 12.6 0.0404 22.1 48.5 " 565 | W6x6x20 " 30.6 157.5 152.9 6.6 9.3 12.7 113.5 1773 555 6.74 3.77 225 72.6 252 111 0.85 15.1 0.0305 12 39 " 566 | W6x6x15 " 23.2 152.1 152.1 5.8 6.6 12.7 113.5 1254 388 6.52 3.62 165 51 183 78.3 0.842 19.2 0.0205 5.45 29.5 " 567 | 914x419x388 " 388 921 420.5 21.4 36.6 24.1 799.6 719635 45438 38.2 9.59 15627 2161 17665 3341 0.885 26.7 88.9 1734 494 " 568 | 914x419x343 " 343.3 911.8 418.5 19.4 32 24.1 799.6 625780 39156 37.8 9.46 13726 1871 15477 2890 0.883 30.1 75.8 1193 437 " 569 | 914x305x289 " 289.1 926.6 307.7 19.5 32 19.1 824.4 504187 15597 37 6.51 10883 1014 12570 1601 0.867 31.9 31.2 926 368 " 570 | 914x305x253 " 253.4 918.4 305.5 17.3 27.9 19.1 824.4 436305 13301 36.8 6.42 9501 871 10942 1371 0.866 36.2 26.4 626 323 " 571 | 914x305x224 " 224.2 910.4 304.1 15.9 23.9 19.1 824.4 376414 11236 36.3 6.27 8269 739 9535 1163 0.861 41.3 22.1 422 286 " 572 | 914x305x201 " 200.9 903 303.3 15.1 20.2 19.1 824.4 325254 9423 35.7 6.07 7204 621 8351 982 0.854 46.8 18.4 291 256 " 573 | 838x292x226 " 226.5 850.9 293.8 16.1 26.8 17.8 761.7 339704 11360 34.3 6.27 7985 773 9155 1212 0.87 35 19.3 514 289 " 574 | 838x292x194 " 193.8 840.7 292.4 14.7 21.7 17.8 761.7 279175 9066 33.6 6.06 6641 620 7640 974 0.862 41.6 15.2 306 247 " 575 | 838x292x176 " 175.9 834.9 291.7 14 18.8 17.8 761.7 246021 7799 33.1 5.9 5893 535 6808 842 0.856 46.5 13 221 224 " 576 | 762x267x197 " 196.8 769.8 268 15.6 25.4 16.5 686 239957 8175 30.9 5.71 6234 610 7167 959 0.869 33.2 11.3 404 251 " 577 | 762x267x173 " 173 762.2 266.7 14.3 21.6 16.5 686 205282 6850 30.5 5.58 5387 514 6198 807 0.864 38.1 9.39 267 220 " 578 | 762x267x147 " 146.9 754 265.2 12.8 17.5 16.5 686 168502 5455 30 5.4 4470 411 5156 647 0.858 45.2 7.4 159 187 " 579 | 762x267x134 " 133.9 750 264.4 12 15.5 16.5 686 150692 4788 29.7 5.3 4018 362 4644 570 0.854 49.8 6.46 119 171 " 580 | 686x254x170 " 170.2 692.9 255.8 14.5 23.7 15.2 615.1 170326 6630 28 5.53 4916 518 5631 811 0.872 31.8 7.42 308 217 " 581 | 686x254x152 " 152.4 687.5 254.5 13.2 21 15.2 615.1 150355 5784 27.8 5.46 4374 455 5000 710 0.871 35.5 6.42 220 194 " 582 | 686x254x140 " 140.1 683.5 253.7 12.4 19 15.2 615.1 136267 5183 27.6 5.39 3987 409 4558 638 0.868 38.7 5.72 169 178 " 583 | 686x254x125 " 125.2 677.9 253 11.7 16.2 15.2 615.1 117992 4383 27.2 5.24 3481 346 3994 542 0.862 43.9 4.8 116 159 " 584 | 610x305x238 " 238.1 635.8 311.4 18.4 31.4 16.5 540 209471 15837 26.3 7.23 6589 1017 7486 1574 0.886 21.3 14.5 785 303 " 585 | 610x305x179 " 179 620.2 307.1 14.1 23.6 16.5 540 153024 11408 25.9 7.07 4935 743 5547 1144 0.886 27.7 10.2 340 228 " 586 | 610x305x149 " 149.2 612.4 304.8 11.8 19.7 16.5 540 125876 9308 25.7 7 4111 611 4594 937 0.886 32.7 8.17 200 190 " 587 | 610x229x140 " 139.9 617.2 230.2 13.1 22.1 12.7 547.6 111777 4505 25 5.03 3622 391 4142 611 0.875 30.6 3.99 216 178 " 588 | 610x229x125 " 125.1 612.2 229 11.9 19.6 12.7 547.6 98610 3932 24.9 4.97 3221 343 3676 535 0.873 34.1 3.45 154 159 " 589 | 610x229x113 " 113 607.6 228.2 11.1 17.3 12.7 547.6 87318 3434 24.6 4.88 2874 301 3281 469 0.87 38 2.99 111 144 " 590 | 610x229x101 " 101.2 602.6 227.6 10.5 14.8 12.7 547.6 75780 2915 24.2 4.75 2515 256 2881 400 0.864 43.1 2.52 77 129 " 591 | 533x210x122 " 122 544.5 211.9 12.7 21.3 12.7 476.5 76043 3388 22.1 4.67 2793 320 3196 500 0.877 27.6 2.32 178 155 " 592 | 533x210x109 " 109 539.5 210.8 11.6 18.8 12.7 476.5 66822 2943 21.9 4.6 2477 279 2828 436 0.875 30.9 1.99 126 139 " 593 | 533x210x101 " 101 536.7 210 10.8 17.4 12.7 476.5 61519 2692 21.9 4.57 2292 256 2612 399 0.874 33.2 1.81 101 129 " 594 | 533x210x92 " 92.1 533.1 209.3 10.1 15.6 12.7 476.5 55227 2389 21.7 4.51 2072 228 2360 356 0.872 36.5 1.6 75.7 117 " 595 | 533x210x82 " 82.2 528.3 208.8 9.6 13.2 12.7 476.5 47539 2007 21.3 4.38 1800 192 2059 300 0.864 41.6 1.33 51.5 105 " 596 | 457x191x98 " 98.3 467.2 192.8 11.4 19.6 10.2 407.6 45727 2347 19.1 4.33 1957 243 2232 379 0.881 25.7 1.18 121 125 " 597 | 457x191x89 " 89.3 463.4 191.9 10.5 17.7 10.2 407.6 41015 2089 19 4.29 1770 218 2014 338 0.88 28.3 1.04 90.7 114 " 598 | 457x191x82 " 82 460 191.3 9.9 16 10.2 407.6 37051 1871 18.8 4.23 1611 196 1831 304 0.877 30.9 0.922 69.2 104 " 599 | 457x191x74 " 74.3 457 190.4 9 14.5 10.2 407.6 33319 1671 18.8 4.2 1458 176 1653 272 0.877 33.9 0.818 51.8 94.6 " 600 | 457x191x67 " 67.1 453.4 189.9 8.5 12.7 10.2 407.6 29380 1452 18.5 4.12 1296 153 1471 237 0.872 37.9 0.705 37.1 85.5 " 601 | 457x152x82 " 82.1 465.8 155.3 10.5 18.9 10.2 407.6 36589 1185 18.7 3.37 1571 153 1811 240 0.873 27.4 0.591 89.2 105 " 602 | 457x152x74 " 74.2 462 154.4 9.6 17 10.2 407.6 32674 1047 18.6 3.33 1414 136 1627 213 0.873 30.2 0.518 65.9 94.5 " 603 | 457x152x67 " 67.2 458 153.8 9 15 10.2 407.6 28927 913 18.4 3.27 1263 119 1453 187 0.869 33.6 0.448 47.7 85.6 " 604 | 457x152x60 " 59.8 454.6 152.9 8.1 13.3 10.2 407.6 25500 795 18.3 3.23 1122 104 1287 163 0.868 37.5 0.387 33.8 76.2 " 605 | 457x152x52 " 52.3 449.8 152.4 7.6 10.9 10.2 407.6 21369 645 17.9 3.11 950 84.6 1096 133 0.859 43.9 0.311 21.4 66.6 " 606 | 406x178x74 " 74.2 412.8 179.5 9.5 16 10.2 360.4 27310 1545 17 4.04 1323 172 1501 267 0.882 27.6 0.608 62.8 94.5 " 607 | 406x178x67 " 67.1 409.4 178.8 8.8 14.3 10.2 360.4 24331 1365 16.9 3.99 1189 153 1346 237 0.88 30.5 0.533 46.1 85.5 " 608 | 406x178x60 " 60.1 406.4 177.9 7.9 12.8 10.2 360.4 21596 1203 16.8 3.97 1063 135 1199 209 0.88 33.8 0.466 33.3 76.5 " 609 | 406x178x54 " 54.1 402.6 177.7 7.7 10.9 10.2 360.4 18722 1021 16.5 3.85 930 115 1055 178 0.871 38.3 0.392 23.1 69 " 610 | 406x140x46 " 46 403.2 142.2 6.8 11.2 10.2 360.4 15685 538 16.4 3.03 778 75.7 888 118 0.871 38.9 0.207 19 58.6 " 611 | 406x140x39 " 39 398 141.8 6.4 8.6 10.2 360.4 12508 410 15.9 2.87 629 57.8 724 90.8 0.858 47.5 0.155 10.7 49.7 " 612 | 356x171x67 " 67.1 363.4 173.2 9.1 15.7 10.2 311.6 19463 1362 15.1 3.99 1071 157 1211 243 0.886 24.4 0.412 55.7 85.5 " 613 | 356x171x57 " 57 358 172.2 8.1 13 10.2 311.6 16038 1108 14.9 3.91 896 129 1010 199 0.882 28.8 0.33 33.4 72.6 " 614 | 356x171x51 " 51 355 171.5 7.4 11.5 10.2 311.6 14136 968 14.8 3.86 796 113 896 174 0.881 32.1 0.286 23.8 64.9 " 615 | 356x171x45 " 45 351.4 171.1 7 9.7 10.2 311.6 12066 811 14.5 3.76 687 94.8 775 147 0.874 36.8 0.237 15.8 57.3 " 616 | 356x127x39 " 39.1 353.4 126 6.6 10.7 10.2 311.6 10172 358 14.3 2.68 576 56.8 659 89.1 0.871 35.2 0.105 15.1 49.8 " 617 | 356x127x33 " 33.1 349 125.4 6 8.5 10.2 311.6 8249 280 14 2.58 473 44.7 543 70.3 0.863 42.2 0.0812 8.79 42.1 " 618 | 305x165x54 " 54 310.4 166.9 7.9 13.7 8.9 265.2 11696 1063 13 3.93 754 127 846 196 0.889 23.6 0.234 34.8 68.8 " 619 | 305x165x46 " 46.1 306.6 165.7 6.7 11.8 8.9 265.2 9899 896 13 3.9 646 108 720 166 0.891 27.1 0.195 22.2 58.7 " 620 | 305x165x40 " 40.3 303.4 165 6 10.2 8.9 265.2 8503 764 12.9 3.86 560 92.6 623 142 0.889 31 0.164 14.7 51.3 " 621 | 305x127x48 " 48.1 311 125.3 9 14 8.9 265.2 9575 461 12.5 2.74 616 73.6 711 116 0.873 23.3 0.102 31.8 61.2 " 622 | 305x127x42 " 41.9 307.2 124.3 8 12.1 8.9 265.2 8196 389 12.4 2.7 534 62.6 614 98.4 0.872 26.5 0.0846 21.1 53.4 " 623 | 305x127x37 " 37 304.4 123.4 7.1 10.7 8.9 265.2 7171 336 12.3 2.67 471 54.5 539 85.4 0.872 29.7 0.0725 14.8 47.2 " 624 | 305x102x33 " 32.8 312.7 102.4 6.6 10.8 7.6 275.9 6501 194 12.5 2.15 416 37.9 481 60 0.866 31.6 0.0442 12.2 41.8 " 625 | 305x102x28 " 28.2 308.7 101.8 6 8.8 7.6 275.9 5366 155 12.2 2.08 348 30.5 403 48.5 0.859 37.4 0.0349 7.4 35.9 " 626 | 305x102x25 " 24.8 305.1 101.6 5.8 7 7.6 275.9 4455 123 11.9 1.97 292 24.2 342 38.8 0.846 43.4 0.0273 4.77 31.6 " 627 | 254x146x43 " 43 259.6 147.3 7.2 12.7 7.6 219 6544 677 10.9 3.52 504 92 566 141 0.891 21.2 0.103 23.9 54.8 " 628 | 254x146x37 " 37 256 146.4 6.3 10.9 7.6 219 5537 571 10.8 3.48 433 78 483 119 0.89 24.3 0.0857 15.3 47.2 " 629 | 254x146x31 " 31.1 251.4 146.1 6 8.6 7.6 219 4413 448 10.5 3.36 351 61.3 393 94.1 0.88 29.6 0.066 8.55 39.7 " 630 | 254x102x28 " 28.3 260.4 102.2 6.3 10 7.6 225.2 4005 179 10.5 2.22 308 34.9 353 54.8 0.874 27.5 0.028 9.57 36.1 " 631 | 254x102x25 " 25.2 257.2 101.9 6 8.4 7.6 225.2 3415 149 10.3 2.15 266 29.2 306 46 0.866 31.5 0.023 6.42 32 " 632 | 254x102x22 " 22 254 101.6 5.7 6.8 7.6 225.2 2841 119 10.1 2.06 224 23.5 259 37.3 0.856 36.4 0.0182 4.15 28 " 633 | 203x133x30 " 30 206.8 133.9 6.4 9.6 7.6 172.4 2896 385 8.71 3.17 280 57.5 314 88.2 0.881 21.5 0.0374 10.3 38.2 " 634 | 203x133x25 " 25.1 203.2 133.2 5.7 7.8 7.6 172.4 2340 308 8.56 3.1 230 46.2 258 70.9 0.877 25.6 0.0294 5.96 32 " 635 | 203x102x23 " 23.1 203.2 101.8 5.4 9.3 7.6 169.4 2105 164 8.46 2.36 207 32.2 234 49.8 0.888 22.5 0.0154 7.02 29.4 " 636 | 178x102x19 " 19 177.8 101.2 4.8 7.9 7.6 146.8 1356 137 7.48 2.37 153 27 171 41.6 0.888 22.6 0.00987 4.41 24.3 " 637 | 152x89x16 " 16 152.4 88.7 4.5 7.7 7.6 121.8 834 89.8 6.41 2.1 109 20.2 123 31.2 0.89 19.6 0.0047 3.56 20.3 " 638 | 127x76x13 " 13 127 76 4 7.6 7.6 96.6 473 55.7 5.35 1.84 74.6 14.7 84.2 22.6 0.895 16.3 0.00199 2.85 16.5 " 639 | 1016x305x487 " 486.6 1036.1 308.5 30 54.1 30 867.9 1021420 26721 40.6 6.57 19717 1732 23200 2800 0.867 21.1 64.4 4299 620 " 640 | 1016x305x437 " 436.9 1025.9 305.4 26.9 49 30 867.9 909906 23447 40.4 6.49 17739 1535 20762 2469 0.868 23.1 55.9 3185 557 " 641 | 1016x305x393 " 392.7 1016 303 24.4 43.9 30 868.2 807689 20496 40.2 6.4 15899 1353 18539 2168 0.868 25.5 48.4 2330 500 " 642 | 1016x305x349 " 349.4 1008.1 302 21.1 40 30 868.1 723131 18460 40.3 6.44 14346 1223 16592 1941 0.872 27.9 43.3 1718 445 " 643 | 1016x305x314 " 314.3 1000 300 19.1 35.9 30 868.2 644212 16232 40.1 6.37 12884 1082 14851 1713 0.872 30.7 37.7 1264 400 " 644 | 1016x305x272 " 272.3 990.1 300 16.5 31 30 868.1 553974 14004 40 6.35 11190 934 12826 1470 0.873 35 32.2 835 347 " 645 | 1016x305x249 " 248.7 980.2 300 16.5 26 30 868.2 481306 11754 39 6.09 9821 784 11350 1245 0.861 39.9 26.8 582 317 " 646 | 1016x305x222 " 222 970.3 300 16 21.1 30 868.1 407961 9546 38 5.81 8409 636 9807 1020 0.85 45.7 21.5 390 283 " 647 | 356x406x634 " 633.9 474.6 424 47.6 77 15.2 290.2 274845 98125 18.4 11 11582 4629 14235 7108 0.843 5.46 38.8 13723 808 " 648 | 356x406x551 " 551 455.6 418.5 42.1 67.5 15.2 290.2 226938 82671 18 10.9 9962 3951 12076 6058 0.841 6.05 31.1 9240 702 " 649 | 356x406x467 " 467 436.6 412.2 35.8 58 15.2 290.2 183003 67834 17.5 10.7 8383 3291 10002 5034 0.839 6.86 24.3 5808 595 " 650 | 356x406x393 " 393 419 407 30.6 49.2 15.2 290.2 146618 55367 17.1 10.5 6998 2721 8222 4154 0.837 7.87 18.9 3545 501 " 651 | 356x406x340 " 339.9 406.4 403 26.6 42.9 15.2 290.2 122543 46853 16.8 10.4 6031 2325 6999 3544 0.836 8.85 15.5 2343 433 " 652 | 356x406x287 " 287.1 393.6 399 22.6 36.5 15.2 290.2 99875 38677 16.5 10.3 5075 1939 5812 2949 0.835 10.2 12.3 1441 366 " 653 | 356x406x235 " 235.1 381 394.8 18.4 30.2 15.2 290.2 79085 30993 16.3 10.2 4151 1570 4687 2383 0.834 12.1 9.54 812 299 " 654 | 356x368x202 " 201.9 374.6 374.7 16.5 27 15.2 290.2 66261 23688 16.1 9.6 3538 1264 3972 1920 0.844 13.4 7.16 558 257 " 655 | 356x368x177 " 177 368.2 372.6 14.4 23.8 15.2 290.2 57118 20529 15.9 9.54 3103 1102 3455 1671 0.844 15 6.09 381 226 " 656 | 356x368x153 " 152.9 362 370.5 12.3 20.7 15.2 290.2 48589 17553 15.8 9.49 2684 948 2965 1435 0.844 17 5.11 251 195 " 657 | 356x368x129 " 129 355.6 368.6 10.4 17.5 15.2 290.2 40246 14611 15.6 9.43 2264 793 2479 1199 0.844 19.9 4.18 153 164 " 658 | 305x305x283 " 282.9 365.3 322.2 26.8 44.1 15.2 246.7 78872 24635 14.8 8.27 4318 1529 5105 2342 0.855 7.65 6.35 2034 360 " 659 | 305x305x240 " 240 352.5 318.4 23 37.7 15.2 246.7 64203 20315 14.5 8.15 3643 1276 4247 1951 0.854 8.74 5.03 1271 306 " 660 | 305x305x198 " 198.1 339.9 314.5 19.1 31.4 15.2 246.7 50904 16299 14.2 8.04 2995 1037 3440 1581 0.854 10.2 3.88 734 252 " 661 | 305x305x158 " 158.1 327.1 311.2 15.8 25 15.2 246.7 38747 12569 13.9 7.9 2369 808 2680 1230 0.851 12.5 2.87 378 201 " 662 | 305x305x137 " 136.9 320.5 309.2 13.8 21.7 15.2 246.7 32814 10700 13.7 7.83 2048 692 2297 1053 0.851 14.2 2.39 249 174 " 663 | 305x305x118 " 117.9 314.5 307.4 12 18.7 15.2 246.7 27672 9059 13.6 7.77 1760 589 1958 895 0.85 16.2 1.98 161 150 " 664 | 305x305x97 " 96.9 307.9 305.3 9.9 15.4 15.2 246.7 22249 7308 13.4 7.69 1445 479 1592 726 0.85 19.3 1.56 91.2 123 " 665 | 254x254x167 " 167.1 289.1 265.2 19.2 31.7 12.7 200.3 29998 9870 11.9 6.81 2075 744 2424 1137 0.851 8.49 1.63 626 213 " 666 | 254x254x132 " 132 276.3 261.3 15.3 25.3 12.7 200.3 22529 7531 11.6 6.69 1631 576 1869 878 0.85 10.3 1.19 319 168 " 667 | 254x254x107 " 107.1 266.7 258.8 12.8 20.5 12.7 200.3 17510 5928 11.3 6.59 1313 458 1484 697 0.848 12.4 0.898 172 136 " 668 | 254x254x89 " 88.9 260.3 256.3 10.3 17.3 12.7 200.3 14268 4857 11.2 6.55 1096 379 1224 575 0.85 14.5 0.717 102 113 " 669 | 254x254x73 " 73.1 254.1 254.6 8.6 14.2 12.7 200.3 11407 3908 11.1 6.48 898 307 992 465 0.849 17.3 0.562 57.6 93.1 " 670 | 203x203x86 " 86.1 222.2 209.1 12.7 20.5 10.2 160.8 9449 3127 9.28 5.34 850 299 977 456 0.85 10.2 0.318 137 110 " 671 | 203x203x71 " 71 215.8 206.4 10 17.3 10.2 160.8 7618 2537 9.18 5.3 706 246 799 374 0.853 11.9 0.25 80.2 90.4 " 672 | 203x203x60 " 60 209.6 205.8 9.4 14.2 10.2 160.8 6125 2065 8.96 5.2 584 201 656 305 0.846 14.1 0.197 47.2 76.4 " 673 | 203x203x52 " 52 206.2 204.3 7.9 12.5 10.2 160.8 5259 1778 8.91 5.18 510 174 567 264 0.848 15.8 0.167 31.8 66.3 " 674 | 203x203x46 " 46.1 203.2 203.6 7.2 11 10.2 160.8 4568 1548 8.82 5.13 450 152 497 231 0.847 17.7 0.143 22.2 58.7 " 675 | 152x152x37 " 37 161.8 154.4 8 11.5 7.6 123.6 2210 706 6.85 3.87 273 91.5 309 140 0.848 13.3 0.0399 19.2 47.1 " 676 | 152x152x30 " 30 157.6 152.9 6.5 9.4 7.6 123.6 1748 560 6.76 3.83 222 73.3 248 112 0.849 16 0.0308 10.5 38.3 " 677 | 152x152x23 " 23 152.4 152.2 5.8 6.8 7.6 123.6 1250 400 6.54 3.7 164 52.6 182 80.2 0.84 20.7 0.0212 4.63 29.2 " 678 | } 679 | -------------------------------------------------------------------------------- /LumpedHingeElement.tcl: -------------------------------------------------------------------------------- 1 | # --------------------------------------------------- 2 | # -- Script to Create a Lumped Hinge Element --- 3 | # --------------------------------------------------- 4 | # Gerard O'Reilly 5 | # IUSS Pavia 6 | # Created: January 2019 7 | proc LumpedHingeElement {ET GT iNode jNode My1 My2 mu Lp fy fc b h ap app} { 8 | # -------------------------------------- 9 | # -- Description of the Parameters ----- 10 | # -------------------------------------- 11 | # ET # Element Tag 12 | # GT # Geometric Transf Tag 13 | # iNode # i Node 14 | # jNode # j Node 15 | # My1 # Yield moment at end 1 16 | # My2 # Yield moment at end 2 17 | # mu # Curvature ductility to peak 18 | # Lp # Plastic hinge length (m) 19 | # fy # Rebar yield strength (MPa) 20 | # fc # Concrete c strength (MPa) 21 | # b # Section width (m) 22 | # h # Section height (m) 23 | # ap # Peak strength ratio 24 | # app # Post-peak strength stiffness ratio 25 | 26 | # -------------------------------------- 27 | # ------ Section Parameters ------------ 28 | # -------------------------------------- 29 | set epsy [expr $fy/200e3]; # Assume E=200GPa for steel 30 | set Ec [expr (3320*sqrt($fc)+6900)*1.0e3];; # Assume for concrete (MPa) 31 | set Ag [expr $b*$h]; 32 | set Iz [expr $b*pow($h,3)/12]; 33 | set EIg [expr $Ec*$Iz]; 34 | set phiy [expr 2.1*$epsy/$h]; 35 | set EIcr1 [expr $My1/$phiy]; 36 | set EIcr2 [expr $My2/$phiy]; 37 | set cr1 [expr $EIcr1/$EIg]; 38 | set cr2 [expr $EIcr2/$EIg]; 39 | set Icr1 [expr $cr1*$Iz]; 40 | set Icr2 [expr $cr2*$Iz]; 41 | if {$h>=$b} {set J [expr $h*pow($b,3)*(0.333-0.21*($h/$b)*(1-pow($b/$h,4)/12))];}; 42 | if {$b>$h} {set J [expr $b*pow($h,3)*(0.333-0.21*($b/$h)*(1-pow($h/$b,4)/12))];}; 43 | 44 | # -------------------------------------- 45 | # ------ Hysteretic Parameters --------- 46 | # -------------------------------------- 47 | set pinchX 0.8; 48 | set pinchY 0.5; 49 | set damage1 0.0; 50 | set damage2 0.0; 51 | set beta 0.0; 52 | 53 | # -------------------------------------- 54 | # -- Create the Material Model --------- 55 | # -------------------------------------- 56 | set hingeMTag1 101${ET}; # Create an nonlinear material for the flexural hinge to be aggregated to the actual PH 57 | set hingeMTag2 102${ET}; # Create an nonlinear material for the flexural hinge to be aggregated to the actual PH 58 | 59 | set Mp1 [expr $ap*$My1]; 60 | set Mp2 [expr $ap*$My2]; 61 | set Mu1 [expr 0.1*$My1]; 62 | set Mu2 [expr 0.1*$My2]; 63 | 64 | set phip [expr $phiy*$mu]; 65 | set phiu1 [expr $phip+($Mp1-$Mu1)/($app*$My1/$phiy)]; 66 | set phiu2 [expr $phip+($Mp2-$Mu2)/($app*$My2/$phiy)]; 67 | 68 | uniaxialMaterial Hysteretic $hingeMTag1 $My1 $phiy $Mp1 $phip $Mu1 $phiu1 -$My1 -$phiy -$Mp1 -$phip -$Mu1 -$phiu1 $pinchX $pinchY $damage1 $damage2 $beta 69 | uniaxialMaterial Hysteretic $hingeMTag2 $My2 $phiy $Mp2 $phip $Mu2 $phiu2 -$My2 -$phiy -$Mp2 -$phip -$Mu2 -$phiu2 $pinchX $pinchY $damage1 $damage2 $beta 70 | # -------------------------------------- 71 | # -- Create the Element --------------- 72 | # -------------------------------------- 73 | set intTag 105${ET}; # Internal elastic section tag 74 | set phTag1 106${ET}; # Create an aggregated section with this tag for the actual element 75 | set phTag2 107${ET}; # Create an aggregated section with this tag for the actual element 76 | 77 | # Create the internal elastic element behaviour 78 | # section Elastic $intTag $Ec $Ag $Izz $Iyy $Gc 0.01 79 | section Elastic $intTag $Ec $Ag $Iz $Iz [expr 0.4*$Ec] $J 80 | puts "Cracked section to be fixed" 81 | 82 | # Create the plastic hinge section 83 | section Uniaxial $phTag1 $hingeMTag1 Mz; # Create the PH flexural section about ZZ 84 | section Uniaxial $phTag2 $hingeMTag2 Mz; # Create the PH flexural section about ZZ 85 | 86 | # Create the whole element 87 | # element forceBeamColumn $eleTag $iNode $jNode $transfTag "HingeRadau $secTagI $LpI $secTagJ $LpJ $secTagInterior" <-mass $massDens> <-iter $maxIters $tol> 88 | element forceBeamColumn $ET $iNode $jNode $GT "HingeRadau $phTag1 $Lp $phTag2 $Lp $intTag" 89 | # element elasticBeamColumn $ET $iNode $jNode $Ag $Ec $Gc 0.01 $Iyy $Izz $GT 90 | 91 | } 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Useful OpenSees Procedures 2 | 3 | This repository contains a few handy procedures written in TCL for analysis in OpenSees. 4 | 5 | If you find any bugs, let me know. 6 | 7 | This readme file is not that complete so some things are not documented. I try my best to keep some description of things here though 8 | 9 | ## Units 10 | 11 | This is a list of SI units that can be loaded at the beginning of a model to maintain consistency with units throughout. Similar files exist on the OpenSees Wiki page but this is done to keep everything in kN and m. 12 | 13 | ## runNRHA3D 14 | 15 | This will allow you to run the non-linear analysis in a relatively efficient manner. If the model does not converge initially, it will try many different tolerance tests, algorithms and reduced time steps before finally giving up and marking the case as a non-converging case. This avoids wasting hours of your computer working overtime to converge a model that, when you actually look at the final results, make you realise that that last effort was indeed futile. It also allows you to specify a relatively large time step and conduct analyses much quicker. 16 | 17 | In addition, it allows you to specify a collapse drift limit that will stop the analysis should it be exceeded. This works by checking the relative deformations between a specific set of nodes and in the event the collapse drift limit is exceeded, the analysis is stopped and the case is marked as a collapse case. This is quite convenient when doing IDA, for example. 18 | 19 | Lastly, the procedure will print a log file of the main results of the analysis. It will let you know what the final state of the model was after the ground motion. 0 means it finished without any problems, 1 means that the collapse drift limit was exceeded and the analysis stopped and -1 means that the analysis could not be converged. 20 | 21 | ## runNRHA1D 22 | 23 | This is the same as above but for SDOF structures. Very useful for doing extensive studies on SDOF oscillators. 24 | 25 | ## singlePush 26 | 27 | This will perform a pushover in a single command. If the analysis doesn't converge, it will try a few options to achieve convergence. If the building loses its lateral capacity from loss of strength of P-Delta collapse, the analysis will be stopped. 28 | 29 | ## cyclicPush 30 | 31 | Same as singlePush but performs full cycles at the target displacement. Can also perform up to 6 cycles at the same target displacement. 32 | 33 | ## LP_SteelSection 34 | 35 | This creates a lumped plasticity element of a standard steel section. List of common sections are included to be called from, including European, UK and US sections. 36 | 37 | ## LumpedHingeElement 38 | 39 | Similar to the LP_SteelSection command but for a more generic situation (i.e. RC sections) where the dimensions of the section and the flexural capacities are known. 40 | 41 | ## modalAnalysis 42 | 43 | This is a very useful file to do a modal analysis of a structural model. It will print the periods on screen and provide a file with the values and also eigenvectors. The outputs of this function are needed for the Matlab-based plotter. 44 | 45 | ## getSaT 46 | 47 | Even though its name says SaT, this function returns a few ground motion intensity measure characteristics. Things like Sa(T1), PGA, PGV can be obtained. Useful to use when you want to interactively get the intensity of a ground motion during analysis (i.e. think IDA) 48 | 49 | ## IDA_HTF 50 | 51 | The TCL-oriented implementation of the Matlab-based script of the same name by the original developers of IDA. This can be used directly in OpenSees for different kinds of intensity measure types. All the user needs to do is provide a working built model, point to a directory of ground motions, define some collapse criteria (i.e. the demand that will signal a collapse in the structure) and the function will automatically carry out an IDA. 52 | 53 | # Licensing 54 | Copyright (C) 2019 Gerard J. O'Reilly 55 | 56 | All of these programs are copyrighted under the GNU General Public License as published by the Free Software Foundation, version 2. In short, you can employ them freely (assuming you cite the original source and the relevant publication) but if you want to build upon, extend or re-distribute them, then the derivative software products will also have to be covered under the GPL (i.e. be free software). Other licensing options are negotiable. 57 | 58 | # Disclaimer 59 | These programs are distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 60 | -------------------------------------------------------------------------------- /Testing/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gerardjoreilly/OpenSees-Procedures/168a2b3ef7a0c51bdb0b9741a846dfc66462a8b9/Testing/.DS_Store -------------------------------------------------------------------------------- /Testing/Add_PGV_getSaT/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gerardjoreilly/OpenSees-Procedures/168a2b3ef7a0c51bdb0b9741a846dfc66462a8b9/Testing/Add_PGV_getSaT/.DS_Store -------------------------------------------------------------------------------- /Testing/Add_PGV_getSaT/Add_PGV_getSaT.tcl: -------------------------------------------------------------------------------- 1 | # Test and verify the addition of PGV and PGD calculation to the getSaT function 2 | 3 | # Define a ground motion 4 | set EQ "../eq_1g_0.01s.txt" 5 | set dt 0.01 6 | set xi 0.05 7 | set g 9.81 8 | 9 | # Read the signal 10 | set imp [open $EQ "r"]; 11 | set accg [read $imp]; 12 | close $imp 13 | 14 | # Integrate it for ground displacement and velocity 15 | set acc {}; 16 | set vg {0.0} 17 | set dg {0.0} 18 | for {set i 0} {$i < [llength $accg]} {incr i 1} { 19 | lappend vg [expr [lindex $vg $i]+0.5*$dt*$g*([lindex $accg $i+1]+[lindex $accg $i])] 20 | lappend dg [expr [lindex $dg $i]+0.5*$dt*([lindex $vg $i+1]+[lindex $vg $i])] 21 | } 22 | 23 | # Find the maximum values 24 | set pgv 0.0; 25 | set pgd 0.0; 26 | 27 | file delete ground_response.txt 28 | set gr [open ground_response.txt a] 29 | 30 | # Loop the terms (This loop is t length) 31 | for {set i 0} {$i < [llength $accg]} {incr i 1} { 32 | set temp1 [expr abs([lindex $vg $i])]; # Get the absolute current ground velocity 33 | set temp2 [expr abs([lindex $dg $i])]; # Get the absolute current ground displacement 34 | if {$temp1>$pgv} {set pgv $temp1}; # Find the pgv 35 | if {$temp2>$pgd} {set pgd $temp2}; # Find the pgd 36 | 37 | 38 | puts $gr "[lindex $accg $i] [lindex $vg $i] [lindex $dg $i]" 39 | 40 | } 41 | close $gr 42 | 43 | puts $pgv 44 | puts $pgd 45 | 46 | source ../../getSaT.tcl 47 | getSaT $EQ $dt 1.0 $xi 48 | # puts $Sa 49 | # puts $pga 50 | puts $pgv 51 | puts $pgd 52 | -------------------------------------------------------------------------------- /Testing/Add_PGV_getSaT/Ground_Motion_Integration_Check.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gerardjoreilly/OpenSees-Procedures/168a2b3ef7a0c51bdb0b9741a846dfc66462a8b9/Testing/Add_PGV_getSaT/Ground_Motion_Integration_Check.xlsx -------------------------------------------------------------------------------- /Testing/AvgSa_IDA_HTF_testing/AvgSa_IDA_HTF_testing.m: -------------------------------------------------------------------------------- 1 | % This is a testing script for the computation of AvgSa 2 | 3 | %% Clean up 4 | addpath('/Users/gor/GitHub/Matlab-Functions') 5 | % run('startup.m'); 6 | close all 7 | clear 8 | clc 9 | 10 | %% Compute the spectrum 11 | [~,~,Sa,~,~,~,T] = RsSpNewmark(load('/Users/gor/GitHub/Matlab-Functions/eq_1g_0.01s.txt'),0.01,0.05,0.01,0.01,3,0.5,0.25); 12 | 13 | %% Compute the spectral values at set periods 14 | Tlist = [0.27 0.46 0.65 0.83 1.02 1.21 1.40 1.58 1.77 1.96]; 15 | 16 | for i = 1:length(Tlist) 17 | [~,~,Sai(i),~,~,~]=RsSpNewmarkT(load('/Users/gor/GitHub/Matlab-Functions/eq_1g_0.01s.txt'),0.01,0.05,Tlist(i),0.5,0.25); 18 | end 19 | 20 | Sai 21 | n = length(Sai) 22 | AvgSa = prod(Sai)^(1/n) 23 | AvgSa = exp(sum(log(Sai))/n) 24 | AvgSa = geomean(Sai) 25 | 26 | %% Plot the spectrum 27 | figure 28 | grid on; hold on; 29 | plot(T,Sa,'-k') 30 | plot(Tlist,Sai,'or'); 31 | xlabel('T') 32 | ylabel('Sa(T)') 33 | -------------------------------------------------------------------------------- /Testing/AvgSa_IDA_HTF_testing/AvgSa_IDA_HTF_testing.tcl: -------------------------------------------------------------------------------- 1 | # This is a testing script for the computation of AvgSa 2 | 3 | # Need to load the getSaT function 4 | set procdir "../../" 5 | source $procdir/getSaT.tcl 6 | 7 | set IMtype 6 8 | set Tinfo {0.27 0.46 0.65 0.83 1.02 1.21 1.40 1.58 1.77 1.96} 9 | 10 | set gmsdir "../" 11 | set EQnameX "eq_1g_0.01s.txt" 12 | set EQnameY "eq_1g_0.01s.txt" 13 | set dts_list [list 0.01] 14 | set xi 0.05 15 | set i 1 16 | 17 | set startTime [clock clicks -milliseconds]; 18 | 19 | 20 | if {$IMtype==6} { 21 | # Get the length of the periods 22 | set nT [llength $Tinfo] 23 | 24 | # Get the spectral accelerations at each period 25 | set Sa_listX {}; 26 | set Sa_listY {}; 27 | for {set pn 0} {$pn < $nT} {incr pn 1} { 28 | getSaT $gmsdir/$EQnameX [lindex $dts_list $i-1] [lindex $Tinfo $pn] $xi; # Get the Sa(T1,5%) of the record in the X direction 29 | lappend Sa_listX $Sa 30 | getSaT $gmsdir/$EQnameY [lindex $dts_list $i-1] [lindex $Tinfo $pn] $xi; # Get the Sa(T1,5%) of the record in the Y direction 31 | lappend Sa_listY $Sa 32 | } 33 | 34 | # Compute the geometric mean 35 | set SaXsumprod [lindex $Sa_listX 0] 36 | set SaYsumprod [lindex $Sa_listY 0] 37 | for {set pn 1} {$pn < $nT} {incr pn 1} { 38 | set SaXsumprod [expr [lindex $Sa_listX $pn]*$SaXsumprod] 39 | set SaYsumprod [expr [lindex $Sa_listX $pn]*$SaYsumprod] 40 | } 41 | set SaXgm [expr pow($SaXsumprod,1/($nT*1.0))] 42 | set SaYgm [expr pow($SaYsumprod,1/($nT*1.0))] 43 | 44 | # Using the geoetreic mean of the two compoents AvgSa 45 | # This is the same as just takeing the AvgSa of the combined set of X and Y (i.e. at Tinfo x 2 periods) 46 | set IMgeomean [expr pow($SaXgm*$SaYgm,0.5)] 47 | 48 | } 49 | 50 | puts $Sa_listX 51 | puts $SaXgm 52 | puts $SaYgm 53 | puts $IMgeomean 54 | 55 | puts "Finished!" 56 | set totalTimeSEC [expr ([clock clicks -milliseconds]-$startTime)/1000]; 57 | set totalTimeMIN [expr $totalTimeSEC/60]; 58 | set totalTimeHR [expr $totalTimeMIN/60]; 59 | puts [format "Total runtime was %.3f seconds" $totalTimeSEC]; 60 | puts [format "Total runtime was %.3f minutes" $totalTimeMIN]; 61 | puts [format "Total runtime was %.3f hours" $totalTimeHR]; 62 | 63 | 64 | 65 | 66 | 67 | set startTime [clock clicks -milliseconds]; 68 | set SaXgm [expr pow($SaXsumprod,1/($nT*1.0))] 69 | set SaYgm [expr pow($SaYsumprod,1/($nT*1.0))] 70 | set IMgeomean [expr pow($SaXgm*$SaYgm,0.5)] 71 | puts $IMgeomean 72 | set totalTimeSEC [expr ([clock clicks -milliseconds]-$startTime)/1000]; 73 | puts [format "Total runtime was %.3f seconds" $totalTimeSEC]; 74 | -------------------------------------------------------------------------------- /Testing/AvgSa_IDA_HTF_testing/AvgSa_IDA_HTF_testing.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gerardjoreilly/OpenSees-Procedures/168a2b3ef7a0c51bdb0b9741a846dfc66462a8b9/Testing/AvgSa_IDA_HTF_testing/AvgSa_IDA_HTF_testing.xlsx -------------------------------------------------------------------------------- /Units.tcl: -------------------------------------------------------------------------------- 1 | # Units 2 | # -------------- 3 | # Standardised Units 4 | # -------------- 5 | set pi 3.141592654 6 | set g 9.81 7 | 8 | # Length 9 | set m 1.0; 10 | set mm [expr $m/1000.0]; 11 | set cm [expr $m/100.0]; 12 | set in [expr 25.4*$mm]; 13 | set ft [expr 12*$in]; 14 | 15 | # Area 16 | set m2 [expr $m*$m]; 17 | set mm2 [expr $mm*$mm]; 18 | set cm2 [expr $cm*$cm]; 19 | set in2 [expr $in*$in]; 20 | 21 | # Second Moment of Area 22 | set m4 [expr $m*$m*$m*$m]; 23 | set cm4 [expr $cm*$cm*$cm*$cm]; 24 | set mm4 [expr $mm*$mm*$mm*$mm]; 25 | set in4 [expr $in*$in*$in*$in]; 26 | 27 | # Force 28 | set kN 1.0; 29 | set N [expr $kN/1000.0]; 30 | set kips [expr $kN*4.448221615]; 31 | 32 | # Moment 33 | set kNm [expr $kN*$m]; 34 | 35 | # Mass (tonnes) 36 | set tonne 1.0; 37 | set kg [expr $tonne/1000]; 38 | 39 | # Stress (kN/m2 or kPa) 40 | set Pa [expr $N/($m*$m)]; 41 | set kPa [expr $Pa*1.0e3]; 42 | set MPa [expr $Pa*1.0e6]; 43 | set Nmm2 [expr $N/($mm*$mm)]; 44 | set kNmm2 [expr $Nmm2*1.0e3]; 45 | set GPa [expr $Pa*1.0e9]; 46 | set ksi [expr 6.8947573*$MPa]; 47 | set kgcm2 [expr $kg*$g/$cm/$cm] 48 | 49 | # Angles 50 | set degrees [expr $pi/180]; 51 | -------------------------------------------------------------------------------- /cyclicPush.tcl: -------------------------------------------------------------------------------- 1 | proc cyclicPush {dref mu numCycles ctrlNode dispDir dispIncr IOflag {PrintFlag 0}} { 2 | # Procedure to carry out a cyclic pushover of a model 3 | # Copyright by Gerard J. O'Reilly, 2017 4 | # Created: March 2014 5 | # -------------------------------------------------- 6 | # Description of Parameters 7 | # -------------------------------------------------- 8 | # Command: cyclicPush 9 | # dref: Reference displacement to which cycles are run. Corresponds to yield or equivalent other. 10 | # mu: Multiple of dref to which the cycles is run. 11 | # numCycles: No. of cycles. Valid options either 1,2,3,4,5,6 12 | # ctrlNode: Node to control with the displacement integrator 13 | # dispDir: Direction the loading is applied. 14 | # dispIncr: Number of displacement increments. 15 | # IOflag: Option to print cycle details on screen. 1 for on, 0 for off 16 | # PrintFlag: Optional flag for printing nodes/elements at max cycle 17 | # --------------------------------------------------- 18 | # cyclicPush dref mu numCycles ctrlNode dir dispIncr IOflag 19 | 20 | # Set up the initial analysis 21 | # Define the Initial Analysis Parameters 22 | # set testType NormUnbalance; # Dont use with Penalty constraints 23 | set testType NormDispIncr 24 | # set testType EnergyIncr; # Dont use with Penalty constraints 25 | # set testType RelativeNormUnbalance; # Dont use with Penalty constraints 26 | # set testType RelativeNormDispIncr; # Dont use with Lagrange constraints 27 | # set testType RelativeTotalNormDispIncr; # Dont use with Lagrange constraints 28 | # set testType RelativeEnergyIncr; # Dont use with Penalty constraints 29 | 30 | set tolInit 1.0e-7; # Set the initial Tolerance, so it can be referred back to 31 | set iterInit 500; # Set the initial Max Number of Iterations 32 | 33 | set algorithmType KrylovNewton; # Set the algorithm type 34 | # set algorithmType Newton; # Set the algorithm type 35 | # set algorithmType Newton; # Set the algorithm type 36 | 37 | test $testType $tolInit $iterInit 38 | 39 | algorithm $algorithmType 40 | 41 | 42 | # Create the list of displacements 43 | if {$numCycles == 1} { 44 | set dispList [list [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]] 45 | set dispNoMax 3 46 | } elseif {$numCycles == 2} { 47 | set dispList [list [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 48 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]] 49 | set dispNoMax 6 50 | } elseif {$numCycles == 3} { 51 | set dispList [list [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 52 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 53 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]] 54 | set dispNoMax 9 55 | } elseif {$numCycles == 4} { 56 | set dispList [list [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 57 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 58 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 59 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]] 60 | set dispNoMax 12 61 | } elseif {$numCycles == 5} { 62 | set dispList [list [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 63 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 64 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 65 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 66 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]] 67 | set dispNoMax 15 68 | } elseif {$numCycles == 6} { 69 | set dispList [list [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 70 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 71 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 72 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 73 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]\ 74 | [expr $dref*$mu] [expr -2*$dref*$mu] [expr $dref*$mu]] 75 | set dispNoMax 18 76 | } else {puts "ERROR: Value for numCycles not a valid choice. Choose between 1 and 6"} 77 | 78 | # Print values 79 | if {$IOflag == 1} { 80 | puts "cyclicPush: $numCycles cycles to $mu at $ctrlNode" 81 | } 82 | 83 | # Carry out loading 84 | for {set d 1} {$d <= $dispNoMax} {incr d} { 85 | set numIncr $dispIncr 86 | set dU [expr [lindex $dispList [expr $d-1]]/(1.0*$numIncr)] 87 | integrator DisplacementControl $ctrlNode $dispDir $dU 88 | analysis Static 89 | for {set l 0} {$l < $numIncr} {incr l} { 90 | # puts "Analysis step: $l" 91 | set ok [analyze 1] 92 | if {$ok !=0} { 93 | puts "@@@@@@@@@@@@@@@@@@@@@@@@@" 94 | puts "@@@@ ANALYSIS FAILED @@@@" 95 | puts "@@@@@@@@@@@@@@@@@@@@@@@@@" 96 | puts "Analysis failed at cycle: $d and dispIncr: $l" 97 | exit; 98 | } 99 | } 100 | if {$PrintFlag ==1 && $d==1 } { 101 | print nodes_$mu.txt -node 102 | print ele_$mu.txt -ele 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /getSaT.tcl: -------------------------------------------------------------------------------- 1 | proc getSaT {EQ dt T xi} { 2 | # ----------------------------------- 3 | # Inputs: 4 | # ----------------------------------- 5 | # EQ: Filename which is a single column file in units g (e.g "Eq.txt") 6 | # dt: Time step in seconds (e.g 0.01) 7 | # xi: Elastic damping (e.g 0.05) 8 | # T: Period in seconds (e.g 1.0) 9 | 10 | # ----------------------------------- 11 | # Outputs: 12 | #------------------------------------ 13 | # Sa: Sa(T,%) - Pseudo-Spectral Acceleration in g 14 | # Sv: Sv(T,%) - Pseudo-Spectral Velocity in m/s 15 | # Sd: Sd(T,%) - Spectral Displacement in m 16 | # pga: Peak ground acceelration in g 17 | # pgv: Peak ground velocity in m/s 18 | # pgd: Peak ground displacement in m 19 | 20 | # Make the outputs available outside the procedure 21 | upvar 1 Sa Sa 22 | upvar 1 Sv Sv 23 | upvar 1 Sd Sd 24 | upvar 1 pga pga 25 | upvar 1 pgv pgv 26 | upvar 1 pgd pgd 27 | 28 | # Import the ground motion 29 | set imp [open $EQ "r"]; 30 | set accg [read $imp]; 31 | close $imp 32 | 33 | # Set up some basics 34 | set g 9.81; # Define gravity in metric, because this is not the stone age anymore.... 35 | set gamma 0.5; # Newmark terms (Set for Average Acceleration method) 36 | set beta 0.25; # Newmark terms (Set for Average Acceleration method) 37 | set ms 1.0; # Set the mass to 1kg 38 | set acc {}; 39 | set p {}; 40 | set vg {0.0} 41 | set dg {0.0} 42 | 43 | for {set i 0} {$i < [llength $accg]} {incr i 1} { 44 | lappend acc [expr [lindex $accg $i]*$g]; # Change the units of the record to m/s2 45 | lappend p [expr -$ms*[lindex $acc $i]]; # Create the force in N 46 | lappend vg [expr [lindex $vg $i]+0.5*$dt*$g*([lindex $accg $i+1]+[lindex $accg $i])] 47 | lappend dg [expr [lindex $dg $i]+0.5*$dt*([lindex $vg $i+1]+[lindex $vg $i])] 48 | } 49 | 50 | # Calculate the initial values 51 | set k [expr $ms*pow((2.0*3.141592654/$T),2)]; # Stiffness in N/m (which will give T following assumption of mass) 52 | set w [expr pow(($k/$ms),0.5)]; # Circular frequency 53 | set c [expr 2*$xi*$ms*$w]; # Damping coefficient 54 | set a0 [expr [lindex $p 0]/$ms]; # Initial acceleration in m/s2 55 | set k_bar [expr $k+$gamma*$c/$beta/$dt+$ms/$beta/$dt/$dt]; # Stiffness term (see Chopra book) 56 | set A [expr $ms/$beta/$dt+$gamma*$c/$beta]; # Constant term (see Chopra book) 57 | set B [expr $ms/2/$beta+$dt*$c*($gamma/2/$beta-1)]; # Constant term (see Chopra book) 58 | 59 | # Initialise some vectors 60 | set u {0.0}; 61 | set v {0.0}; 62 | set a {$a0}; 63 | set du {}; 64 | set dv {}; 65 | set da {}; 66 | set dp {}; 67 | set dp_bar {}; 68 | 69 | # Loop the terms (This loop is to length minus 1) 70 | for {set i 0} {$i < [llength $accg]-1} {incr i 1} { 71 | lappend dp [expr [lindex $p $i+1]-[lindex $p $i]]; 72 | lappend dp_bar [expr [lindex $dp $i]+$A*[lindex $v $i]+$B*[lindex $a $i]]; 73 | lappend du [expr [lindex $dp_bar $i]/$k_bar]; 74 | lappend dv [expr $gamma*[lindex $du $i]/$beta/$dt-$gamma*[lindex $v $i]/$beta+$dt*(1-$gamma/2/$beta)*[lindex $a $i]]; 75 | lappend da [expr [lindex $du $i]/$beta/$dt/$dt-[lindex $v $i]/$beta/$dt-[lindex $a $i]/2/$beta]; 76 | lappend u [expr [lindex $u $i]+[lindex $du $i]]; 77 | lappend v [expr [lindex $v $i]+[lindex $dv $i]]; 78 | lappend a [expr [lindex $a $i]+[lindex $da $i]]; 79 | } 80 | 81 | # I'm not coding the other stuff for getting total acceleration etc. like the Matlab function, dont need it here 82 | set umax 0.0; 83 | set pga 0.0; 84 | set pgv 0.0; 85 | set pgd 0.0; 86 | 87 | # Loop the terms (This loop is t length) 88 | for {set i 0} {$i < [llength $accg]} {incr i 1} { 89 | set temp1 [expr abs([lindex $u $i])]; # Get the absolute current displacement 90 | set temp2 [expr abs([lindex $accg $i])]; # Get the absolute current ground acceleration 91 | set temp3 [expr abs([lindex $vg $i])]; # Get the absolute current ground velocity 92 | set temp4 [expr abs([lindex $dg $i])]; # Get the absolute current ground displacement 93 | 94 | if {$temp1>$umax} {set umax $temp1}; # Find the peak displacement 95 | if {$temp2>$pga} {set pga $temp2}; # Find the pga 96 | if {$temp3>$pgv} {set pgv $temp3}; # Find the pgv 97 | if {$temp4>$pgd} {set pgd $temp4}; # Find the pgd 98 | 99 | } 100 | 101 | # Calculate Spectral Values 102 | set Sd $umax; # Spectral acceleration in m 103 | set Sv [expr $Sd*$w]; # Pseudo spectral velocity in m/s 104 | set Sa [expr $Sd*$w*$w/$g]; # Pseudo spectral acceleration in g 105 | 106 | } 107 | -------------------------------------------------------------------------------- /modalAnalysis.tcl: -------------------------------------------------------------------------------- 1 | # -------------------------------------- 2 | # Eigen value analysis 3 | # -------------------------------------- 4 | # Copyright by Gerard J. O'Reilly, 2017 5 | # Written: Gerard J. O'Reilly 6 | # Date: February 2015 7 | # Last Updated: March 2017 8 | # -------------------------------------- 9 | proc modalAnalysis {numModes {pflag 0} {tag ""} {modaldir ""} {rdamp {}} {xi 0.05}} { 10 | # numModes Number of Modes (e.g. 2) 11 | # pflag Print flag - 1 to show the modal info onscreen or 0 for nothing (default: 0) 12 | # tag Tag to append to period and eigenvector filenames (e.g. "_Frame") (default "") 13 | # modaldir Directory to put output files (e.g. "outs/") (default "") 14 | # rdamp Modes to which xi ratio of Rayleigh is applied are applied, specified as {a b} (e.g. {1 3} for the 1st and 3rd mode) 15 | # xi Ratio of Critical Damping to be applied to the previously listed modes (e.g. 0.05 for 5%) 16 | 17 | # Please note: This only computes and spits out what the damping at each mode is, it doesnt actually apply it. 18 | # This is just to see this information quickly while are computing modal properties here. 19 | 20 | # If the rdamp list or the xi value are not input, then this part wont be conducted 21 | 22 | # This makes the Prd and omega variables available outside the proc 23 | upvar 1 Prd Prd 24 | upvar 1 omega omega 25 | 26 | # Solve for lambda 27 | set lambda [eigen -genBandArpack $numModes]; # Default 28 | # puts $lambda 29 | 30 | # If this solver doesn't work, try another 31 | if {[lindex $lambda 0]<=0} { 32 | set lambda [eigen -fullGenLapack $numModes]; 33 | puts "Eigensolver failed, trying fullGenLapack..."; 34 | } 35 | if {[lindex $lambda 0]<=0} { 36 | set lambda [eigen -symmBandLapack $numModes]; 37 | puts "Eigensolver failed, trying symmBandLapack..."; 38 | } 39 | 40 | # Record the eigenvectors 41 | record 42 | 43 | # Extract the eigenvalues to the appropriate arrays 44 | set omega {} 45 | set freq {} 46 | set Prd {} 47 | foreach lam $lambda { 48 | lappend omega [expr sqrt($lam)] 49 | lappend freq [expr sqrt($lam)/(2*3.14159)] 50 | lappend Prd [expr (2*3.14159)/sqrt($lam)] 51 | } 52 | 53 | # Print the Periods to a text file 54 | file delete "${modaldir}Periods${tag}.txt" 55 | set period "${modaldir}Periods${tag}.txt" 56 | set Periods [open $period "w"]; 57 | for {set i 1} {$i<=$numModes} {incr i 1} { 58 | puts $Periods [format "%.3f" [lindex $Prd $i-1]] 59 | } 60 | close $Periods 61 | 62 | # Print the eigenvectors to a text file 63 | file delete "${modaldir}eigenVectors${tag}.txt" 64 | print "${modaldir}eigenVectors${tag}.txt" -node 65 | 66 | 67 | # Compute the Rayleigh damping % if requested 68 | set n [llength $rdamp] 69 | if {$n==2} { 70 | # Classical rayleigh damping 71 | set wi [lindex $omega [lindex $rdamp 0]-1]; 72 | set wj [lindex $omega [lindex $rdamp 1]-1]; 73 | set a0 [expr $xi*2.0*$wi*$wj/($wi+$wj)]; 74 | set a1 [expr 2.0*$xi/($wi+$wj)]; 75 | set xi_modes {} 76 | for {set i 1} {$i<=$numModes} {incr i 1} { 77 | set wn [lindex $omega $i-1]; 78 | lappend xi_modes [expr 0.5*($a0/$wn+$a1*$wn)]; 79 | } 80 | } elseif {$n==1} { 81 | # either stiffnes of mass proprtional damping 82 | set wi [lindex $omega [lindex $rdamp 0]-1]; 83 | set a0 [expr 2.0*$xi*$wi]; 84 | set a1 [expr 2.0*$xi/$wi]; 85 | set xi_modes_m {} 86 | set xi_modes_k {} 87 | for {set i 1} {$i<=$numModes} {incr i 1} { 88 | set wn [lindex $omega $i-1]; 89 | lappend xi_modes_m [expr 0.5*$a0/$wn]; 90 | lappend xi_modes_k [expr 0.5*$a1*$wn]; 91 | } 92 | 93 | } else { 94 | lappend xi_modes 0.0 95 | } 96 | 97 | # Create the on screen output 98 | if {$pflag==1} { 99 | for {set i 1} {$i<=$numModes} {incr i 1} { 100 | if {$n==2} { 101 | puts [format "Mode %d - T=%.2fs f=%.2fHz omega:%.1frad/s xi=%.2f%%" $i [lindex $Prd $i-1] [lindex $freq $i-1] [lindex $omega $i-1] [expr [lindex $xi_modes $i-1]*100.0]] 102 | } elseif {$n==1} { 103 | puts [format "Mode %d - T=%.2fs f=%.2fHz omega:%.1frad/s xi(M)=%.2f%% xi(K)=%.2f%%" $i [lindex $Prd $i-1] [lindex $freq $i-1] [lindex $omega $i-1] [expr [lindex $xi_modes_m $i-1]*100.0] [expr [lindex $xi_modes_k $i-1]*100.0]] 104 | } else { 105 | puts [format "Mode %d - T=%.2fs f=%.2fHz omega:%.1frad/s " $i [lindex $Prd $i-1] [lindex $freq $i-1] [lindex $omega $i-1]] 106 | } 107 | } 108 | } 109 | 110 | 111 | set ::omega $omega 112 | set ::freq $freq 113 | set ::Prd $Prd 114 | 115 | } 116 | -------------------------------------------------------------------------------- /rcBC_duct.tcl: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------------------------- 2 | # -- Script to Create a Lumped Plasticity Element for Ductile RC Beam Columns --- 3 | # ------------------------------------------------------------------------------- 4 | # Gerard O'Reilly 5 | # EUCENTRE/IUSSPavia 6 | # Created: November 2014 7 | # Last Updated: April 2016 8 | 9 | 10 | # First create a function that performs Moment Curvature Analysis 11 | proc MomentCurvature {index h b cv dbL dbV fc Ec P fyL Es rho1 rho2 rho3 {pflag 0}} { 12 | # -------------------------------------------------------- 13 | # -- Set some stuff that makes My available above ------ 14 | # -------------------------------------------------------- 15 | upvar Myp${index} Mp 16 | upvar Myn${index} Mn 17 | upvar cp${index} cp 18 | upvar cn${index} cn 19 | # -------------------------------------- 20 | # -- Compute Some General Stuff ------ 21 | # -------------------------------------- 22 | set n_c [expr 0.8+$fc/18]; # n term for concrete 23 | set e_c [expr 1.0*$fc/$Ec*($n_c/($n_c-1))]; # epsilon_c' for concrete 24 | set e_s [expr $fyL/$Es]; # Steel yield strain 25 | 26 | # -------------------------------------- 27 | # -- Compute the Yield Curvature ------- 28 | # -------------------------------------- 29 | set phiY [expr 2.1*$fyL/$Es/$h]; # Yield Curvature (rad/m) 30 | 31 | # -------------------------------------- 32 | # -- Compute the Yield Moment ---------- 33 | # -------------------------------------- 34 | # Do a Moment Curvature Analysis 35 | set d1 [expr $cv+$dbV+$dbL/2]; # Depth to Top Bars (m) 36 | set d2 [expr $h/2]; # Depth to Middle Bars (m) 37 | set d3 [expr $h-$cv-$dbV-$dbL/2]; # Depth to Bottom Bars (m) 38 | 39 | # Positive Bending 40 | set c [expr $h/2]; # initial trial of NA depth (m) 41 | set count 0; 42 | set err 0.5; 43 | while {$err > 0.001 && $count < 1000 } { 44 | if {$pflag>=2} { 45 | puts "Iteration $count c:$c Error: $err kN"; 46 | } 47 | # Compute the strains at each level 48 | set e_s1 [expr ($c-$d1)*$phiY]; # Strain in top steel (in strains) 49 | set e_s2 [expr ($d2-$c)*$phiY]; # Strain in middle steel 50 | set e_s3 [expr ($d3-$c)*$phiY]; # Strain in middle steel 51 | set e_top [expr $c*$phiY]; # Strain in top of section 52 | 53 | # Compute the steel stuff 54 | if {$e_s1 < $e_s} {set f_s1 [expr $e_s1*$Es]} else {set f_s1 $fyL}; # in MPa 55 | if {$e_s2 < $e_s} {set f_s2 [expr $e_s2*$Es]} else {set f_s2 $fyL}; # in MPa 56 | if {$e_s3 < $e_s} {set f_s3 [expr $e_s3*$Es]} else {set f_s3 $fyL}; # in MPa 57 | 58 | set Fs1 [expr $f_s1*$rho1*$b*$d3*1000]; # (kN) 59 | set Fs2 [expr $f_s2*$rho2*$b*$d3*1000]; # (kN) 60 | set Fs3 [expr $f_s3*$rho3*$b*$d3*1000]; # (kN) 61 | 62 | # Compute concrete stuff 63 | set a1b1 [expr ($e_top/$e_c)-pow($e_top/$e_c,2)/3]; # alpha1beta1 term 64 | set b1 [expr (4-($e_top/$e_c))/(6-2*($e_top/$e_c))]; # beta1 65 | set Fc [expr $a1b1*$c*$fc*$b*1000]; # Concrete block force (kN) 66 | 67 | # Section force 68 | set Psec [expr $P+$Fs2+$Fs3-$Fc-$Fs1]; # Section Force (kN) 69 | 70 | # Adjust NA depth to balance section forces 71 | if {$Psec < 0} { 72 | set c0 $c 73 | set c [expr $c-0.001]; 74 | } elseif {$Psec > 0} { 75 | set c0 $c 76 | set c [expr $c+0.001]; 77 | } 78 | set err [expr abs($Psec)]; 79 | 80 | if {$err < 5} { 81 | break 82 | } 83 | incr count 1 84 | } 85 | # Compute the moment 86 | set Mp [expr $P*(0.5*$h-$c)+$Fs1*($c-$d1)+$Fs3*($d3-$c)+$Fs2*($d2-$c)+$Fc*$c*(1-$b1/2)]; 87 | set cp $c 88 | 89 | # Negative Bending 90 | set c [expr $h/2]; # initial trial of NA depth (m) 91 | set count 0; 92 | set err 0.5; 93 | while {$err > 0.001 && $count < 1000 } { 94 | if {$pflag>=2} { 95 | puts "Iteration $count c:$c Error: $err kN"; 96 | } 97 | # Compute the strains at each level 98 | set e_s1 [expr ($c-$d1)*$phiY]; # Strain in top steel (in strains) 99 | set e_s2 [expr ($d2-$c)*$phiY]; # Strain in middle steel 100 | set e_s3 [expr ($d3-$c)*$phiY]; # Strain in middle steel 101 | set e_top [expr $c*$phiY]; # Strain in top of section 102 | 103 | # Compute the steel stuff 104 | if {$e_s1 < $e_s} {set f_s1 [expr $e_s1*$Es]} else {set f_s1 $fyL}; # in MPa 105 | if {$e_s2 < $e_s} {set f_s2 [expr $e_s2*$Es]} else {set f_s2 $fyL}; # in MPa 106 | if {$e_s3 < $e_s} {set f_s3 [expr $e_s3*$Es]} else {set f_s3 $fyL}; # in MPa 107 | 108 | set Fs1 [expr $f_s1*$rho3*$b*$d3*1000]; # (kN) 109 | set Fs2 [expr $f_s2*$rho2*$b*$d3*1000]; # (kN) 110 | set Fs3 [expr $f_s3*$rho1*$b*$d3*1000]; # (kN) 111 | 112 | # Compute concrete stuff 113 | set a1b1 [expr ($e_top/$e_c)-pow($e_top/$e_c,2)/3]; # alpha1beta1 term 114 | set b1 [expr (4-($e_top/$e_c))/(6-2*($e_top/$e_c))]; # beta1 115 | set Fc [expr $a1b1*$c*$fc*$b*1000]; # Concrete block force (kN) 116 | 117 | # Section force 118 | set Psec [expr $P+$Fs2+$Fs3-$Fc-$Fs1]; # Section Force (kN) 119 | 120 | # Adjust NA depth to balance section forces 121 | if {$Psec < 0} { 122 | set c0 $c 123 | set c [expr $c-0.001]; 124 | } elseif {$Psec > 0} { 125 | set c0 $c 126 | set c [expr $c+0.001]; 127 | } 128 | set err [expr abs($Psec)]; 129 | 130 | if {$err < 5} { 131 | break 132 | } 133 | incr count 1 134 | } 135 | # Compute the moment 136 | set Mn [expr $P*(0.5*$h-$c)+$Fs1*($c-$d1)+$Fs3*($d3-$c)+$Fs2*($d2-$c)+$Fc*$c*(1-$b1/2)]; 137 | set cn $c 138 | # set Myp${index} $Mp 139 | # set Myn${index} $Mn 140 | 141 | if {$pflag>=1} { 142 | puts "Myp${index}: $Mp kNm" 143 | puts "Myn${index}: $Mn kNm" 144 | } 145 | 146 | } 147 | 148 | 149 | # Ductile Element based on Hasleton Parameters 150 | proc rcBC_duct {ET GT iNode jNode fyL fyV Es fc Ec b h s cv dbL dbV k asl P Ls rho_shr rho_top1zz rho_mid1zz rho_bot1zz rho_top2zz rho_mid2zz rho_bot2zz rho_top1yy rho_mid1yy rho_bot1yy rho_top2yy rho_mid2yy rho_bot2yy pfile {pflag 0}} { 151 | global MPa 152 | global mm 153 | if {$pflag==1} { 154 | puts "" 155 | puts "" 156 | puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 157 | puts "Element $ET between nodes $iNode and $jNode" 158 | } 159 | # -------------------------------------- 160 | # -- Description of the Parameters ----- 161 | # -------------------------------------- 162 | # ET # Element Tag 163 | # GT # Geometric Transf Tag 164 | # iNode # i Node 165 | # jNode # j Node 166 | # fyL # Steel yield strength long. bars (MPa) 167 | # fyV # Steel yield strength shear. bars (MPa) 168 | # Es # Steel elastic modulus (MPa) 169 | # fc # Concrete compressive strength (MPa) 170 | # Ec # Concrete elastic modulus (MPa) 171 | # b # Section width (m) 172 | # h # Section height (m) 173 | # s # Shear rft spacing 174 | # cv # Cover (m) 175 | # dbL # Long. bar diameter (m) 176 | # dbV # Shear bar diameter (m) 177 | # k # Confined strength ratio (1.0 for unconfined concrete) fcc'=k*fc 178 | # asl # Bond slip parameter (1 when possible, 0 when not) 179 | # P # Axial force (kN) (+ Compression, - Tension) 180 | # Ls # Shear span 181 | # rho_shr # Ratio of shear rft =Ash/bs 182 | # rho_top1zz # Ratio of top rft = Astop/bd (END 1 about zz axis) 183 | # rho_mid1zz # Ratio of web rft =Asmid/bd (END 1 about zz axis) 184 | # rho_bot1zz # Ratio of bottom rft = Asbot/bd (END 1 about zz axis) 185 | # rho_top2zz # Ratio of top rft = Astop/bd (END 2 about zz axis) 186 | # rho_mid2zz # Ratio of web rft =Asmid/bd (END 2 about zz axis) 187 | # rho_bot2zz # Ratio of bottom rft = Asbot/bd (END 2 about zz axis) 188 | # rho_top1yy # Ratio of top rft = Astop/bd (END 1 about yy axis) 189 | # rho_mid1yy # Ratio of web rft =Asmid/bd (END 1 about yy axis) 190 | # rho_bot1yy # Ratio of bottom rft = Asbot/bd (END 1 about yy axis) 191 | # rho_top2yy # Ratio of top rft = Astop/bd (END 2 about yy axis) 192 | # rho_mid2yy # Ratio of web rft =Asmid/bd (END 2 about yy axis) 193 | # rho_bot2yy # Ratio of bottom rft = Asbot/bd (END 2 about yy axis) 194 | # pflag # Print flag (optional - 1: details about hinge are printed) 195 | # pfile Print file - prints the backbone properties to a specified file 196 | 197 | # -------------------------------------- 198 | # -- Compute Some General Stuff ------ 199 | # -------------------------------------- 200 | set fc [expr $fc*1.0]; # Change to real number incase it is integer 201 | set nu [expr $P/($b*$h*$fc*$MPa)]; # Normalised Axial Load Ratio (-) 202 | set dyy [expr $h-$dbV-$cv-$dbL/2]; # Depth to bottom bars zz (m) 203 | set dzz [expr $b-$dbV-$cv-$dbL/2]; # Depth to bottom bars zz (m) 204 | set d1 [expr $dbV-$cv-$dbL/2]; # Depth to top bars zz (m) 205 | set Ag [expr $b*$h]; # Gross Cross Section Area (mm2) 206 | set Izz [expr $b*pow($h,3)/12]; # I about local zz axis (mm4) 207 | set Iyy [expr $h*pow($b,3)/12]; # I about local yy axis (mm4) 208 | set EIzz [expr $Ec*$MPa*$Izz]; # EI about zz (kNm2) 209 | set EIyy [expr $Ec*$MPa*$Iyy]; # EI about yy (kNm2) 210 | set EA [expr $Ec*$MPa*$Ag]; # EA (kN) 211 | set Gc [expr 0.4*$Ec*$MPa]; # Shear Modulus of Concrete (kN/m2) 212 | set Kshear [expr $Gc*$Ag]; # Shear Stiffness of Section 213 | 214 | # Torsional Stiffness 215 | if {$h>=$b} {set J [expr $h*pow($b,3)*(0.333-0.21*($h/$b)*(1-pow($b/$h,4)/12))];}; 216 | if {$b>$h} {set J [expr $b*pow($h,3)*(0.333-0.21*($b/$h)*(1-pow($h/$b,4)/12))];}; 217 | 218 | if {$pflag==1} { 219 | puts "" 220 | puts [format "b: %.3fm h: %.3fm N:%.1fkN" $b $h $P]; 221 | puts [format "nu: %.3f" $nu]; 222 | puts [format "Izz: %.6fm4 Iyy: %.6fm4" $Izz $Iyy]; 223 | puts [format "EIyy: %.1fkNm2 EIzz: %.1fkNm2" $EIyy $EIzz]; 224 | } 225 | 226 | # -------------------------------------- 227 | # -- Compute the Yield Curvature ------- 228 | # -------------------------------------- 229 | # Assume square section and use PCK2007 expression 230 | set phiYzz [expr 2.1*$fyL/$Es/$h]; # Yield Curvature (rad/m) 231 | set phiYyy [expr 2.1*$fyL/$Es/$b]; # Yield Curvature (rad/m) 232 | 233 | if {$pflag==1} { 234 | puts "" 235 | puts [format "phiYzz: %.4f rad/m phiYyy: %.4f rad/m" $phiYzz $phiYyy]; 236 | 237 | } 238 | 239 | 240 | # -------------------------------------- 241 | # -- Compute the Nominal Moment -------- 242 | # -------------------------------------- 243 | MomentCurvature 1zz $h $b $cv $dbL $dbV [expr $k*$fc] $Ec $P $fyL $Es $rho_top1zz $rho_mid1zz $rho_bot1zz 244 | MomentCurvature 2zz $h $b $cv $dbL $dbV [expr $k*$fc] $Ec $P $fyL $Es $rho_top2zz $rho_mid2zz $rho_bot2zz 245 | MomentCurvature 1yy $b $h $cv $dbL $dbV [expr $k*$fc] $Ec $P $fyL $Es $rho_top1yy $rho_mid1yy $rho_bot1yy 246 | MomentCurvature 2yy $b $h $cv $dbL $dbV [expr $k*$fc] $Ec $P $fyL $Es $rho_top2yy $rho_mid2yy $rho_bot2yy 247 | 248 | set Kizz [expr $Myp1zz/$phiYzz]; # Initial cracked section stiffness about zz 249 | set Kiyy [expr $Myp1yy/$phiYyy]; # Initial cracked section stiffness about yy 250 | set EIrzz [expr $Kizz/$EIzz]; # Ratio of gross EI to get cracked section EI 251 | set EIryy [expr $Kiyy/$EIyy]; # Ratio of gross EI to get cracked section EI 252 | set EIzze [expr $EIrzz*$EIzz]; # Cracked EI about zz 253 | set EIyye [expr $EIryy*$EIyy]; # Cracked EI about yy 254 | set Izze [expr $EIrzz*$Izz]; # Cracked I about zz 255 | set Iyye [expr $EIryy*$Iyy]; # Cracked I about yy 256 | 257 | if {$pflag==1} { 258 | puts "" 259 | puts [format "EIrzz: %.3f EIryy: %.3f" $EIrzz $EIryy]; 260 | puts "" 261 | puts [format "Myp1zz: %.1fkNm Myp2zz: %.1fkNm Myp1yy: %.1fkNm Myp2yy: %.1fkNm" $Myp1zz $Myp2zz $Myp1yy $Myp2yy]; 262 | puts [format "Myn1zz: %.1fkNm Myn2zz: %.1fkNm Myn1yy: %.1fkNm Myn2yy: %.1fkNm" $Myn1zz $Myn2zz $Myn1yy $Myn2yy]; 263 | } 264 | 265 | # -------------------------------------- 266 | # -- Compute the Capping Moment -------- 267 | # -------------------------------------- 268 | set Mcp1zz [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myp1zz]; # p59 269 | set Mcp2zz [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myp2zz]; 270 | set Mcp1yy [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myp1yy]; 271 | set Mcp2yy [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myp2yy]; 272 | 273 | set Mcn1zz [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myn1zz]; # p59 274 | set Mcn2zz [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myn2zz]; 275 | set Mcn1yy [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myn1yy]; 276 | set Mcn2yy [expr 1.25*pow(0.89,$nu)*pow(0.91,0.01*$fc)*$Myn2yy]; 277 | 278 | if {$pflag==1} { 279 | puts "" 280 | puts [format "Mcp1zz: %.1fkNm Mcp2zz: %.1fkNm Mcp1yy: %.1fkNm Mcp2yy: %.1fkNm" $Mcp1zz $Mcp2zz $Mcp1yy $Mcp2yy]; 281 | puts [format "Mcn1zz: %.1fkNm Mcn2zz: %.1fkNm Mcn1yy: %.1fkNm Mcn2yy: %.1fkNm" $Mcn1zz $Mcn2zz $Mcn1yy $Mcn2yy]; 282 | } 283 | 284 | # -------------------------------------- 285 | # -- Compute the Ultimate Moment ------- 286 | # -------------------------------------- 287 | set Mup1zz [expr 0.1*$Myp1zz]; 288 | set Mup2zz [expr 0.1*$Myp2zz]; 289 | set Mup1yy [expr 0.1*$Myp1yy]; 290 | set Mup2yy [expr 0.1*$Myp2yy]; 291 | 292 | set Mun1zz [expr 0.1*$Myn1zz]; 293 | set Mun2zz [expr 0.1*$Myn2zz]; 294 | set Mun1yy [expr 0.1*$Myn1yy]; 295 | set Mun2yy [expr 0.1*$Myn2yy]; 296 | 297 | if {$pflag==1} { 298 | puts "" 299 | puts [format "Mup1zz: %.1fkNm Mup2zz: %.1fkNm Mup1yy: %.1fkNm Mup2yy: %.1fkNm" $Mup1zz $Mup2zz $Mup1yy $Mup2yy]; 300 | puts [format "Mun1zz: %.1fkNm Mun2zz: %.1fkNm Mun1yy: %.1fkNm Mun2yy: %.1fkNm" $Mun1zz $Mun2zz $Mun1yy $Mun2yy]; 301 | } 302 | 303 | # -------------------------------------- 304 | # -- Compute the Plastic Hinge Length -- 305 | # -------------------------------------- 306 | set Lp [expr 0.08*$Ls+0.022*$fyL*$dbL]; # Priestley + Park (1992) 307 | 308 | if {$pflag==1} { 309 | puts "" 310 | puts [format "Lp: %.4fm" $Lp]; 311 | } 312 | 313 | # -------------------------------------- 314 | # -- Compute the Ultimate Curvature ---- 315 | # -------------------------------------- 316 | set sn [expr $s/$dbL*pow(0.01*$fyL,0.5)]; # p xv 317 | 318 | set thetaCapPl1zz [expr 0.12*(1+$asl*0.55)*pow(0.16,$nu)*pow(0.02+40*$rho_shr,0.43)*pow(0.54,0.01*$fc)*pow(0.66,0.1*$sn)*pow(2.27,10*($rho_top1zz+$rho_mid1zz+$rho_bot1zz))]; # p40 319 | set thetaCapPl2zz [expr 0.12*(1+$asl*0.55)*pow(0.16,$nu)*pow(0.02+40*$rho_shr,0.43)*pow(0.54,0.01*$fc)*pow(0.66,0.1*$sn)*pow(2.27,10*($rho_top2zz+$rho_mid2zz+$rho_bot2zz))]; 320 | set thetaCapPl1yy [expr 0.12*(1+$asl*0.55)*pow(0.16,$nu)*pow(0.02+40*$rho_shr,0.43)*pow(0.54,0.01*$fc)*pow(0.66,0.1*$sn)*pow(2.27,10*($rho_top1yy+$rho_mid1yy+$rho_bot1yy))]; 321 | set thetaCapPl2yy [expr 0.12*(1+$asl*0.55)*pow(0.16,$nu)*pow(0.02+40*$rho_shr,0.43)*pow(0.54,0.01*$fc)*pow(0.66,0.1*$sn)*pow(2.27,10*($rho_top2yy+$rho_mid2yy+$rho_bot2yy))]; 322 | 323 | set phiC1zz [expr $thetaCapPl1zz/$Lp+$phiYzz]; 324 | set phiC2zz [expr $thetaCapPl2zz/$Lp+$phiYzz]; 325 | set phiC1yy [expr $thetaCapPl1yy/$Lp+$phiYyy]; 326 | set phiC2yy [expr $thetaCapPl2yy/$Lp+$phiYyy]; 327 | 328 | if {$pflag==1} { 329 | puts "" 330 | puts [format "phiC1zz: %.3frad/m phiC2zz: %.3frad/m phiC1yy: %.3frad/m phiC2yy: %.3frad/m" $phiC1zz $phiC2zz $phiC1yy $phiC2yy]; 331 | } 332 | 333 | # -------------------------------------- 334 | # -- Compute the Capping Curvature ----- 335 | # -------------------------------------- 336 | set thetaPc [expr 0.76*pow(0.031,$nu)*pow(0.02+40*$rho_shr,1.02)]; # p54 337 | if {$thetaPc > 0.10 } {set thetaPc 0.1} 338 | 339 | set phiU1zz [expr $phiC1zz+$thetaPc/$Lp]; 340 | set phiU2zz [expr $phiC2zz+$thetaPc/$Lp]; 341 | set phiU1yy [expr $phiC1yy+$thetaPc/$Lp]; 342 | set phiU2yy [expr $phiC2yy+$thetaPc/$Lp]; 343 | 344 | if {$pflag==1} { 345 | puts "" 346 | puts [format "phiU1zz: %.3frad/m phiU2zz: %.3frad/m phiU1yy: %.3frad/m phiU2yy: %.3frad/m" $phiU1zz $phiU2zz $phiU1yy $phiU2yy]; 347 | } 348 | 349 | # -------------------------------------- 350 | # -- Compute Stiffness Deterioration --- 351 | # -------------------------------------- 352 | set Lambdazz [expr 170.7*pow(0.27,$nu)*pow(0.1,$s/$dzz)]; # p65 353 | set Lambdayy [expr 170.7*pow(0.27,$nu)*pow(0.1,$s/$dyy)]; 354 | # also see comments on p9 355 | if {$pflag==1} { 356 | puts "" 357 | puts [format "Lambdazz: %.3f Lambdayy: %.3f" $Lambdazz $Lambdayy]; 358 | } 359 | 360 | # -------------------------------------- 361 | # -- Compute Hardening Ratio ---------- 362 | # -------------------------------------- 363 | set Ksp1zz [expr ($Mcp1zz-$Myp1zz)/($phiC1zz-$phiYzz)/$Myp1zz*$phiYzz]; 364 | set Ksp2zz [expr ($Mcp2zz-$Myp2zz)/($phiC2zz-$phiYzz)/$Myp2zz*$phiYzz]; 365 | set Ksp1yy [expr ($Mcp1yy-$Myp1yy)/($phiC1yy-$phiYyy)/$Myp1yy*$phiYyy]; 366 | set Ksp2yy [expr ($Mcp2yy-$Myp2yy)/($phiC2yy-$phiYyy)/$Myp2yy*$phiYyy]; 367 | 368 | set Ksn1zz [expr ($Mcn1zz-$Myn1zz)/($phiC1zz-$phiYzz)/$Myn1zz*$phiYzz]; 369 | set Ksn2zz [expr ($Mcn2zz-$Myn2zz)/($phiC2zz-$phiYzz)/$Myn2zz*$phiYzz]; 370 | set Ksn1yy [expr ($Mcn1yy-$Myn1yy)/($phiC1yy-$phiYyy)/$Myn1yy*$phiYyy]; 371 | set Ksn2yy [expr ($Mcn2yy-$Myn2yy)/($phiC2yy-$phiYyy)/$Myn2yy*$phiYyy]; 372 | 373 | if {$pflag==1} { 374 | puts "" 375 | puts [format "Ksp1zz: %.3f Ksp2zz: %.3f Ksp1yy: %.3f Ksp2yy: %.3f" $Ksp1zz $Ksp2zz $Ksp1yy $Ksp2yy]; 376 | puts [format "Ksn1zz: %.3f Ksn2zz: %.3f Ksn1yy: %.3f Ksn2yy: %.3f" $Ksn1zz $Ksn2zz $Ksn1yy $Ksn2yy]; 377 | } 378 | 379 | # -------------------------------------- 380 | # -- Print Some Output ---------------- 381 | # -------------------------------------- 382 | puts $pfile [format "Element %d between nodes %d and %d. Myp1zz: %.1f kNm Myp2zz: %.1f kNm Myp1yy: %.1f kNm Myp2yy: %.1f kNm Myn1zz: %.1f kNm Myn2zz: %.1f kNm Myn1yy: %.1f kNm Myn2yy: %.1f kNm Mcp1zz: %.1f kNm Mcp2zz: %.1f kNm Mcp1yy: %.1f kNm Mcp2yy: %.1f kNm Mcn1zz: %.1f kNm Mcn2zz: %.1f kNm Mcn1yy: %.1f kNm Mcn2yy: %.1f kNm Mup1zz: %.1f kNm Mup2zz: %.1f kNm Mup1yy: %.1f kNm Mup2yy: %.1f kNm Mun1zz: %.1f kNm Mun2zz: %.1f kNm Mun1yy: %.1f kNm Mun2yy: %.1f kNm phiYzz: %.4f rad/m phiYyy: %.4f rad/m phiC1zz: %.3f rad/m phiC2zz: %.3f rad/m phiC1yy: %.3f rad/m phiC2yy: %.3f rad/m phiU1zz: %.3f rad/m phiU2zz: %.3f rad/m phiU1yy: %.3f rad/m phiU2yy: %.3f rad/m thetaCapPl1zz: %.3f rad thetaCapPl2zz: %.3f rad thetaCapPl1yy: %.3f rad thetaCapPl2yy: %.3f rad thetaPc: %.3f rad Lp: %.4f m Lambdazz: %.3f Lambdayy: %.3f nu: %.3f EIrzz: %.3f EIryy: %.3f" $ET $iNode $jNode $Myp1zz $Myp2zz $Myp1yy $Myp2yy $Myn1zz $Myn2zz $Myn1yy $Myn2yy $Mcp1zz $Mcp2zz $Mcp1yy $Mcp2yy $Mcn1zz $Mcn2zz $Mcn1yy $Mcn2yy $Mup1zz $Mup2zz $Mup1yy $Mup2yy $Mun1zz $Mun2zz $Mun1yy $Mun2yy $phiYzz $phiYyy $phiC1zz $phiC2zz $phiC1yy $phiC2yy $phiU1zz $phiU2zz $phiU1yy $phiU2yy $thetaCapPl1zz $thetaCapPl2zz $thetaCapPl1yy $thetaCapPl2yy $thetaPc $Lp $Lambdazz $Lambdayy $nu $EIrzz $EIryy]; 383 | 384 | # -------------------------------------- 385 | # -- Create the Material Model --------- 386 | # -------------------------------------- 387 | set hingeMTag1zz 101${ET}; # Create an nonlinear material for the flexural hinge to be aggregated to the actual PH 388 | set hingeMTag2zz 102${ET}; # Create an nonlinear material for the flexural hinge to be aggregated to the actual PH 389 | set hingeMTag1yy 103${ET}; # Create an nonlinear material for the flexural hinge to be aggregated to the actual PH 390 | set hingeMTag2yy 104${ET}; # Create an nonlinear material for the flexural hinge to be aggregated to the actual PH 391 | 392 | # Material Model 393 | set K0 [expr $Myp1zz/$phiYzz]; # elastic stiffness 394 | set as_Plus $Ksp1zz; # strain hardening ratio for positive loading direction 395 | set as_Neg $Ksp1zz; # strain hardening ratio for negative loading direction 396 | set My_Plus $Myp1zz; # effective yield strength for positive loading direction 397 | set My_Neg -$Myn1zz; # effective yield strength for negative loading direction (negative value) 398 | set Lamda_S $Lambdazz; # Cyclic deterioration parameter for strength deterioration [see definitions in Lignos and Krawinkler (2011)] 399 | set Lamda_C $Lambdazz; # Cyclic deterioration parameter for post-capping strength deterioration [see definitions in Lignos and Krawinkler (2011)] 400 | set Lamda_A 0.0; # Cyclic deterioration parameter for acceleration reloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 401 | set Lamda_K 0.0; # Cyclic deterioration parameter for unloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 402 | set c_S 1.0; # rate of strength deterioration. The default value is 1.0. 403 | set c_C 1.0; # rate of post-capping strength deterioration. The default value is 1.0. 404 | set c_A 0.0; # rate of accelerated reloading deterioration. The default value is 1.0. 405 | set c_K 0.0; # rate of unloading stiffness deterioration. The default value is 1.0. 406 | set phi_p_Plus [expr $phiC1zz-$phiYzz]; # pre-capping rotation for positive loading direction (often noted as plastic rotation capacity) 407 | set phi_p_Neg [expr $phiC1zz-$phiYzz]; # pre-capping rotation for negative loading direction (often noted as plastic rotation capacity) (must be defined as a positive value) 408 | set phi_pc_Plus [expr $phiU1zz-$phiC1zz]; # post-capping rotation for positive loading direction 409 | set phi_pc_Neg [expr $phiU1zz-$phiC1zz]; # post-capping rotation for negative loading direction (must be defined as a positive value) 410 | set Res_Pos [expr $Mup1zz/$Myp1zz]; # residual strength ratio for positive loading direction 411 | set Res_Neg [expr $Mun1zz/$Myn1zz]; # residual strength ratio for negative loading direction (must be defined as a positive value) 412 | set phi_u_Plus [expr 2*$phiU1zz]; # ultimate rotation capacity for positive loading direction 413 | set phi_u_Neg [expr 2*$phiU1zz]; # ultimate rotation capacity for negative loading direction (must be defined as a positive value) 414 | set D_Plus 1.0; # rate of cyclic deterioration in the positive loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 415 | set D_Neg 1.0; # rate of cyclic deterioration in the negative loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 416 | uniaxialMaterial ModIMKPeakOriented $hingeMTag1zz $K0 $as_Plus $as_Neg $My_Plus $My_Neg $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K $phi_p_Plus $phi_p_Neg $phi_pc_Plus $phi_pc_Neg $Res_Pos $Res_Neg $phi_u_Plus $phi_u_Neg $D_Plus $D_Neg 417 | 418 | set K0 [expr $Myp2zz/$phiYzz]; # elastic stiffness 419 | set as_Plus $Ksp2zz; # strain hardening ratio for positive loading direction 420 | set as_Neg $Ksp2zz; # strain hardening ratio for negative loading direction 421 | set My_Plus $Myp2zz; # effective yield strength for positive loading direction 422 | set My_Neg -$Myn2zz; # effective yield strength for negative loading direction (negative value) 423 | set Lamda_S $Lambdazz; # Cyclic deterioration parameter for strength deterioration [see definitions in Lignos and Krawinkler (2011)] 424 | set Lamda_C $Lambdazz; # Cyclic deterioration parameter for post-capping strength deterioration [see definitions in Lignos and Krawinkler (2011)] 425 | set Lamda_A 0.0; # Cyclic deterioration parameter for acceleration reloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 426 | set Lamda_K 0.0; # Cyclic deterioration parameter for unloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 427 | set c_S 1.0; # rate of strength deterioration. The default value is 1.0. 428 | set c_C 1.0; # rate of post-capping strength deterioration. The default value is 1.0. 429 | set c_A 0.0; # rate of accelerated reloading deterioration. The default value is 1.0. 430 | set c_K 0.0; # rate of unloading stiffness deterioration. The default value is 1.0. 431 | set phi_p_Plus [expr $phiC2zz-$phiYzz]; # pre-capping rotation for positive loading direction (often noted as plastic rotation capacity) 432 | set phi_p_Neg [expr $phiC2zz-$phiYzz]; # pre-capping rotation for negative loading direction (often noted as plastic rotation capacity) (must be defined as a positive value) 433 | set phi_pc_Plus [expr $phiU2zz-$phiC2zz]; # post-capping rotation for positive loading direction 434 | set phi_pc_Neg [expr $phiU2zz-$phiC2zz]; # post-capping rotation for negative loading direction (must be defined as a positive value) 435 | set Res_Pos [expr $Mup2zz/$Myp2zz]; # residual strength ratio for positive loading direction 436 | set Res_Neg [expr $Mun2zz/$Myn2zz]; # residual strength ratio for negative loading direction (must be defined as a positive value) 437 | set phi_u_Plus [expr 2*$phiU2zz]; # ultimate rotation capacity for positive loading direction 438 | set phi_u_Neg [expr 2*$phiU2zz]; # ultimate rotation capacity for negative loading direction (must be defined as a positive value) 439 | set D_Plus 1.0; # rate of cyclic deterioration in the positive loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 440 | set D_Neg 1.0; # rate of cyclic deterioration in the negative loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 441 | uniaxialMaterial ModIMKPeakOriented $hingeMTag2zz $K0 $as_Plus $as_Neg $My_Plus $My_Neg $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K $phi_p_Plus $phi_p_Neg $phi_pc_Plus $phi_pc_Neg $Res_Pos $Res_Neg $phi_u_Plus $phi_u_Neg $D_Plus $D_Neg 442 | 443 | set K0 [expr $Myp1yy/$phiYyy]; # elastic stiffness 444 | set as_Plus $Ksp1yy; # strain hardening ratio for positive loading direction 445 | set as_Neg $Ksp1yy; # strain hardening ratio for negative loading direction 446 | set My_Plus $Myp1yy; # effective yield strength for positive loading direction 447 | set My_Neg -$Myn1yy; # effective yield strength for negative loading direction (negative value) 448 | set Lamda_S $Lambdayy; # Cyclic deterioration parameter for strength deterioration [see definitions in Lignos and Krawinkler (2011)] 449 | set Lamda_C $Lambdayy; # Cyclic deterioration parameter for post-capping strength deterioration [see definitions in Lignos and Krawinkler (2011)] 450 | set Lamda_A 0.0; # Cyclic deterioration parameter for acceleration reloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 451 | set Lamda_K 0.0; # Cyclic deterioration parameter for unloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 452 | set c_S 1.0; # rate of strength deterioration. The default value is 1.0. 453 | set c_C 1.0; # rate of post-capping strength deterioration. The default value is 1.0. 454 | set c_A 0.0; # rate of accelerated reloading deterioration. The default value is 1.0. 455 | set c_K 0.0; # rate of unloading stiffness deterioration. The default value is 1.0. 456 | set phi_p_Plus [expr $phiC1yy-$phiYyy]; # pre-capping rotation for positive loading direction (often noted as plastic rotation capacity) 457 | set phi_p_Neg [expr $phiC1yy-$phiYyy]; # pre-capping rotation for negative loading direction (often noted as plastic rotation capacity) (must be defined as a positive value) 458 | set phi_pc_Plus [expr $phiU1yy-$phiC1yy]; # post-capping rotation for positive loading direction 459 | set phi_pc_Neg [expr $phiU1yy-$phiC1yy]; # post-capping rotation for negative loading direction (must be defined as a positive value) 460 | set Res_Pos [expr $Mup1yy/$Myp1yy]; # residual strength ratio for positive loading direction 461 | set Res_Neg [expr $Mun1yy/$Myn1yy]; # residual strength ratio for negative loading direction (must be defined as a positive value) 462 | set phi_u_Plus [expr 2*$phiU1yy]; # ultimate rotation capacity for positive loading direction 463 | set phi_u_Neg [expr 2*$phiU1yy]; # ultimate rotation capacity for negative loading direction (must be defined as a positive value) 464 | set D_Plus 1.0; # rate of cyclic deterioration in the positive loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 465 | set D_Neg 1.0; # rate of cyclic deterioration in the negative loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 466 | uniaxialMaterial ModIMKPeakOriented $hingeMTag1yy $K0 $as_Plus $as_Neg $My_Plus $My_Neg $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K $phi_p_Plus $phi_p_Neg $phi_pc_Plus $phi_pc_Neg $Res_Pos $Res_Neg $phi_u_Plus $phi_u_Neg $D_Plus $D_Neg 467 | 468 | set K0 [expr $Myp2yy/$phiYyy]; # elastic stiffness 469 | set as_Plus $Ksp2yy; # strain hardening ratio for positive loading direction 470 | set as_Neg $Ksp2yy; # strain hardening ratio for negative loading direction 471 | set My_Plus $Myp2yy; # effective yield strength for positive loading direction 472 | set My_Neg -$Myn2yy; # effective yield strength for negative loading direction (negative value) 473 | set Lamda_S $Lambdayy; # Cyclic deterioration parameter for strength deterioration [see definitions in Lignos and Krawinkler (2011)] 474 | set Lamda_C $Lambdayy; # Cyclic deterioration parameter for post-capping strength deterioration [see definitions in Lignos and Krawinkler (2011)] 475 | set Lamda_A 0.0; # Cyclic deterioration parameter for acceleration reloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 476 | set Lamda_K 0.0; # Cyclic deterioration parameter for unloading stiffness deterioration [see definitions in Lignos and Krawinkler (2011)] 477 | set c_S 1.0; # rate of strength deterioration. The default value is 1.0. 478 | set c_C 1.0; # rate of post-capping strength deterioration. The default value is 1.0. 479 | set c_A 0.0; # rate of accelerated reloading deterioration. The default value is 1.0. 480 | set c_K 0.0; # rate of unloading stiffness deterioration. The default value is 1.0. 481 | set phi_p_Plus [expr $phiC2yy-$phiYyy]; # pre-capping rotation for positive loading direction (often noted as plastic rotation capacity) 482 | set phi_p_Neg [expr $phiC2yy-$phiYyy]; # pre-capping rotation for negative loading direction (often noted as plastic rotation capacity) (must be defined as a positive value) 483 | set phi_pc_Plus [expr $phiU2yy-$phiC2yy]; # post-capping rotation for positive loading direction 484 | set phi_pc_Neg [expr $phiU2yy-$phiC2yy]; # post-capping rotation for negative loading direction (must be defined as a positive value) 485 | set Res_Pos [expr $Mup2yy/$Myp2yy]; # residual strength ratio for positive loading direction 486 | set Res_Neg [expr $Mun2yy/$Myn2yy]; # residual strength ratio for negative loading direction (must be defined as a positive value) 487 | set phi_u_Plus [expr 2*$phiU2yy]; # ultimate rotation capacity for positive loading direction 488 | set phi_u_Neg [expr 2*$phiU2yy]; # ultimate rotation capacity for negative loading direction (must be defined as a positive value) 489 | set D_Plus 1.0; # rate of cyclic deterioration in the positive loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 490 | set D_Neg 1.0; # rate of cyclic deterioration in the negative loading direction (this parameter is used to create assymetric hysteretic behavior for the case of a composite beam). For symmetric hysteretic response use 1.0. 491 | uniaxialMaterial ModIMKPeakOriented $hingeMTag2yy $K0 $as_Plus $as_Neg $My_Plus $My_Neg $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K $phi_p_Plus $phi_p_Neg $phi_pc_Plus $phi_pc_Neg $Res_Pos $Res_Neg $phi_u_Plus $phi_u_Neg $D_Plus $D_Neg 492 | 493 | 494 | # -------------------------------------- 495 | # -- Create the Element --------------- 496 | # -------------------------------------- 497 | set intTag 105${ET}; # Internal elastic section tag 498 | set fTag1zz 106${ET}; # Section tag Mzz 1 499 | set fTag2zz 107${ET}; # Section tag Mzz 2 500 | set fTag1yy 108${ET}; # Section tag Myy 1 501 | set fTag2yy 109${ET}; # Section tag Myy 2 502 | set axialMTag 110${ET}; # Create an elastic material for the actual hinge to be aggregated to the actual PH 503 | 504 | set phTag1 111${ET}; # Create an aggregated section with this tag for the actual element 505 | set phTag2 112${ET}; # Create an aggregated section with this tag for the actual element 506 | set tempTag 113${ET}; # temporary section tag to be used in creating bidirectional response 507 | 508 | # Create the internal elastic element behaviour 509 | section Elastic $intTag [expr $Ec*1000] $Ag $Izze $Iyye $Gc $J 510 | 511 | # Create the plastic hinge section 512 | section Uniaxial $fTag1zz $hingeMTag1zz Mz; # Create the PH flexural section about ZZ 513 | section Uniaxial $fTag2zz $hingeMTag2zz Mz; # Create the PH flexural section about ZZ 514 | uniaxialMaterial Elastic $axialMTag [expr $Ec*$Ag*1000]; # Create the PH axial material 515 | 516 | section Aggregator $phTag1 $axialMTag P $hingeMTag1yy My -section $fTag1zz; # Aggregate P and Myy behaviour to Mzz behaviour 517 | section Aggregator $phTag2 $axialMTag P $hingeMTag2yy My -section $fTag2zz; # Aggregate P and Myy behaviour to Mzz behaviour 518 | 519 | # Create the whole element 520 | # element forceBeamColumn $eleTag $iNode $jNode $transfTag "HingeRadau $secTagI $LpI $secTagJ $LpJ $secTagInterior" <-mass $massDens> <-iter $maxIters $tol> 521 | element forceBeamColumn $ET $iNode $jNode $GT "HingeRadau $phTag1 $Lp $phTag2 $Lp $intTag" 522 | # element elasticBeamColumn $ET $iNode $jNode $A [expr $Ec*1000] $Gc 0.01 [expr $Iyy*$EIratio] [expr $Izz*$EIratio] $GT 523 | 524 | } 525 | -------------------------------------------------------------------------------- /runNRHA1D.tcl: -------------------------------------------------------------------------------- 1 | # Procedure to carry out a dynamic analysis of a model for 1D models 2 | # Gerard O'Reilly 3 | # EUCENTRE/IUSSPavia 4 | # Date Created: April 2012 5 | # Last Updated: December 2016 6 | # The coding is still pretty slap dash, but it does the job 7 | 8 | proc runNRHA1D {Dt Tmax Dc aNode bNode log {pflag 0}} { 9 | # -------------------------------------------------- 10 | # Description of Parameters 11 | # -------------------------------------------------- 12 | # Dt: Timestep of the analysis 13 | # Tmax: Length of the Record (Including Padding of 0's) 14 | # Dc: Displacement Capacity for both Interstorey and Roof Drift(rad) 15 | # aNode: Free Node 16 | # bNode: Fixed node 17 | # log: File handle of the logfile 18 | # -------------------------------------------------- 19 | upvar 1 cIndex cIndex 20 | if {$pflag>0} { 21 | puts "Starting runNRHA" 22 | } 23 | # Define the Initial Analysis Parameters 24 | set testType NormDispIncr; # Set the test type 25 | set tolInit 1.0e-7; # Set the initial Tolerance, so it can be referred back to 26 | set iterInit 50; # Set the initial Max Number of Iterations 27 | set algorithmType KrylovNewton; # Set the algorithm type 28 | 29 | test $testType $tolInit $iterInit 30 | algorithm $algorithmType 31 | integrator Newmark 0.5 0.25 32 | analysis Transient 33 | 34 | # Set up analysis parameters 35 | set Nsteps [expr int($Tmax/$Dt)]; # integer of the number of steps needed 36 | set cIndex 0; # Initially define the control index (-1 for non-converged, 0 for stable, 1 for global collapse, 2 for local collapse) 37 | set controlTime 0.0; # Start the controlTime 38 | set ok 0; # Set the convergence to 0 (converged) 39 | set Dtt $Dt 40 | # Set up initials 41 | set mdef 0.0; 42 | 43 | # Run the actual analysis now 44 | while {$cIndex==0 && $controlTime <= $Tmax && $ok==0} { 45 | # Runs while the building is stable, time is less 46 | # than that of the length of the record (plus buffering) 47 | # and the analysis is still converging 48 | 49 | # Do the analysis 50 | set ok [analyze 1 $Dtt]; # Run a step of the analysis 51 | set controlTime [getTime]; # Update the control time 52 | if {$pflag>1} { 53 | puts "Completed $controlTime of $Tmax seconds" 54 | } 55 | 56 | # Check the actual state of the model with respect to the limits provided 57 | 58 | # Check the drifts 59 | set aNode_def [nodeDisp $aNode 1]; # Current top node disp 60 | set bNode_def [nodeDisp $bNode 1]; # Current bottom node disp 61 | set cdef [expr abs($aNode_def-$bNode_def)]; # Current disp 62 | if {$cdef>=$mdef} {set mdef $cdef}; 63 | if {$cdef>$mdef} {set mdef $cdef; set mflr $i}; # Update the current maximum 64 | 65 | if {$mdef>=$Dc} {set cIndex 1; set mdef $Dc; wipe}; # Set the state of the model to local collapse (=2) 66 | 67 | # If the analysis fails, try the following changes to achieve convergence 68 | # Analysis will be slower in here though... 69 | 70 | # First changes are to change algorithm to achieve convergence... 71 | # Next half the timestep with both algorithm and tolerance reduction, if this doesn't work - in bocca al lupo 72 | if {$ok != 0} { 73 | puts "Failed at $controlTime - Reduced timestep by half......" 74 | set Dtt [expr 0.5*$Dt] 75 | set ok [analyze 1 $Dtt] 76 | set Dtt [expr $Dt] 77 | } 78 | if {$ok != 0} { 79 | puts "Failed at $controlTime - Reduced timestep by quarter......" 80 | set Dtt [expr 0.25*$Dtt] 81 | set ok [analyze 1 $Dtt] 82 | set Dtt [expr $Dt] 83 | } 84 | if {$ok != 0} { 85 | puts "Failed at $controlTime - Trying Broyden......" 86 | algorithm Broyden 8 87 | set ok [analyze 1 $Dtt] 88 | algorithm $algorithmType 89 | set Dtt [expr $Dt] 90 | } 91 | if {$ok != 0} { 92 | puts "Failed at $controlTime - Trying Newton with Initial Tangent ......" 93 | algorithm Newton -initial 94 | set ok [analyze 1 $Dtt] 95 | algorithm $algorithmType 96 | set Dtt [expr $Dt] 97 | } 98 | if {$ok != 0} { 99 | puts "Failed at $controlTime - Trying NewtonWithLineSearch......" 100 | algorithm NewtonLineSearch .8 101 | set ok [analyze 1 $Dtt] 102 | algorithm $algorithmType 103 | set Dtt [expr $Dt] 104 | } 105 | # Next change both algorithm and tolerance to achieve convergence.... 106 | if {$ok != 0} { 107 | puts "Failed at $controlTime - Trying Newton with Initial Tangent & relaxed convergence......" 108 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 109 | algorithm Newton -initial 110 | set ok [analyze 1 $Dtt] 111 | test $testType $tolInit $iterInit 112 | algorithm $algorithmType 113 | set Dtt [expr $Dt] 114 | } 115 | if {$ok != 0} { 116 | puts "Failed at $controlTime - Trying Newton with Initial Tangent & relaxed convergence......" 117 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 118 | algorithm Newton -initial 119 | set ok [analyze 1 $Dtt] 120 | test $testType $tolInit $iterInit 121 | algorithm $algorithmType 122 | set Dtt [expr $Dt] 123 | } 124 | if {$ok != 0} { 125 | puts "Failed at $controlTime - Trying NewtonWithLineSearch & relaxed convergence......" 126 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 127 | algorithm NewtonLineSearch .8 128 | set ok [analyze 1 $Dtt] 129 | test $testType $tolInit $iterInit 130 | algorithm $algorithmType 131 | set Dtt [expr $Dt] 132 | } 133 | # Next half the timestep with both algorithm and tolerance reduction, if this doesn't work - in bocca al lupo 134 | if {$ok != 0} { 135 | puts "Failed at $controlTime - Trying Newton with Initial Tangent, reduced timestep & relaxed convergence......" 136 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 137 | algorithm Newton -initial 138 | set Dtt [expr 0.5*$Dt] 139 | set ok [analyze 1 $Dtt] 140 | test $testType $tolInit $iterInit 141 | algorithm $algorithmType 142 | set Dtt [expr $Dt] 143 | } 144 | if {$ok != 0} { 145 | puts "Failed at $controlTime - Trying Newton with Initial Tangent, reduced timestep & relaxed convergence......" 146 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 147 | algorithm Newton -initial 148 | set Dtt [expr 0.5*$Dt] 149 | set ok [analyze 1 $Dtt] 150 | test $testType $tolInit $iterInit 151 | algorithm $algorithmType 152 | set Dtt [expr $Dt] 153 | } 154 | if {$ok != 0} { 155 | puts "Failed at $controlTime - Trying NewtonWithLineSearch, reduced timestep & relaxed convergence......" 156 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 157 | algorithm NewtonLineSearch .8 158 | set Dtt [expr 0.5*$Dt] 159 | set ok [analyze 1 $Dtt] 160 | test $testType $tolInit $iterInit 161 | algorithm $algorithmType 162 | set Dtt [expr $Dt] 163 | } 164 | # One last hail mary could be to try and introduce some numerical damping with the HHT 165 | if {$ok != 0} { 166 | puts "Failed at $controlTime - Introduce some numerical damping with HHT integrator......" 167 | integrator HHT 0.8 168 | set ok [analyze 1 $Dtt] 169 | integrator Newmark 0.5 0.25 170 | set Dtt [expr $Dt] 171 | } 172 | 173 | if {$ok !=0} { 174 | # Failed to converge, exit analysis 175 | wipe; 176 | set cIndex -1; 177 | } 178 | } 179 | 180 | # Create some output 181 | puts $log [format "FinalState:%d at %.3f of %.3f seconds" $cIndex $controlTime $Tmax]; # Print to the logfile the final state 182 | puts $log [format "Peak Deformation:%.4f rad" $mdef]; # Print to the max 183 | 184 | if {$pflag>0} { 185 | puts [format "Peak Deformation: %.4f" $mdef]; # Print to the max 186 | } 187 | if {$cIndex == -1} {puts ":::::: ANALYSIS FAILED TO CONVERGE at $controlTime of $Tmax :::::"} 188 | if {$cIndex == 0} {puts "######## ANALYSIS COMPLETED SUCCESSFULLY #####"} 189 | if {$cIndex == 1} { puts "========== LOCAL STRUCTURE COLLAPSE =========="} 190 | 191 | 192 | } 193 | -------------------------------------------------------------------------------- /runNRHA3D.tcl: -------------------------------------------------------------------------------- 1 | # ---------------------------------------------------------------- 2 | # -- Script to Conduct 3D Non-linear Response History Analysis --- 3 | # ---------------------------------------------------------------- 4 | # Copyright by Gerard J. O'Reilly, 2017 5 | # EUCENTRE and IUSS Pavia, Italy 6 | # Date Created: April 2012 7 | # Last Updated: May 2017 8 | 9 | # This procedure is a simple script that executes the NRHA of a 3D model. It 10 | # requires that the model has the dynamic analysis objects defined and just the 11 | # 'analyze' of a regular OpenSees model needs to be executed. Therefore, the model 12 | # needs to be built to the point where a modal analysis can be conducted. The 13 | # ground motion timeSeries and pattern need to be setup and the constraints, 14 | # numberer and system analysis objects also need to be predefined. 15 | 16 | # When conducting the NRHA, this proc will try different options to achieve 17 | # convergence and finish the ground motion. This allows for a relatively robust 18 | # analysis algorithm to be implemented with a single command. 19 | 20 | # In addition, the analysis requires that a deformation capacity be specified 21 | # to define a limit that upon exceedance, will stop the NRHA and mark the 22 | # analysis as a collapse case. It monitors the current deformation of a number 23 | # of specified nodes and flags collapse based on their deforormation. This 24 | # prevents the models getting 'stuck' trying to converge a model that has 25 | # essentially collapsed, or would be deemed a collapse case in post processing. 26 | # These are defined in terms of both the local storey drifts and also the roof 27 | # drift in either direction. For 3D analysis, the absolute maximum drift in 28 | # either direction is used. Other definitions are possible but not yet implemented. 29 | 30 | # Lastly, a log file identifier is also required in the input. This will log 31 | # all of the essential information about the maximum storey drifts. This script 32 | # was developed for analysing buildings so the deformation capacity typically 33 | # corresponds to a drift capacity and the top and bottom nodes would typically 34 | # correspond to the centreline nodes of the floorslabs. 35 | 36 | # WARNING: The acceleration values that are ouput from this are the relative 37 | # accelerations. For some reason, you cant get the current absolute values with 38 | # inline commands. 39 | 40 | proc runNRHA3D {Dt Tmax Dc tNode bNode log {pflag 0}} { 41 | if {$pflag>0} {puts "Starting runNRHA"}; 42 | # -------------------------------------------------- 43 | # Description of Parameters 44 | # -------------------------------------------------- 45 | # Dt: Analysis time step 46 | # Tmax: Length of the record (including padding of 0's) 47 | # Dc: Deformation capacity (radians or metres) 48 | # tNode: List of top nodes (e.g. {2 3 4 5}) 49 | # bNode: List of bottom node (e.g. {1 2 3 4}) 50 | # log: File handle of the logfile 51 | # -------------------------------------------------- 52 | 53 | # Make the control index available outside the proc 54 | upvar 1 cIndex cIndex 55 | 56 | # Define the initial Analysis parameters 57 | set testType NormDispIncr; # Set the test type 58 | set tolInit 1.0e-7; # Set the initial tolerance, so it can be referred back to 59 | set iterInit 50; # Set the initial max number of iterations 60 | set algorithmType KrylovNewton; # Set the algorithm type 61 | test $testType $tolInit $iterInit 62 | algorithm $algorithmType 63 | integrator Newmark 0.5 0.25 64 | analysis Transient 65 | 66 | # Set up analysis parameters 67 | set Nsteps [expr int($Tmax/$Dt)]; # integer of the number of steps needed 68 | set cIndex 0; # Initially define the control index (-1 for non-converged, 0 for stable, 1 for global collapse, 2 for local collapse) 69 | set controlTime 0.0; # Start the controlTime 70 | set ok 0; # Set the convergence to 0 (initially converged) 71 | set md 0.0; # Set the initial storey drift 72 | set mflr 0; # Set the initial storey collapse location 73 | 74 | # Set up the storey drift and acceleration values 75 | set h {}; 76 | set mdX {}; 77 | set mdY {}; 78 | set bdg_h 0.0; 79 | for {set i 1} {$i<=[llength $tNode]} {incr i 1} { 80 | # Find the coordinates of the nodes in Global Z (3) 81 | set top2 [nodeCoord [lindex $tNode $i-1] 3]; 82 | set bot2 [nodeCoord [lindex $bNode $i-1] 3]; 83 | set dist [expr $top2-$bot2]; 84 | 85 | # Calculate the building height as the running sum of the distances 86 | # between nodes specified 87 | set bdg_h [expr $bdg_h+$dist]; 88 | 89 | # This means we take the distance in Z (3) in my coordinates systems at least. This is X-Y/Z| so X=1 Y=2 Z=3. (gli altri vacca gare) 90 | lappend h $dist; 91 | lappend mdX 0.0; # We will populate the lists with zeros initially 92 | lappend mdY 0.0; 93 | if {$dist==0} {puts "WARNING: Zerolength found in drift check"}; 94 | } 95 | 96 | # Run the actual analysis now 97 | while {$cIndex==0 && $controlTime <= $Tmax && $ok==0} { 98 | # Runs while the building is stable, time is less 99 | # than that of the length of the record (plus buffering) 100 | # and the analysis is still converging 101 | 102 | # Do the analysis 103 | set ok [analyze 1 $Dt]; # Run a step of the analysis 104 | set controlTime [getTime]; # Update the control time 105 | if {$pflag>1} {puts "Completed $controlTime of $Tmax seconds"} 106 | 107 | # If the analysis fails, try the following changes to achieve convergence 108 | # Analysis will be slower in here though... 109 | 110 | # First changes are to change algorithm to achieve convergence... 111 | if {$ok != 0} { 112 | puts " ~~~ Failed at $controlTime - Reduced timestep by half......" 113 | set Dtt [expr 0.5*$Dt] 114 | set ok [analyze 1 $Dtt] 115 | } 116 | if {$ok != 0} { 117 | puts " ~~~ Failed at $controlTime - Reduced timestep by quarter......" 118 | set Dtt [expr 0.25*$Dt] 119 | set ok [analyze 1 $Dtt] 120 | } 121 | if {$ok != 0} { 122 | puts " ~~~ Failed at $controlTime - Trying Broyden......" 123 | algorithm Broyden 8 124 | set ok [analyze 1 $Dt] 125 | algorithm $algorithmType 126 | } 127 | if {$ok != 0} { 128 | puts " ~~~ Failed at $controlTime - Trying Newton with Initial Tangent ......" 129 | algorithm Newton -initial 130 | set ok [analyze 1 $Dt] 131 | algorithm $algorithmType 132 | } 133 | if {$ok != 0} { 134 | puts " ~~~ Failed at $controlTime - Trying NewtonWithLineSearch......" 135 | algorithm NewtonLineSearch .8 136 | set ok [analyze 1 $Dt] 137 | algorithm $algorithmType 138 | } 139 | if {$ok != 0} { 140 | puts " ~~~ Failed at $controlTime - Trying Newton with Initial Tangent & relaxed convergence......" 141 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 142 | algorithm Newton -initial 143 | set ok [analyze 1 $Dt] 144 | test $testType $tolInit $iterInit 145 | algorithm $algorithmType 146 | } 147 | if {$ok != 0} { 148 | puts " ~~~ Failed at $controlTime - Trying Newton with Initial Tangent & relaxed convergence......" 149 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 150 | algorithm Newton -initial 151 | set ok [analyze 1 $Dt] 152 | test $testType $tolInit $iterInit 153 | algorithm $algorithmType 154 | } 155 | if {$ok != 0} { 156 | puts " ~~~ Failed at $controlTime - Trying NewtonWithLineSearch & relaxed convergence......" 157 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 158 | algorithm NewtonLineSearch .8 159 | set ok [analyze 1 $Dt] 160 | test $testType $tolInit $iterInit 161 | algorithm $algorithmType 162 | } 163 | if {$ok != 0} { 164 | puts " ~~~ Failed at $controlTime - Trying Newton with Initial Tangent, reduced timestep & relaxed convergence......" 165 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 166 | algorithm Newton -initial 167 | set Dtt [expr 0.5*$Dt] 168 | set ok [analyze 1 $Dtt] 169 | test $testType $tolInit $iterInit 170 | algorithm $algorithmType 171 | } 172 | if {$ok != 0} { 173 | puts " ~~~ Failed at $controlTime - Trying Newton with Initial Tangent, reduced timestep & relaxed convergence......" 174 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 175 | algorithm Newton -initial 176 | set Dtt [expr 0.5*$Dt] 177 | set ok [analyze 1 $Dtt] 178 | test $testType $tolInit $iterInit 179 | algorithm $algorithmType 180 | } 181 | if {$ok != 0} { 182 | puts " ~~~ Failed at $controlTime - Trying NewtonWithLineSearch, reduced timestep & relaxed convergence......" 183 | test NormDispIncr [expr $tolInit*0.1] [expr $iterInit*50] 184 | algorithm NewtonLineSearch .8 185 | set Dtt [expr 0.5*$Dt] 186 | set ok [analyze 1 $Dtt] 187 | test $testType $tolInit $iterInit 188 | algorithm $algorithmType 189 | } 190 | # Game over...... 191 | if {$ok !=0} { 192 | puts " ~~~ Failed at $controlTime - exit analysis......" 193 | # Failed to converge, exit analysis 194 | # wipe; 195 | set cIndex -1; 196 | } 197 | 198 | # Check the actual state of the model with respect to the limits provided 199 | 200 | # Check the storey drifts 201 | for {set i 1} {$i<=[llength $tNode]} {incr i 1} { 202 | set tNode_dispX [nodeDisp [lindex $tNode $i-1] 1]; # Current top node disp in X 203 | set tNode_dispY [nodeDisp [lindex $tNode $i-1] 2]; # Current top node disp in Y 204 | set bNode_dispX [nodeDisp [lindex $bNode $i-1] 1]; # Current bottom node disp in X 205 | set bNode_dispY [nodeDisp [lindex $bNode $i-1] 2]; # Current bottom node disp in Y 206 | if {$dist>0} { 207 | set cHt [lindex $h $i-1]; # Current storey height 208 | set cdX [expr abs($tNode_dispX-$bNode_dispX)/$cHt]; # Current demand in X at the current floor in radians 209 | set cdY [expr abs($tNode_dispY-$bNode_dispY)/$cHt]; # Current demand in Y at the current floor in radians 210 | } elseif {$dist==0} { 211 | # if the height is zero then just use the absolute value of displacement 212 | set cdX [expr abs($tNode_dispX-$bNode_dispX)]; # Current deformation in X at the current floor 213 | set cdY [expr abs($tNode_dispY-$bNode_dispY)]; # Current deformation in Y at the current floor 214 | } 215 | # Check to see if we have a new maximum for the current demand 216 | if {$cdX>=[lindex $mdX $i-1]} {set mdX [lreplace $mdX $i-1 $i-1 $cdX]}; 217 | if {$cdY>=[lindex $mdY $i-1]} {set mdY [lreplace $mdY $i-1 $i-1 $cdY]}; 218 | 219 | # set cd [expr sqrt(pow($cdX,2)+pow($cdY,2))]; # square root sum of squares 220 | if {$cdX>=$cdY} {set cd $cdX} else {set cd $cdY}; # maximum of the two components 221 | if {$cd>$md} {set md $cd; set mflr $i}; # Update the current maximum demand and where it is 222 | 223 | } 224 | 225 | if {$md>=$Dc} {set cIndex 1; set md $Dc; wipe}; # Set the state of the model to local collapse (=1) 226 | } 227 | 228 | # Create some output 229 | puts $log [format "FinalState:%d at %.3f of %.3f seconds" $cIndex $controlTime $Tmax]; # Print to the logfile the final state 230 | puts $log [format "PeakDemand:%.5f at %d" $md $mflr]; # Print to the max demand and where it is 231 | 232 | 233 | # Print to the max interstorey drifts 234 | puts -nonewline $log "PeakDemandX: "; 235 | for {set ii 1} {$ii <= [llength $mdX]} {incr ii 1} { 236 | puts -nonewline $log [format "%.5f " [lindex $mdX $ii-1]] 237 | } 238 | 239 | puts -nonewline $log "PeakDemandY: "; 240 | for {set ii 1} {$ii <= [llength $mdY]} {incr ii 1} { 241 | puts -nonewline $log [format "%.5f " [lindex $mdY $ii-1]] 242 | } 243 | 244 | 245 | 246 | if {$pflag>0} { 247 | puts [format "PeakDemand:%.5f at %d" $md $mflr]; # Print to the max demand 248 | } 249 | if {$cIndex == -1} {puts ":::::: ANALYSIS FAILED TO CONVERGE at $controlTime of $Tmax :::::"} 250 | if {$cIndex == 0} {puts "######## ANALYSIS COMPLETED SUCCESSFULLY #####"} 251 | if {$cIndex == 1} { puts "========== LOCAL STRUCTURE COLLAPSE =========="} 252 | 253 | } 254 | -------------------------------------------------------------------------------- /singlePush.tcl: -------------------------------------------------------------------------------- 1 | # Procedure to carry out a pushover of a model 2 | # Copyright by Gerard J. O'Reilly, 2017 3 | 4 | # EUCENTRE/IUSSPavia 5 | # Date Created: April 2012 6 | # Last Updated: November 2015 7 | 8 | 9 | proc singlePush {dref mu ctrlNode dispDir nSteps {IOflag 1} {PrintFlag 0}} { 10 | # -------------------------------------------------- 11 | # Description of Parameters 12 | # -------------------------------------------------- 13 | # dref: Reference displacement to which cycles are run. Corresponds to yield or equivalent other, such as 1mm 14 | # mu: Multiple of dref to which the push is run. So pushover can be run to a specified ductility or displacement 15 | # ctrlNode: Node to control with the displacement integrator. 16 | # dispDir: DOF the loading is applied. 17 | # nSteps: Number of steps. 18 | # IOflag: Option to print details on screen. 2 for print of each step, 1 for basic info (default), 0 for off 19 | # --------------------------------------------------- 20 | 21 | # Set up the initial analysis 22 | # Define the Initial Analysis Parameters 23 | # set testType NormUnbalance; # Dont use with Penalty constraints 24 | set testType NormDispIncr 25 | # set testType EnergyIncr; # Dont use with Penalty constraints 26 | # set testType RelativeNormUnbalance; # Dont use with Penalty constraints 27 | # set testType RelativeNormDispIncr; # Dont use with Lagrange constraints 28 | # set testType RelativeTotalNormDispIncr; # Dont use with Lagrange constraints 29 | # set testType RelativeEnergyIncr; # Dont use with Penalty constraints 30 | 31 | set tolInit 1.0e-7; # Set the initial Tolerance, so it can be referred back to 32 | set iterInit 50; # Set the initial Max Number of Iterations 33 | 34 | set algorithmType KrylovNewton; # Set the algorithm type 35 | # set algorithmType Newton; # Set the algorithm type 36 | # set algorithmType Newton; # Set the algorithm type 37 | 38 | test $testType $tolInit $iterInit 39 | 40 | algorithm $algorithmType 41 | set disp [expr $dref*$mu]; 42 | set dU [expr $disp/(1.0*$nSteps)]; 43 | integrator DisplacementControl $ctrlNode $dispDir $dU 44 | analysis Static 45 | 46 | # Print values 47 | if {$IOflag >= 1} { 48 | puts "singlePush: Push $ctrlNode to $mu" 49 | } 50 | 51 | # Set the initial values to start the while loop 52 | set ok 0; 53 | set step 1; 54 | set loadf 1.0; 55 | # This feature of disabling the possibility of having a negative loading has been included. 56 | # This has been adapted from a similar script by Prof. Garbaggio 57 | 58 | while {$step<=$nSteps && $ok==0 && $loadf>0} { 59 | set ok [analyze 1]; 60 | set loadf [getTime]; 61 | set temp [nodeDisp $ctrlNode $dispDir]; 62 | 63 | # Print the current displacement 64 | if {$IOflag >=2} { 65 | puts "Pushed $ctrlNode in $dispDir to $temp with $loadf" 66 | } 67 | 68 | # If the analysis fails, try the following changes to achieve convergence 69 | # Analysis will be slower in here though... 70 | if {$ok != 0} { 71 | puts "Trying relaxed convergence.." 72 | test $testType [expr $tolInit*0.01] [expr $iterInit*50] 73 | set ok [analyze 1] 74 | test $testType $tolInit $iterInit 75 | } 76 | if {$ok != 0} { 77 | puts "Trying Newton with initial then current .." 78 | test $testType [expr $tolInit*0.01] [expr $iterInit*50] 79 | algorithm Newton -initialThenCurrent 80 | set ok [analyze 1] 81 | algorithm $algorithmType 82 | test $testType $tolInit $iterInit 83 | } 84 | if {$ok != 0} { 85 | puts "Trying ModifiedNewton with initial .." 86 | test $testType [expr $tolInit*0.01] [expr $iterInit*50] 87 | algorithm ModifiedNewton -initial 88 | set ok [analyze 1] 89 | algorithm $algorithmType 90 | test $testType $tolInit $iterInit 91 | } 92 | if {$ok != 0} { 93 | puts "Trying KrylovNewton .." 94 | test $testType [expr $tolInit*0.01] [expr $iterInit*50] 95 | algorithm KrylovNewton 96 | set ok [analyze 1] 97 | algorithm $algorithmType 98 | test $testType $tolInit $iterInit 99 | } 100 | if {$ok != 0} { 101 | puts "Perform a Hail Mary ...." 102 | test FixedNumIter $iterInit 103 | set ok [analyze 1] 104 | } 105 | 106 | 107 | set temp [nodeDisp $ctrlNode $dispDir]; 108 | set loadf [getTime]; 109 | incr step 1; 110 | 111 | 112 | }; # Close the while loop 113 | 114 | if {$ok != 0} { 115 | puts "DispControl Analysis FAILED" 116 | #puts "Do you wish to continue y/n ?"; # include if want to pause at analysis failure 117 | #gets stdin ans; # not recommended in parameter study 118 | #if {$ans == "n"} done; # as it interrupts batch file 119 | } else { 120 | puts "DispControl Analysis SUCCESSFUL" 121 | } 122 | if {$loadf<=0} { 123 | puts "Stopped because of Load factor below zero: $loadf" 124 | } 125 | if {$PrintFlag} { 126 | file delete singlePush.txt 127 | print singlePush.txt 128 | } 129 | 130 | } 131 | --------------------------------------------------------------------------------