예제 #1
0
def test_ElasticFrame():
    #
    # some parameter
    #
    PI = 2.0 * asin(1.0)
    g = 386.4
    ft = 12.0
    Load1 = 1185.0
    Load2 = 1185.0
    Load3 = 970.0

    # floor masses
    m1 = Load1 / (4 * g)  # 4 nodes per floor
    m2 = Load2 / (4 * g)
    m3 = Load3 / (4 * g)

    # floor distributed loads
    w1 = Load1 / (90 * ft)  # frame 90 ft long
    w2 = Load2 / (90 * ft)
    w3 = Load3 / (90 * ft)

    # ------------------------------
    # Start of model generation
    # ------------------------------

    # Remove existing model
    ops.wipe()

    # Create ModelBuilder (with two-dimensions and 2 DOF/node)
    ops.model('BasicBuilder', '-ndm', 2, '-ndf', 3)

    # Create nodes
    # ------------

    # Create nodes & add to Domain - command: node nodeId xCrd yCrd <-mass massX massY massRz>
    # NOTE: mass in optional
    ops.node(1, 0.0, 0.0)
    ops.node(2, 360.0, 0.0)
    ops.node(3, 720.0, 0.0)
    ops.node(4, 1080.0, 0.0)
    ops.node(5, 0.0, 162.0, '-mass', m1, m1, 0.0)
    ops.node(6, 360.0, 162.0, '-mass', m1, m1, 0.0)
    ops.node(7, 720.0, 162.0, '-mass', m1, m1, 0.0)
    ops.node(8, 1080.0, 162.0, '-mass', m1, m1, 0.0)
    ops.node(9, 0.0, 324.0, '-mass', m2, m2, 0.0)
    ops.node(10, 360.0, 324.0, '-mass', m2, m2, 0.0)
    ops.node(11, 720.0, 324.0, '-mass', m2, m2, 0.0)
    ops.node(12, 1080.0, 324.0, '-mass', m2, m2, 0.0)
    ops.node(13, 0.0, 486.0, '-mass', m3, m3, 0.0)
    ops.node(14, 360.0, 486.0, '-mass', m3, m3, 0.0)
    ops.node(15, 720.0, 486.0, '-mass', m3, m3, 0.0)
    ops.node(16, 1080.0, 486.0, '-mass', m3, m3, 0.0)

    # the boundary conditions - command: fix nodeID xResrnt? yRestrnt? rZRestrnt?
    ops.fix(1, 1, 1, 1)
    ops.fix(2, 1, 1, 1)
    ops.fix(3, 1, 1, 1)
    ops.fix(4, 1, 1, 1)

    # Define geometric transformations for beam-column elements
    ops.geomTransf('Linear', 1)  # beams
    ops.geomTransf('PDelta', 2)  # columns

    # Define elements
    # Create elastic beam-column - command: element elasticBeamColumn eleID node1 node2 A E Iz geomTransfTag

    # Define the Columns
    ops.element('elasticBeamColumn', 1, 1, 5, 75.6, 29000.0, 3400.0,
                2)  # W14X257
    ops.element('elasticBeamColumn', 2, 5, 9, 75.6, 29000.0, 3400.0,
                2)  # W14X257
    ops.element('elasticBeamColumn', 3, 9, 13, 75.6, 29000.0, 3400.0,
                2)  # W14X257
    ops.element('elasticBeamColumn', 4, 2, 6, 91.4, 29000.0, 4330.0,
                2)  # W14X311
    ops.element('elasticBeamColumn', 5, 6, 10, 91.4, 29000.0, 4330.0,
                2)  # W14X311
    ops.element('elasticBeamColumn', 6, 10, 14, 91.4, 29000.0, 4330.0,
                2)  # W14X311
    ops.element('elasticBeamColumn', 7, 3, 7, 91.4, 29000.0, 4330.0,
                2)  # W14X311
    ops.element('elasticBeamColumn', 8, 7, 11, 91.4, 29000.0, 4330.0,
                2)  # W14X311
    ops.element('elasticBeamColumn', 9, 11, 15, 91.4, 29000.0, 4330.0,
                2)  # W14X311
    ops.element('elasticBeamColumn', 10, 4, 8, 75.6, 29000.0, 3400.0,
                2)  # W14X257
    ops.element('elasticBeamColumn', 11, 8, 12, 75.6, 29000.0, 3400.0,
                2)  # W14X257
    ops.element('elasticBeamColumn', 12, 12, 16, 75.6, 29000.0, 3400.0,
                2)  # W14X257

    # Define the Beams
    ops.element('elasticBeamColumn', 13, 5, 6, 34.7, 29000.0, 5900.0,
                1)  # W33X118
    ops.element('elasticBeamColumn', 14, 6, 7, 34.7, 29000.0, 5900.0,
                1)  # W33X118
    ops.element('elasticBeamColumn', 15, 7, 8, 34.7, 29000.0, 5900.0,
                1)  # W33X118
    ops.element('elasticBeamColumn', 16, 9, 10, 34.2, 29000.0, 4930.0,
                1)  # W30X116
    ops.element('elasticBeamColumn', 17, 10, 11, 34.2, 29000.0, 4930.0,
                1)  # W30X116
    ops.element('elasticBeamColumn', 18, 11, 12, 34.2, 29000.0, 4930.0,
                1)  # W30X116
    ops.element('elasticBeamColumn', 19, 13, 14, 20.1, 29000.0, 1830.0,
                1)  # W24X68
    ops.element('elasticBeamColumn', 20, 14, 15, 20.1, 29000.0, 1830.0,
                1)  # W24X68
    ops.element('elasticBeamColumn', 21, 15, 16, 20.1, 29000.0, 1830.0,
                1)  # W24X68

    # Define loads for Gravity Analysis
    # ---------------------------------

    #create a Linear TimeSeries (load factor varies linearly with time): command timeSeries Linear tag
    ops.timeSeries('Linear', 1)

    # Create a Plain load pattern with a linear TimeSeries:
    #  command pattern Plain tag timeSeriesTag { loads }
    ops.pattern('Plain', 1, 1)
    ops.eleLoad('-ele', 13, 14, 15, '-type', '-beamUniform', -w1)
    ops.eleLoad('-ele', 16, 17, 18, '-type', '-beamUniform', -w2)
    ops.eleLoad('-ele', 19, 20, 21, '-type', '-beamUniform', -w3)

    # ---------------------------------
    # Create Analysis for Gravity Loads
    # ---------------------------------

    # Create the system of equation, a SPD using a band storage scheme
    ops.system('BandSPD')

    # Create the DOF numberer, the reverse Cuthill-McKee algorithm
    ops.numberer('RCM')

    # Create the constraint handler, a Plain handler is used as h**o constraints
    ops.constraints('Plain')

    # Create the integration scheme, the LoadControl scheme using steps of 1.0
    ops.integrator('LoadControl', 1.0)

    # Create the solution algorithm, a Linear algorithm is created
    ops.test('NormDispIncr', 1.0e-10, 6)
    ops.algorithm('Newton')

    # create the analysis object
    ops.analysis('Static')

    # ---------------------------------
    # Perform Gravity Analysis
    # ---------------------------------

    ops.analyze(1)
    # print "node 5: nodeDisp 5"
    # print "node 6: nodeDisp 6"
    # print "node 7: nodeDisp 7"
    # print "node 8: nodeDisp 8"
    # print "node 9: nodeDisp 9"
    # print "node 10: nodeDisp 10"
    # ---------------------------------
    # Check Equilibrium
    # ---------------------------------

    # invoke command to determine nodal reactions
    ops.reactions()

    node1Rxn = ops.nodeReaction(
        1
    )  # nodeReaction command returns nodal reactions for specified node in a list
    node2Rxn = ops.nodeReaction(2)
    node3Rxn = ops.nodeReaction(3)
    node4Rxn = ops.nodeReaction(4)

    inputedFy = -Load1 - Load2 - Load3  # loads added negative Fy diren to ele
    computedFx = node1Rxn[0] + node2Rxn[0] + node3Rxn[0] + node4Rxn[0]
    computedFy = node1Rxn[1] + node2Rxn[1] + node3Rxn[1] + node4Rxn[1]

    print("\nEqilibrium Check After Gravity:")
    print("SumX: Inputed: 0.0 + Computed:", computedFx, " =  ",
          0.0 + computedFx)
    print("SumY: Inputed: ", inputedFy, " + Computed: ", computedFy, " =  ",
          inputedFy + computedFy)

    # ---------------------------------
    # Lateral Load
    # ---------------------------------

    # gravity loads constant and time in domain to e 0.0
    ops.loadConst('-time', 0.0)

    ops.timeSeries('Linear', 2)
    ops.pattern('Plain', 2, 2)
    ops.load(13, 220.0, 0.0, 0.0)
    ops.load(9, 180.0, 0.0, 0.0)
    ops.load(5, 90.0, 0.0, 0.0)

    # ---------------------------------
    # Create Recorder
    # ---------------------------------

    #recorder Element -file EleForces.out -ele 1 4 7 10 forces

    # ---------------------------------
    # Perform Lateral Analysis
    # ---------------------------------

    ops.analyze(1)
    # print "node 5: nodeDisp 5"
    # print "node 6: nodeDisp 6"
    # print "node 7: nodeDisp 7"
    # print "node 8: nodeDisp 8"
    # print "node 9: nodeDisp 9"
    # print "node 10: nodeDisp 10"
    # ---------------------------------
    # Check Equilibrium
    # ---------------------------------

    ops.reactions()

    node1Rxn = ops.nodeReaction(
        1
    )  # =nodeReaction( command returns nodal reactions for specified node in a list
    node2Rxn = ops.nodeReaction(2)
    node3Rxn = ops.nodeReaction(3)
    node4Rxn = ops.nodeReaction(4)

    inputedFx = 220.0 + 180.0 + 90.0
    computedFx = node1Rxn[0] + node2Rxn[0] + node3Rxn[0] + node4Rxn[0]
    computedFy = node1Rxn[1] + node2Rxn[1] + node3Rxn[1] + node4Rxn[1]

    print("\nEqilibrium Check After Lateral Loads:")
    print("SumX: Inputed: ", inputedFx, " + Computed: ", computedFx, " =  ",
          inputedFx + computedFx)
    print("SumY: Inputed: ", inputedFy, " + Computed: ", computedFy, " =  ",
          inputedFy + computedFy)

    # print ele information for columns at base
    #print ele 1 4 7 10

    # ---------------------------------
    # Check Eigenvalues
    # ---------------------------------

    eigenValues = ops.eigen(5)

    print("\nEigenvalues:")
    eigenValue = eigenValues[0]
    T1 = 2 * PI / sqrt(eigenValue)
    print("T1 = ", T1)

    eigenValue = eigenValues[1]
    T2 = 2 * PI / sqrt(eigenValue)
    print("T2 = ", T2)

    eigenValue = eigenValues[2]
    T3 = 2 * PI / sqrt(eigenValue)
    print("T3 = ", T3)

    eigenValue = eigenValues[3]
    T4 = 2 * PI / sqrt(eigenValue)
    print("T4 = ", T4)

    eigenValue = eigenValues[4]
    T5 = 2 * PI / sqrt(eigenValue)
    print("T5 = ", T5)

    assert abs(T1 - 1.0401120938612862) < 1e-12 and abs(
        T2 - 0.3526488583606463
    ) < 1e-12 and abs(T3 - 0.1930409642350476) < 1e-12 and abs(
        T4 - 0.15628823050715784) < 1e-12 and abs(T5 -
                                                  0.13080166151268388) < 1e-12

    #recorder Node -file eigenvector.out -nodeRange 5 16 -dof 1 2 3 eigen 0
    #record

    print("==========================")
예제 #2
0
#op.recorder('Drift', '-file', 'Data-4-inelasticFiber/Drift.out','-time', '-node', 1, '-dof', 1,2,3, 'disp')
op.recorder('Element', '-file', 'Data-4-inelasticFiber/FCol.out', '-time',
            '-ele', 1, 2, 'globalForce')
op.recorder('Element', '-file', 'Data-4-inelasticFiber/FBeam.out', '-time',
            '-ele', 3, 'globalForce')
op.recorder('Element', '-file', 'Data-4-inelasticFiber/ForceColSec1.out',
            '-time', '-ele', 1, 2, 'section', 1, 'force')
op.recorder('Element', '-file', 'Data-4-inelasticFiber/DefoColSec1.out',
            '-time', '-ele', 1, 2, 'section', 1, 'deformation')
#op.recorder('Element', '-file', 'Data-4-inelasticFiber/DCol.out','-time', '-ele', 1, 'deformations')

#defining gravity loads
WzBeam = Weight / LBeam
op.timeSeries('Linear', 1)
op.pattern('Plain', 1, 1)
op.eleLoad('-ele', 3, '-type', '-beamUniform', -WzBeam, 0.0, 0.0)

#op.load(2, 0.0, -PCol, 0.0)

Tol = 1e-8  # convergence tolerance for test
NstepGravity = 10
DGravity = 1 / NstepGravity
op.integrator('LoadControl',
              DGravity)  # determine the next time step for an analysis
op.numberer(
    'Plain'
)  # renumber dof's to minimize band-width (optimization), if you want to
op.system('BandGeneral'
          )  # how to store and solve the system of equations in the analysis
op.constraints('Plain')  # how it handles boundary conditions
op.test(
예제 #3
0
ops.element('elasticBeamColumn', 2, 3, 4, Acol, E, IzCol, 1)
# girder
ops.element('elasticBeamColumn', 3, 2, 4, Agir, E, IzGir, 1)

Px = 2.e+3
Wy = -10.e+3
Wx = 0.

Ew = {3: ['-beamUniform', Wy, Wx]}

ops.timeSeries('Constant', 1)
ops.pattern('Plain', 1, 1)
ops.load(2, Px, 0., 0.)

for etag in Ew:
    ops.eleLoad('-ele', etag, '-type', Ew[etag][0], Ew[etag][1],
                Ew[etag][2])

ops.constraints('Transformation')
ops.numberer('RCM')
ops.system('BandGeneral')
ops.test('NormDispIncr', 1.0e-6, 6, 2)
ops.algorithm('Linear')
ops.integrator('LoadControl', 1)
ops.analysis('Static')
ops.analyze(1)

ops.printModel()

# 1. plot model with tag lebels

szer, wys = 16., 10.
예제 #4
0
def dead_load():
    ''' dead load
    '''
    ops.timeSeries('Linear', 1)
    ops.pattern('Plain', 1, 1)

    ops.eleLoad('-ele', 1, '-type', '-beamUniform', 0, -1.000E+001, 0)
    ops.eleLoad('-ele', 2, '-type', '-beamUniform', 0, -1.000E+001, 0)
    ops.eleLoad('-ele', 3, '-type', '-beamUniform', 0, -1.000E+001, 0)
    ops.eleLoad('-ele', 4, '-type', '-beamUniform', 0, -1.000E+001, 0)
    ops.eleLoad('-ele', 5, '-type', '-beamUniform', 0, -1.000E+001, 0)
    ops.eleLoad('-ele', 6, '-type', '-beamUniform', 0, -1.000E+001, 0)
    logger.info("load create")
예제 #5
0
def dead_load():
    ''' dead load
    '''
    ops.timeSeries('Linear', 1)
    ops.pattern('Plain', 1, 1)

    ops.eleLoad('-ele', 5, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 5, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 5, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 8, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 8, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 6, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 6, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 6, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 7, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 7, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 15, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 15, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 21, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 21, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 21, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 18, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 18, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 19, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 19, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 19, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 16, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 16, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 19, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 19, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 19, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 17, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 17, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 20, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 20, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 20, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 28, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 28, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 34, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 34, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 34, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 31, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 31, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 32, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 32, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 32, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 29, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 29, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 32, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 32, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 32, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 30, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 30, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 33, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 33, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 33, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 41, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 41, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 47, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 47, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 47, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 44, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 44, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 45, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 45, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 45, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 42, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 42, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 45, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 45, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 45, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 43, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 43, '-type', '-beamUniform', 0, -4.219E+000, 0)
    ops.eleLoad('-ele', 46, '-type', '-beamUniform', 0, -3.797E+000, 0)
    ops.eleLoad('-ele', 46, '-type', '-beamUniform', 0, -1.688E+000, 0)
    ops.eleLoad('-ele', 46, '-type', '-beamUniform', 0, -3.797E+000, 0)

    logger.info("load create")
            for k in range(len(col_split_point) - 1):
                c = stu.Column(
                    none, stu.node_manager.anti_get(col_split_point[k]),
                    stu.node_manager.anti_get(col_split_point[k + 1]))

                #   element('dispBeamColumn', eleTag, *eleNodes, transfTag, integrationTag,
                #          '-cMass', '-mass', mass=0.0)
                ops.element("dispBeamColumn", c.name, col_split_point[k],
                            col_split_point[k + 1], 1, 4, '-mass',
                            mass_col_all_beamL)

                #   eleLoad('-ele', *eleTags, '-range', eleTag1, eleTag2, '-type', '-beamUniform',
                #        Wy, Wz=0.0, Wx=0.0, '-beamPoint', Py, Pz=0.0, xL, Px=0.0, '-beamThermal', *tempPts)

                #   create load for beamL_lvl_all:
                ops.eleLoad("ele", c.name, "-range", c.name, c.name, '-type',
                            '-beamUniform', Wy_L, Wz_L, Wx_L)

#   when Undivided
#            ops.element("dispBeamColumn", *j , 1 , 4 , '-mass' , mass)

#   create element for beamB_lvl_all
    split_num_beam_B = 5
    mass_col_all_beamB = col_area_all_beam * unit_mass_Q235B + 15.0 / 9800

    Wy_B, Wz_B, Wx_B = 0.0, -mass_col_all_beamB * 9800, 0.0

    for i in range(14):
        for j in frame_lvl_14.to_beamB_nth(i):

            col = stu.member_manager.get_object_by_id(j[0])
            col.splitB(split_num_beam_B)
예제 #7
0
Iz1 = 4423680.0
op.element('elasticBeamColumn', 1, 1, 3, A, E, Iz, 1)
op.element('elasticBeamColumn', 2, 2, 4, A, E, Iz, 1)
op.element('elasticBeamColumn', 3, 3, 4, A1, E, Iz1, 1)

op.recorder('Node', '-file', 'Data-1b/DFree.out','-time', '-node', 3,4, '-dof', 1,2,3, 'disp')
op.recorder('Node', '-file', 'Data-1b/DBase.out','-time', '-node', 1,2, '-dof', 1,2,3, 'disp')
op.recorder('Node', '-file', 'Data-1b/RBase.out','-time', '-node', 1,2, '-dof', 1,2,3, 'reaction')
#op.recorder('Drift', '-file', 'Data-1b/Drift.out','-time', '-node', 1, '-dof', 1,2,3, 'disp')
op.recorder('Element', '-file', 'Data-1b/FCol.out','-time', '-ele', 1,2, 'globalForce')
op.recorder('Element', '-file', 'Data-1b/DCol.out','-time', '-ele', 3, 'deformations')

#defining gravity loads
op.timeSeries('Linear', 1)
op.pattern('Plain', 1, 1)
op.eleLoad('-ele', 3, '-type', '-beamUniform', -7.94)

op.constraints('Plain')
op.numberer('Plain')
op.system('BandGeneral')
op.test('NormDispIncr', 1e-8, 6)
op.algorithm('Newton')
op.integrator('LoadControl', 0.1)
op.analysis('Static')
op.analyze(10)
    
op.loadConst('-time', 0.0)

#applying Dynamic Ground motion analysis
op.timeSeries('Path', 2, '-dt', 0.01, '-filePath', 'BM68elc.acc', '-factor', 1.0)
op.pattern('UniformExcitation', 2, 1, '-accel', 2) #how to give accelseriesTag?