Hi everyone,
I've been carrying out some pushover analysis in a 2D Special Truss Moment Frame. To take into account the PDelta effects, vertical loads are applied in the nodes of the upper chord, but when I apply the PDelta geometric transformation, the capacity curve (Lateral displacement Vs Base shear), exhibits a bit more capacity that the one with Linear geometric transformation instead of less capacity. I don't know if there is something about PDelta effects that I'm missing, or maybe the way that gravity load have to be applied. For reference I'm including the code untill the part where the vertical load is aplyied below. Pleasle let me know if you need anything else
Thank you all.
########################################
# RunPushover.py
########################################
import openseespy.opensees as op
import os
from math import sqrt, pi
op.wipe()
op.model('basic','-ndm',2)
# Add PDelta ?
PDelta="Yes" #Yes or No
# Define final drift in node control
DerUlt=0.02
############### Define Sections and Materials #####################
E=210000000
mat7=7 #Steel elastic material
op.uniaxialMaterial('Elastic', mat7, E)
mat8=8 # Column hinge W36x652
p1 = [20247.63, 0.0059]
p2 = [22272.39, 0.06]
p3 = [22272.4, 0.061]
n1 = [-20247.63, -0.0059]
n2 = [-22272.39, -0.06]
n3 = [-22272.4, -0.061]
#Pinching
pinchX = 0.0 #0.0
pinchY = 0.52 #0.52
#Damage per cycle
damage1 = 0.0 #Ductilidad 0.03
damage2 = 0.0 #Energía 0.0
#Stiffness damage
beta = 0.0
op.uniaxialMaterial('Hysteretic', mat8, *p1, *p2, *p3, *n1, *n2, *n3, pinchX, pinchY, damage1, damage2, beta)
mat9=9 # Double Channel chord hinge 2C15x50
p1 = [950.37, 0.012]
p2 = [1330.52, 0.03]
p3 = [1330.53, 0.07]
n1 = [-950.37, -0.012]
n2 = [-1330.52, -0.03]
n3 = [-1330.53, -0.07]
#Pinching
pinchX = 0.0 #0.0
pinchY = 0.52 #0.52
#Damage per cycle
damage1 = 0.0 #Ductilidad 0.03
damage2 = 0.0 #Energía 0.0
#Stiffness damage
beta = 0.0
op.uniaxialMaterial('Hysteretic', mat9, *p1, *p2, *p3, *n1, *n2, *n3, pinchX, pinchY, damage1, damage2, beta)
#-----------------------------------------------------------------------------------------------------------
#Node Masses
m1=13.5 #Masa de 132.39 kN
m2=6.75
# Columns
A_W36x652=1238.7/(100**2)
I_W36x652=2106131/(100**4)
#Chords
A_2C15x50=188.9672/(100**2)
I_2C15x50=33510.9/(100**4)
#Vertical truss members
A_2C6x13=49.0837/(100**2)
I_2C6x13=1442.975/(100**4)
#Diagonals
A_2MC12x35=131.703/(100**2)
I_2MC12x35=17885.826/(100**4)
############### Define Geometry #####################
#General Data
L=3.048
H_2=3*L
H_1=2*L
d_col=0.0
d_vig=0.0
#Nodess
op.node(1,0,0)
op.node(2,9*L,0)
#Lower Chord
for x in range(3,12+1):
op.node(x,(x-3)*L,H_1)
#Upper chord
for x in range(13,22+1):
op.node(x,(x-13)*L,H_2)
#Chord hinges nodes
op.node(100,4*L,H_1)
op.node(101,5*L,H_1)
op.node(102,4*L,H_2)
op.node(103,5*L,H_2)
#Column hinges nodes
op.node(200,0,0)
op.node(201,9*L,0)
#Supports
# fix(nodeTag, *constrValues)
op.fix(1,1,1,1)
op.fix(2,1,1,1)
#Masses
#mass(nodeTag, *massValues)
op.mass(13,m2,0,0)
op.mass(14,m1,0,0)
op.mass(15,m1,0,0)
op.mass(16,m1,0,0)
op.mass(17,m1,0,0)
op.mass(18,m1,0,0)
op.mass(19,m1,0,0)
op.mass(20,m1,0,0)
op.mass(21,m1,0,0)
op.mass(22,m2,0,0)
####CONSTRAINTS
#Floor horizontal constraints
op.equalDOF(13,14,1) #
op.equalDOF(13,15,1)
op.equalDOF(13,16,1)
op.equalDOF(13,19,1)
op.equalDOF(13,20,1)
op.equalDOF(13,21,1)
op.equalDOF(13,22,1)
#Hinges constraints
op.equalDOF(7,100,1,2)
op.equalDOF(8,101,1,2)
op.equalDOF(17,102,1,2)
op.equalDOF(18,103,1,2)
op.equalDOF(1,200,1,2)
op.equalDOF(2,201,1,2)
#Geometric transformation
# geomTransf('Linear', transfTag, '-jntOffset', *dI, *dJ)
transfTag=1
if PDelta == 'Yes':
op.geomTransf('PDelta',transfTag)
print("Efectos P-Delta incuidos")
elif PDelta == 'No':
op.geomTransf('Linear',transfTag)
print("Analisis sin efecots P-Delta")
#ELEMENTS
# element('elasticBeamColumn', eleTag, *eleNodes, Area, E_mod, Iz, transfTag, <'-mass', mass>, <'-cMass'>, <'-release', releaseCode>)
#Columns
op.element('elasticBeamColumn',1,200,3,A_W36x652,E,I_W36x652,transfTag)
op.element('elasticBeamColumn',2,201,12,A_W36x652,E,I_W36x652,transfTag)
op.element('elasticBeamColumn',3,3,13,A_W36x652,E,I_W36x652,transfTag)
op.element('elasticBeamColumn',4,12,22,A_W36x652,E,I_W36x652,transfTag)
#Chords
op.element('elasticBeamColumn',5,3,4,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',6,4,5,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',7,5,6,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',8,6,7,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',9,100,101,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',10,8,9,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',11,9,10,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',12,10,11,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',13,11,12,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',14,13,14,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',15,14,15,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',16,15,16,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',17,16,17,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',18,102,103,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',19,18,19,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',20,19,20,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',21,20,21,A_2C15x50,E,I_2C15x50,transfTag)
op.element('elasticBeamColumn',22,21,22,A_2C15x50,E,I_2C15x50,transfTag)
#Diagonals
op.element('Truss',23,3,14,A_2MC12x35,mat7)
op.element('Truss',24,14,5,A_2MC12x35,mat7)
op.element('Truss',25,5,16,A_2MC12x35,mat7)
op.element('Truss',26,16,7,A_2MC12x35,mat7)
op.element('Truss',27,8,19,A_2MC12x35,mat7)
op.element('Truss',28,19,10,A_2MC12x35,mat7)
op.element('Truss',29,10,21,A_2MC12x35,mat7)
op.element('Truss',30,21,12,A_2MC12x35,mat7)
#Vertical truss members
op.element('Truss',31,4,14,A_2C6x13,mat7)
op.element('Truss',32,5,15,A_2C6x13,mat7)
op.element('Truss',33,6,16,A_2C6x13,mat7)
op.element('Truss',34,7,17,A_2C15x50,mat7)
op.element('Truss',35,8,18,A_2C15x50,mat7)
op.element('Truss',36,9,19,A_2C6x13,mat7)
op.element('Truss',37,10,20,A_2C6x13,mat7)
op.element('Truss',38,11,21,A_2C6x13,mat7)
# Plastic Hinges
# element('zeroLength', eleTag, *eleNodes, '-mat', *matTags, '-dir', *dirs, <'-doRayleigh', rFlag=0>, <'-orient', *vecx, *vecyp>)
#Chords
op.element('zeroLength',100,7,100,'-mat',mat9,'-dir',6)
op.element('zeroLength',101,101,8,'-mat',mat9,'-dir',6)
op.element('zeroLength',102,17,102,'-mat',mat9,'-dir',6)
op.element('zeroLength',103,103,18,'-mat',mat9,'-dir',6)
#Columns
op.element('zeroLength',200,1,200,'-mat',mat8,'-dir',6)
op.element('zeroLength',201,2,201,'-mat',mat8,'-dir',6)
if PDelta == "Yes":
#Vertical nodal load
q1=-132.39 #kN
q2=-66.2 #kN
#timeSeries(tsType, tsTag, *tsArgs)
tsTag=1
op.timeSeries('Linear',tsTag)
# Load Pattern
patternTag1=1
op.pattern('Plain',patternTag1,tsTag)
# Aplying loads
op.load(13,0,q2,0) # Ingresar mitad de la carga de una planta del edificio si hay porticos intermedios
op.load(14,0,q1,0)
op.load(15,0,q1,0)
op.load(16,0,q1,0)
op.load(17,0,q1,0)
op.load(18,0,q1,0)
op.load(19,0,q1,0)
op.load(20,0,q1,0)
op.load(21,0,q1,0)
op.load(22,0,q2,0)
Issue with PDelta efects in 2D Special Truss Moment Frame
Moderators: silvia, selimgunay, Moderators