# 14.2.9. Cantilever 2D Column with Units- Dynamic EQ Ground Motion¶

Converted to openseespy by: Pavan Chigullapally
University of Auckland
Email: pchi893@aucklanduni.ac.nz

1. To run Uniaxial Inelastic Material, Fiber Section, Nonlinear Mode, Uniform Earthquake Excitation
2. First import the InelasticFiberSection.py (upto gravity loading is already in this script) and run the current script
3. To run EQ ground-motion analysis BM68elc.acc needs to be downloaded into the same directory)
4. Same acceleration input at all nodes restrained in specified direction (uniform acceleration input at all support nodes)
5. The problem description can be found here (example:3)
6. The source code is shown below, which can be downloaded here.
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 # -*- coding: utf-8 -*- """ Created on Mon Apr 22 15:12:06 2019 @author: pchi893 """ # Converted to openseespy by: Pavan Chigullapally # University of Auckland # Email: pchi893@aucklanduni.ac.nz # Example 3. 2D Cantilever -- EQ ground motion #To run Uniaxial Inelastic Material, Fiber Section, Nonlinear Mode, Uniform Earthquake Excitation:First import the InelasticFiberSection.py(upto gravity loading is already in this script) #and run the current script #To run EQ ground-motion analysis (BM68elc.acc needs to be downloaded into the same directory) # Same acceleration input at all nodes restrained in specified direction (uniform acceleration input at all support nodes) #the detailed problem description can be found here: http://opensees.berkeley.edu/wiki/index.php/Examples_Manual (example: 3) # -------------------------------------------------------------------------------------------------- # OpenSees (Tcl) code by: Silvia Mazzoni & Frank McKenna, 2006 ########################################################################################################################################################################## import openseespy.opensees as op #import the os module #import os import math op.wipe() ######################################################################################################################################################################### import InelasticFiberSection #applying Dynamic Ground motion analysis Tol = 1e-8 GMdirection = 1 GMfile = 'BM68elc.acc' GMfact = 1.0 Lambda = op.eigen('-fullGenLapack', 1) # eigenvalue mode 1 Omega = math.pow(Lambda, 0.5) betaKcomm = 2 * (0.02/Omega) xDamp = 0.02 # 2% damping ratio alphaM = 0.0 # M-prop. damping; D = alphaM*M betaKcurr = 0.0 # K-proportional damping; +beatKcurr*KCurrent betaKinit = 0.0 # initial-stiffness proportional damping +beatKinit*Kini op.rayleigh(alphaM,betaKcurr, betaKinit, betaKcomm) # RAYLEIGH damping # Uniform EXCITATION: acceleration input IDloadTag = 400 # load tag dt = 0.01 # time step for input ground motion GMfatt = 1.0 # data in input file is in g Unifts -- ACCELERATION TH maxNumIter = 10 op.timeSeries('Path', 2, '-dt', dt, '-filePath', GMfile, '-factor', GMfact) op.pattern('UniformExcitation', IDloadTag, GMdirection, '-accel', 2) op.wipeAnalysis() op.constraints('Transformation') op.numberer('Plain') op.system('BandGeneral') op.test('EnergyIncr', Tol, maxNumIter) op.algorithm('ModifiedNewton') NewmarkGamma = 0.5 NewmarkBeta = 0.25 op.integrator('Newmark', NewmarkGamma, NewmarkBeta) op.analysis('Transient') DtAnalysis = 0.01 # time-step Dt for lateral analysis TmaxAnalysis = 10.0 # maximum duration of ground-motion analysis Nsteps = int(TmaxAnalysis/ DtAnalysis) ok = op.analyze(Nsteps, DtAnalysis) tCurrent = op.getTime() # for gravity analysis, load control is fine, 0.1 is the load factor increment (http://opensees.berkeley.edu/wiki/index.php/Load_Control) test = {1:'NormDispIncr', 2: 'RelativeEnergyIncr', 4: 'RelativeNormUnbalance',5: 'RelativeNormDispIncr', 6: 'NormUnbalance'} algorithm = {1:'KrylovNewton', 2: 'SecantNewton' , 4: 'RaphsonNewton',5: 'PeriodicNewton', 6: 'BFGS', 7: 'Broyden', 8: 'NewtonLineSearch'} for i in test: for j in algorithm: if ok != 0: if j < 4: op.algorithm(algorithm[j], '-initial') else: op.algorithm(algorithm[j]) op.test(test[i], Tol, 1000) ok = op.analyze(Nsteps, DtAnalysis) print(test[i], algorithm[j], ok) if ok == 0: break else: continue u2 = op.nodeDisp(2, 1) print("u2 = ", u2) op.wipe()