# -------------------------------------------------------------------------------------------------- # Example 2. 2D cantilever column, dynamic eq ground motion # Silvia Mazzoni & Frank McKenna, 2006 # # ^Y # | # 2 __ # | | # | | # | | # (1) LCol # | | # | | # | | # =1= _|_ -------->X # # SET UP ---------------------------------------------------------------------------- # units: kip, inch, sec wipe; # clear memory of all past model definitions file mkdir Data; # create data directory model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm=#dimension, ndf=#dofs # define GEOMETRY ------------------------------------------------------------- set LCol 432; # column length set Weight 2000; # superstructure weight # define section geometry set HCol 60; # Column Depth set BCol 60; # Column Width # calculated parameters set PCol $Weight; # nodal dead-load weight per column set g 386.4; # g. set Mass [expr $PCol/$g]; # nodal mass # calculated geometry parameters set ACol [expr $BCol*$HCol*1000]; # cross-sectional area, make stiff set IzCol [expr 1./12.*$BCol*pow($HCol,3)]; # Column moment of inertia # nodal coordinates: node 1 0 0; # node#, X, Y node 2 0 $LCol # Single point constraints -- Boundary Conditions fix 1 1 1 1; # node DX DY RZ # nodal masses: mass 2 $Mass 1e-9 0.; # node#, Mx My Mz, Mass=Weight/g, neglect rotational inertia at nodes # Define ELEMENTS ------------------------------------------------------------- # Material parameters set fc -4.; # CONCRETE Compressive Strength (+Tension, -Compression) set Ec [expr 57*sqrt(-$fc*1000)]; # Concrete Elastic Modulus (the term in sqr root needs to be in psi # define geometric transformation: performs a linear geometric transformation of beam stiffness and resisting force from the basic system to the global-coordinate system set ColTransfTag 1; # associate a tag to column transformation geomTransf Linear $ColTransfTag ; # element connectivity: element elasticBeamColumn 1 1 2 $ACol $Ec $IzCol $ColTransfTag; # self-explanatory when using variables # Define RECORDERS ------------------------------------------------------------- recorder Node -file Data/DFree.out -time -node 2 -dof 1 2 3 disp; # displacements of free nodes recorder Node -file Data/DBase.out -time -node 1 -dof 1 2 3 disp; # displacements of support nodes recorder Node -file Data/RBase.out -time -node 1 -dof 1 2 3 reaction; # support reaction recorder Drift -file Data/Drift.out -time -iNode 1 -jNode 2 -dof 1 -perpDirn 2 ; # lateral drift recorder Element -file Data/FCol.out -time -ele 1 globalForce; # element forces -- column # define GRAVITY ------------------------------------------------------------- pattern Plain 1 Linear { load 2 0 -$PCol 0 } # ------------------------------------------------- apply gravity load set Tol 1.0e-8; # convergence tolerance for test constraints Plain; # how it handles boundary conditions numberer Plain; # renumber dof's to minimize band-width (optimization), if you want to system BandGeneral; # how to store and solve the system of equations in the analysis test NormDispIncr $Tol 6 ; # determine if convergence has been achieved at the end of an iteration step algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration set NstepGravity 10; # apply gravity in 10 steps set DGravity [expr 1./$NstepGravity]; # first load increment; integrator LoadControl $DGravity; # determine the next time step for an analysis analysis Static; # define type of analysis static or transient analyze $NstepGravity; # apply gravity # ------------------------------------------------- maintain constant gravity loads and reset time to zero loadConst -time 0.0 puts "Model Built" # DYNAMIC EQ ANALYSIS -------------------------------------------------------- # Uniform Earthquake ground motion (uniform acceleration input at all support nodes) set GMdirection 1; # ground-motion direction set GMfile "BM68elc.acc" ; # ground-motion filenames set GMfact 1.; # ground-motion scaling factor # set up ground-motion-analysis parameters set DtAnalysis [expr 0.01]; # time-step Dt for lateral analysis set TmaxAnalysis [expr 10.]; # maximum duration of ground-motion analysis -- should be 50*$sec # DYNAMIC ANALYSIS PARAMETERS # CONSTRAINTS handler -- Determines how the constraint equations are enforced in the analysis (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/617.htm) # Plain Constraints -- Removes constrained degrees of freedom from the system of equations # Lagrange Multipliers -- Uses the method of Lagrange multipliers to enforce constraints # Penalty Method -- Uses penalty numbers to enforce constraints # Transformation Method -- Performs a condensation of constrained degrees of freedom constraints Transformation ; # DOF NUMBERER (number the degrees of freedom in the domain): (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/366.htm) # determines the mapping between equation numbers and degrees-of-freedom # Plain -- Uses the numbering provided by the user # RCM -- Renumbers the DOF to minimize the matrix band-width using the Reverse Cuthill-McKee algorithm numberer Plain # SYSTEM (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/371.htm) # Linear Equation Solvers (how to store and solve the system of equations in the analysis) # -- provide the solution of the linear system of equations Ku = P. Each solver is tailored to a specific matrix topology. # ProfileSPD -- Direct profile solver for symmetric positive definite matrices # BandGeneral -- Direct solver for banded unsymmetric matrices # BandSPD -- Direct solver for banded symmetric positive definite matrices # SparseGeneral -- Direct solver for unsymmetric sparse matrices (-piv option) # SparseSPD -- Direct solver for symmetric sparse matrices # UmfPack -- Direct UmfPack solver for unsymmetric matrices system SparseGeneral -piv # TEST: # convergence test to # Convergence TEST (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/360.htm) # -- Accept the current state of the domain as being on the converged solution path # -- determine if convergence has been achieved at the end of an iteration step # NormUnbalance -- Specifies a tolerance on the norm of the unbalanced load at the current iteration # NormDispIncr -- Specifies a tolerance on the norm of the displacement increments at the current iteration # EnergyIncr-- Specifies a tolerance on the inner product of the unbalanced load and displacement increments at the current iteration # RelativeNormUnbalance -- # RelativeNormDispIncr -- # RelativeEnergyIncr -- set Tol 1.e-8; # Convergence Test: tolerance set maxNumIter 10; # Convergence Test: maximum number of iterations that will be performed before "failure to converge" is returned set printFlag 0; # Convergence Test: flag used to print information on convergence (optional) # 1: print information on each step; set TestType EnergyIncr; # Convergence-test type test $TestType $Tol $maxNumIter $printFlag; # Solution ALGORITHM: -- Iterate from the last time step to the current (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/682.htm) # Linear -- Uses the solution at the first iteration and continues # Newton -- Uses the tangent at the current iteration to iterate to convergence # ModifiedNewton -- Uses the tangent at the first iteration to iterate to convergence # NewtonLineSearch -- # KrylovNewton -- # BFGS -- # Broyden -- set algorithmType ModifiedNewton algorithm $algorithmType; # Static INTEGRATOR: -- determine the next time step for an analysis (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/689.htm) # LoadControl -- Specifies the incremental load factor to be applied to the loads in the domain # DisplacementControl -- Specifies the incremental displacement at a specified DOF in the domain # Minimum Unbalanced Displacement Norm -- Specifies the incremental load factor such that the residual displacement norm in minimized # Arc Length -- Specifies the incremental arc-length of the load-displacement path # Transient INTEGRATOR: -- determine the next time step for an analysis including inertial effects # Newmark -- The two parameter time-stepping method developed by Newmark # HHT -- The three parameter Hilbert-Hughes-Taylor time-stepping method # Central Difference -- Approximates velocity and acceleration by centered finite differences of displacement set NewmarkGamma 0.5; # Newmark-integrator gamma parameter (also HHT) set NewmarkBeta 0.25; # Newmark-integrator beta parameter integrator Newmark $NewmarkGamma $NewmarkBeta # ANALYSIS -- defines what type of analysis is to be performed (http://opensees.berkeley.edu/OpenSees/manuals/usermanual/324.htm) # Static Analysis -- solves the KU=R problem, without the mass or damping matrices. # Transient Analysis -- solves the time-dependent analysis. The time step in this type of analysis is constant. The time step in the output is also constant. # variableTransient Analysis -- performs the same analysis type as the Transient Analysis object. The time step, however, is variable. This method is used when # there are convergence problems with the Transient Analysis object at a peak or when the time step is too small. The time step in the output is also variable. analysis Transient # define DAMPING-------------------------------------------------------------------------------------- # apply Rayleigh DAMPING from $xDamp # D=$alphaM*M + $betaKcurr*Kcurrent + $betaKcomm*KlastCommit + $beatKinit*$Kinitial set xDamp 0.02; # 2% damping ratio set lambda [eigen 1]; # eigenvalue mode 1 set omega [expr pow($lambda,0.5)]; set alphaM 0.; # M-prop. damping; D = alphaM*M set betaKcurr 0.; # K-proportional damping; +beatKcurr*KCurrent set betaKcomm [expr 2.*$xDamp/($omega)]; # K-prop. damping parameter; +betaKcomm*KlastCommitt set betaKinit 0.; # initial-stiffness proportional damping +beatKinit*Kini # define damping rayleigh $alphaM $betaKcurr $betaKinit $betaKcomm; # RAYLEIGH damping # --------------------------------- perform Dynamic Ground-Motion Analysis # Uniform EXCITATION: acceleration input set IDloadTag 400; # load tag set dt 0.01; # time step for input ground motion set GMfatt 1.0; # data in input file is in g Unifts -- ACCELERATION TH set AccelSeries "Series -dt $dt -filePath $GMfile -factor $GMfatt"; # time series information pattern UniformExcitation $IDloadTag $GMdirection -accel $AccelSeries ; # create Unifform excitation set Nsteps [expr int($TmaxAnalysis/$DtAnalysis)]; set ok [analyze $Nsteps $DtAnalysis]; # actually perform analysis; returns ok=0 if analysis was successful if {$ok != 0} { ; # if analysis was not successful. # change some analysis parameters to achieve convergence # performance is slower inside this loop # Time-controlled analysis set ok 0; set controlTime [getTime]; while {$controlTime < $TmaxAnalysis && $ok == 0} { set ok [analyze 1 $DtAnalysis] set controlTime [getTime] set ok [analyze 1 $DtAnalysis] if {$ok != 0} { puts "Trying Newton with Initial Tangent .." test NormDispIncr $Tol 1000 0 algorithm Newton -initial set ok [analyze 1 $DtAnalysis] test $TestType $Tol $maxNumIter 0 algorithm $algorithmType } if {$ok != 0} { puts "Trying Broyden .." algorithm Broyden 8 set ok [analyze 1 $DtAnalysis] algorithm $algorithmType } if {$ok != 0} { puts "Trying NewtonWithLineSearch .." algorithm NewtonLineSearch .8 set ok [analyze 1 $DtAnalysis] algorithm $algorithmType } } }; # end if ok !0 puts "Ground Motion Done. End Time: [getTime]"