14.1.4. Moment Curvature AnalysisΒΆ
The source code is shown below, which can be downloaded
here
.Run the source code in your favorite Python program and should see results below
Start MomentCurvature.py example
Estimated yield curvature: 0.000126984126984127
Passed!
==========================
1from openseespy.opensees import *
2
3def MomentCurvature(secTag, axialLoad, maxK, numIncr=100):
4
5 # Define two nodes at (0,0)
6 node(1, 0.0, 0.0)
7 node(2, 0.0, 0.0)
8
9 # Fix all degrees of freedom except axial and bending
10 fix(1, 1, 1, 1)
11 fix(2, 0, 1, 0)
12
13 # Define element
14 # tag ndI ndJ secTag
15 element('zeroLengthSection', 1, 1, 2, secTag)
16
17 # Define constant axial load
18 timeSeries('Constant', 1)
19 pattern('Plain', 1, 1)
20 load(2, axialLoad, 0.0, 0.0)
21
22 # Define analysis parameters
23 integrator('LoadControl', 0.0)
24 system('SparseGeneral', '-piv')
25 test('NormUnbalance', 1e-9, 10)
26 numberer('Plain')
27 constraints('Plain')
28 algorithm('Newton')
29 analysis('Static')
30
31 # Do one analysis for constant axial load
32 analyze(1)
33
34 # Define reference moment
35 timeSeries('Linear', 2)
36 pattern('Plain',2, 2)
37 load(2, 0.0, 0.0, 1.0)
38
39 # Compute curvature increment
40 dK = maxK / numIncr
41
42 # Use displacement control at node 2 for section analysis
43 integrator('DisplacementControl', 2,3,dK,1,dK,dK)
44
45 # Do the section analysis
46 analyze(numIncr)
47
48
49wipe()
50print("Start MomentCurvature.py example")
51
52# Define model builder
53# --------------------
54model('basic','-ndm',2,'-ndf',3)
55
56# Define materials for nonlinear columns
57# ------------------------------------------
58# CONCRETE tag f'c ec0 f'cu ecu
59# Core concrete (confined)
60uniaxialMaterial('Concrete01',1, -6.0, -0.004, -5.0, -0.014)
61
62# Cover concrete (unconfined)
63uniaxialMaterial('Concrete01',2, -5.0, -0.002, 0.0, -0.006)
64
65# STEEL
66# Reinforcing steel
67fy = 60.0 # Yield stress
68E = 30000.0 # Young's modulus
69
70# tag fy E0 b
71uniaxialMaterial('Steel01', 3, fy, E, 0.01)
72
73# Define cross-section for nonlinear columns
74# ------------------------------------------
75
76# set some paramaters
77colWidth = 15
78colDepth = 24
79
80cover = 1.5
81As = 0.60; # area of no. 7 bars
82
83# some variables derived from the parameters
84y1 = colDepth/2.0
85z1 = colWidth/2.0
86
87
88section('Fiber', 1)
89
90# Create the concrete core fibers
91patch('rect',1,10,1 ,cover-y1, cover-z1, y1-cover, z1-cover)
92
93# Create the concrete cover fibers (top, bottom, left, right)
94patch('rect',2,10,1 ,-y1, z1-cover, y1, z1)
95patch('rect',2,10,1 ,-y1, -z1, y1, cover-z1)
96patch('rect',2,2,1 ,-y1, cover-z1, cover-y1, z1-cover)
97patch('rect',2,2,1 ,y1-cover, cover-z1, y1, z1-cover)
98
99# Create the reinforcing fibers (left, middle, right)
100layer('straight', 3, 3, As, y1-cover, z1-cover, y1-cover, cover-z1)
101layer('straight', 3, 2, As, 0.0 , z1-cover, 0.0 , cover-z1)
102layer('straight', 3, 3, As, cover-y1, z1-cover, cover-y1, cover-z1)
103
104# Estimate yield curvature
105# (Assuming no axial load and only top and bottom steel)
106# d -- from cover to rebar
107d = colDepth-cover
108# steel yield strain
109epsy = fy/E
110Ky = epsy/(0.7*d)
111
112# Print estimate to standard output
113print("Estimated yield curvature: ", Ky)
114
115# Set axial load
116P = -180.0
117
118# Target ductility for analysis
119mu = 15.0
120
121# Number of analysis increments
122numIncr = 100
123
124# Call the section analysis procedure
125MomentCurvature(1, P, Ky*mu, numIncr)
126
127results = open('results.out','a+')
128
129u = nodeDisp(2,3)
130if abs(u-0.00190476190476190541)<1e-12:
131 results.write('PASSED : MomentCurvature.py\n');
132 print("Passed!")
133else:
134 results.write('FAILED : MomentCurvature.py\n');
135 print("Failed!")
136
137results.close()
138
139print("==========================")