# 14.2.1. Cantilever 2D EQ ground motion with gravity Analysis¶

1. The source code is shown below, which can be downloaded here.
2. The ground motion data file here must be put in the same folder.
3. Run the source code in your favorate Python program and should see results below
=========================================================
Start cantilever 2D EQ ground motion with gravity example
u2 =  -0.07441860465116278
Passed!
=========================================

  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 print("=========================================================") print("Start cantilever 2D EQ ground motion with gravity example") from openseespy.opensees import * # -------------------------------------------------------------------------------------------------- # Example 1. cantilever 2D # EQ ground motion with gravity # all units are in kip, inch, second # elasticBeamColumn ELEMENT # Silvia Mazzoni & Frank McKenna, 2006 # # ^Y # | # 2 __ # | | # | | # | | # (1) 36' # | | # | | # | | # =1= ---- -------->X # # SET UP ---------------------------------------------------------------------------- wipe() # clear opensees model model('basic', '-ndm', 2, '-ndf', 3) # 2 dimensions, 3 dof per node # file mkdir data # create data directory # define GEOMETRY ------------------------------------------------------------- # nodal coordinates: node(1, 0., 0.) # node#, X Y node(2, 0., 432.) # Single point constraints -- Boundary Conditions fix(1, 1, 1, 1) # node DX DY RZ # nodal masses: mass(2, 5.18, 0., 0.) # node#, Mx My Mz, Mass=Weight/g. # Define ELEMENTS ------------------------------------------------------------- # define geometric transformation: performs a linear geometric transformation of beam stiffness and resisting force from the basic system to the global-coordinate system geomTransf('Linear', 1) # associate a tag to transformation # connectivity: element('elasticBeamColumn', 1, 1, 2, 3600.0, 3225.0,1080000.0, 1) # define GRAVITY ------------------------------------------------------------- timeSeries('Linear', 1) pattern('Plain', 1, 1,) load(2, 0., -2000., 0.) # node#, FX FY MZ -- superstructure-weight 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 algorithm('Linear') # use Linear algorithm for linear analysis integrator('LoadControl', 0.1) # determine the next time step for an analysis, # apply gravity in 10 steps analysis('Static') # define type of analysis static or transient analyze(10) # perform gravity analysis loadConst('-time', 0.0) # hold gravity constant and restart time # DYNAMIC ground-motion analysis ------------------------------------------------------------- # create load pattern G = 386.0 timeSeries('Path', 2, '-dt', 0.005, '-filePath', 'A10000.dat', '-factor', G) # define acceleration vector from file (dt=0.005 is associated with the input file gm) pattern('UniformExcitation', 2, 1, '-accel', 2) # define where and how (pattern tag, dof) acceleration is applied # set damping based on first eigen mode freq = eigen('-fullGenLapack', 1)[0]**0.5 dampRatio = 0.02 rayleigh(0., 0., 0., 2*dampRatio/freq) # create the analysis wipeAnalysis() # clear previously-define analysis parameters 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 algorithm('Linear') # use Linear algorithm for linear analysis integrator('Newmark', 0.5, 0.25) # determine the next time step for an analysis analysis('Transient') # define type of analysis: time-dependent analyze(3995, 0.01) # apply 3995 0.01-sec time steps in analysis u2 = nodeDisp(2, 2) print("u2 = ", u2) if abs(u2+0.07441860465116277579) < 1e-12: print("Passed!") else: print("Failed!") wipe() print("=========================================")