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
98
99
100
101
102
103
104
105
106 | % ======================================================================
% 2. Material models
% ======================================================================
% Material tags
matConc = 1; % confined concrete (Concrete01 / Mander)
matCover = 2; % unconfined concrete (Concrete01)
matSteel = 3; % reinforcing steel (Steel02 / Menegotto-Pinto)
% --- Confined concrete (Mander model parameters) ---
% Stirrup: D10 @ 100 mm spacing, 4-leg in both directions
% (Parameters computed externally from Mander et al. 1988)
fpc_c = -35.0e6; % confined peak stress [Pa] (negative = compression)
epsc0 = -0.003; % strain at peak stress
fpcu_c = -28.0e6; % residual stress (0.80 * fpc_c)
epscu = -0.0160; % ultimate confined strain (Mander formula)
ops.uniaxialMaterial('Concrete02', matConc, fpc_c, epsc0, fpcu_c, epscu);
% --- Unconfined (cover) concrete ---
fpc_u = -30.0e6; % cylinder strength [Pa]
epsc0u = -0.0020; % strain at peak (plain concrete)
fpcu_u = -5.0; % spalls at ultimate (brittle)
epscuu = -0.0040; % ultimate strain of cover
ops.uniaxialMaterial('Concrete02', matCover, fpc_u, epsc0u, fpcu_u, epscuu);
% --- Reinforcing steel (Menegotto-Pinto / Steel02) ---
Fy = 400.0e6; % yield strength [Pa]
Es = 200.0e9; % elastic modulus [Pa]
b_s = 0.01; % strain-hardening ratio (post-yield slope / Es)
% Recommended Menegotto-Pinto constants (Filippou et al. 1983):
R0 = 18; cR1 = 0.925; cR2 = 0.15;
ops.uniaxialMaterial('Steel02', matSteel+10, Fy, Es, b_s, R0, cR1, cR2);
ops.uniaxialMaterial('MinMax', matSteel, matSteel+10, '-min', -0.15, '-max', 0.15);
eps_y = Fy / Es; % yield strain (used later for yield-point search)
% ======================================================================
% 3. Fiber section (secTag = 1, bending about local y-axis)
% ======================================================================
%
% Coordinate convention (OpenSees zeroLengthSection, local axes):
% y : horizontal (width b)
% z : vertical (height h)
% Bending about y-axis => M acts about the z-direction on plan,
% but OpenSees DOF 5 = My.
%
% Patch corners: (z_min, y_min, z_max, y_max) [for 'rect' patch]
%
% z (height)
% ^
% | b = 0.40 m
% _____|_______________________
% | | cover | <- z = +h/2
% | | _______________ |
% | cov | | | cov|
% | | | confined | | <- core region
% | | | concrete | |
% | | |_____________| |
% | | cover | <- z = -h/2
% |_____|_____________________|-----> y (width)
%
secTag = 1;
opsMAT.pre.setSectionGeometryRecorder(true);
ops.section('Fiber', secTag, "-GJ", 1E12);
% Core concrete patch (confined)
ops.patch('rect', matConc, nFibY_core, nFibZ_core, ...
-(h/2 - cover), -(b/2 - cover), ... % z_min, y_min
(h/2 - cover), (b/2 - cover)); % z_max, y_max
% Cover patches (unconfined) - top strip
ops.patch('rect', matCover, nFibY_cover, nFibZ_cover, ...
(h/2 - cover), -b/2, h/2, b/2);
% Cover patches - bottom strip
ops.patch('rect', matCover, nFibY_cover, nFibZ_cover, ...
-h/2, -b/2, -(h/2 - cover), b/2);
% Cover patches - left side strip
ops.patch('rect', matCover, nFibY_side, nFibZ_side, ...
-(h/2 - cover), -b/2, (h/2 - cover), -(b/2 - cover));
% Cover patches - right side strip
ops.patch('rect', matCover, nFibY_side, nFibZ_side, ...
-(h/2 - cover), (b/2 - cover), (h/2 - cover), b/2);
% Reinforcement layers (layer 'straight': matTag, nBars, As, z1,y1, z2,y2)
% Top row (z = +d_top)
ops.layer('straight', matSteel, nTop, As1, ...
d_top, -(b/2 - cover), d_top, (b/2 - cover));
% Bottom row (z = -d_top)
ops.layer('straight', matSteel, nBot, As1, ...
-d_top, -(b/2 - cover), -d_top, (b/2 - cover));
% Middle rows on left face
ops.layer('straight', matSteel, 2, As1, ...
-(h/4 - cover/2), -(b/2 - cover), (h/4 - cover/2), -(b/2 - cover));
% Middle rows on right face
ops.layer('straight', matSteel, 2, As1, ...
-(h/4 - cover/2), (b/2 - cover), (h/4 - cover/2), (b/2 - cover));
opsMAT.pre.plotSection(secTag);
|