structuralcodes 0.3.0__py3-none-any.whl → 0.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of structuralcodes might be problematic. Click here for more details.
- structuralcodes/__init__.py +1 -1
- structuralcodes/codes/mc2010/__init__.py +22 -0
- structuralcodes/codes/mc2010/_interface_concrete_steel_rebar.py +348 -0
- structuralcodes/core/base.py +0 -21
- structuralcodes/geometry/_circular.py +25 -5
- structuralcodes/geometry/_geometry.py +6 -1
- structuralcodes/geometry/_rectangular.py +23 -5
- structuralcodes/materials/concrete/_concrete.py +1 -62
- structuralcodes/materials/concrete/_concreteEC2_2004.py +270 -224
- structuralcodes/materials/concrete/_concreteEC2_2023.py +246 -188
- structuralcodes/materials/concrete/_concreteMC2010.py +280 -235
- structuralcodes/materials/constitutive_laws/__init__.py +16 -15
- structuralcodes/materials/constitutive_laws/_bilinearcompression.py +10 -9
- structuralcodes/materials/reinforcement/_reinforcement.py +0 -71
- structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +36 -1
- structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +33 -0
- structuralcodes/materials/reinforcement/_reinforcementMC2010.py +37 -1
- structuralcodes/sections/_generic.py +23 -7
- {structuralcodes-0.3.0.dist-info → structuralcodes-0.4.0.dist-info}/METADATA +3 -2
- {structuralcodes-0.3.0.dist-info → structuralcodes-0.4.0.dist-info}/RECORD +22 -20
- {structuralcodes-0.3.0.dist-info → structuralcodes-0.4.0.dist-info}/WHEEL +1 -1
- structuralcodes-0.4.0.dist-info/licenses/LICENSE +201 -0
|
@@ -5,6 +5,7 @@ import warnings
|
|
|
5
5
|
|
|
6
6
|
from structuralcodes.codes import mc2010
|
|
7
7
|
|
|
8
|
+
from ..constitutive_laws import ConstitutiveLaw, create_constitutive_law
|
|
8
9
|
from ._concrete import Concrete
|
|
9
10
|
|
|
10
11
|
|
|
@@ -18,7 +19,6 @@ class ConcreteMC2010(Concrete):
|
|
|
18
19
|
_fctkmin: t.Optional[float] = None
|
|
19
20
|
_fctkmax: t.Optional[float] = None
|
|
20
21
|
_Gf: t.Optional[float] = None
|
|
21
|
-
_Eci: t.Optional[float] = None
|
|
22
22
|
_alpha_cc: t.Optional[float] = None
|
|
23
23
|
_eps_c1: t.Optional[float] = None
|
|
24
24
|
_eps_cu1: t.Optional[float] = None
|
|
@@ -35,8 +35,33 @@ class ConcreteMC2010(Concrete):
|
|
|
35
35
|
name: t.Optional[str] = None,
|
|
36
36
|
density: float = 2400.0,
|
|
37
37
|
gamma_c: t.Optional[float] = None,
|
|
38
|
-
existing: bool = False,
|
|
39
38
|
alpha_cc: t.Optional[float] = None,
|
|
39
|
+
constitutive_law: t.Optional[
|
|
40
|
+
t.Union[
|
|
41
|
+
t.Literal[
|
|
42
|
+
'elastic',
|
|
43
|
+
'parabolarectangle',
|
|
44
|
+
'bilinearcompression',
|
|
45
|
+
'sargin',
|
|
46
|
+
'popovics',
|
|
47
|
+
],
|
|
48
|
+
ConstitutiveLaw,
|
|
49
|
+
]
|
|
50
|
+
] = 'parabolarectangle',
|
|
51
|
+
fcm: t.Optional[float] = None,
|
|
52
|
+
fctm: t.Optional[float] = None,
|
|
53
|
+
fctkmin: t.Optional[float] = None,
|
|
54
|
+
fctkmax: t.Optional[float] = None,
|
|
55
|
+
Eci: t.Optional[float] = None,
|
|
56
|
+
Gf: t.Optional[float] = None,
|
|
57
|
+
eps_c1: t.Optional[float] = None,
|
|
58
|
+
eps_cu1: t.Optional[float] = None,
|
|
59
|
+
k_sargin: t.Optional[float] = None,
|
|
60
|
+
eps_c2: t.Optional[float] = None,
|
|
61
|
+
eps_cu2: t.Optional[float] = None,
|
|
62
|
+
n_parabolic_rectangular: t.Optional[float] = None,
|
|
63
|
+
eps_c3: t.Optional[float] = None,
|
|
64
|
+
eps_cu3: t.Optional[float] = None,
|
|
40
65
|
**kwargs,
|
|
41
66
|
):
|
|
42
67
|
"""Initializes a new instance of Concrete for MC 2010.
|
|
@@ -49,11 +74,49 @@ class ConcreteMC2010(Concrete):
|
|
|
49
74
|
name (Optional(str)): A descriptive name for concrete.
|
|
50
75
|
density (float): Density of material in kg/m3 (default: 2400).
|
|
51
76
|
gamma_c (Optional(float)): The partial factor for concrete.
|
|
52
|
-
existing (bool): The material is of an existing structure
|
|
53
|
-
(default: False).
|
|
54
77
|
alpha_cc (float, optional): A factor for considering long-term
|
|
55
78
|
effects on the strength, and effects that arise from the way
|
|
56
79
|
the load is applied.
|
|
80
|
+
fcm (float, optional): The mean compressive strength.
|
|
81
|
+
fctm (float, optional): The mean tensile strength.
|
|
82
|
+
fctkmin (float, optional): The minimum tensile strength.
|
|
83
|
+
fctkmax (float, optional): The maximum tensile strength.
|
|
84
|
+
Eci (float, optional): The initial tangent Young's modulus.
|
|
85
|
+
Gf (float, optional): The tensile fracture energy.
|
|
86
|
+
eps_c1 (float, optional): The strain at peak stress for the Sargin
|
|
87
|
+
constitutive law.
|
|
88
|
+
eps_cu1 (float, optional): The ultimate strain for the Sargin
|
|
89
|
+
constitutive law.
|
|
90
|
+
k_sargin (float, optional): The coefficient for the Sargin
|
|
91
|
+
constitutive law.
|
|
92
|
+
eps_c2 (float, optional): The strain at peak stress for the
|
|
93
|
+
parabolic rectangular constitutive law.
|
|
94
|
+
eps_cu2 (float, optional): The ultimate strain for the parabolic
|
|
95
|
+
rectangular constitutive law.
|
|
96
|
+
n_parabolic_rectangular (float, optional): The coefficient for the
|
|
97
|
+
parabolic rectangular constitutive law.
|
|
98
|
+
eps_c3 (float, optional): The strain at peak stress for the
|
|
99
|
+
bilinear constitutive law.
|
|
100
|
+
eps_cu3 (float, optional): The ultimate strain for the bilinear
|
|
101
|
+
constitutive law.
|
|
102
|
+
|
|
103
|
+
Raises:
|
|
104
|
+
ValueError: If fcm is lower than fck.
|
|
105
|
+
ValueError: If k_sargin is negative.
|
|
106
|
+
ValueError: If n_parabolic_rectangular is negative.
|
|
107
|
+
ValueError: If the constitutive law name is not available for the
|
|
108
|
+
material.
|
|
109
|
+
ValueError: If the provided constitutive law is not valid for
|
|
110
|
+
concrete.
|
|
111
|
+
Warning: If Eci is lower than 1e4 or larger than 1e5.
|
|
112
|
+
Warning: If fctm is larger than 0.5 * fck.
|
|
113
|
+
Warning: If eps_c1 is larger than 0.1.
|
|
114
|
+
Warning: If eps_cu1 is larger than 0.1.
|
|
115
|
+
Warning: If eps_c2 is larger than 0.1.
|
|
116
|
+
Warning: If eps_cu2 is larger than 0.1.
|
|
117
|
+
Warning: If n_parabolic_rectangular is larger than 5.
|
|
118
|
+
Warning: If eps_c3 is larger than 0.1.
|
|
119
|
+
Warning: If eps_cu3 is larger than 0.1.
|
|
57
120
|
"""
|
|
58
121
|
del kwargs
|
|
59
122
|
if name is None:
|
|
@@ -62,26 +125,137 @@ class ConcreteMC2010(Concrete):
|
|
|
62
125
|
fck=fck,
|
|
63
126
|
name=name,
|
|
64
127
|
density=density,
|
|
65
|
-
existing=existing,
|
|
66
128
|
gamma_c=gamma_c,
|
|
67
129
|
)
|
|
68
130
|
self._alpha_cc = alpha_cc
|
|
131
|
+
self._fcm = abs(fcm) if fcm is not None else None
|
|
132
|
+
self._fctm = abs(fctm) if fctm is not None else None
|
|
133
|
+
self._fctkmin = abs(fctkmin) if fctkmin is not None else None
|
|
134
|
+
self._fctkmax = abs(fctkmax) if fctkmax is not None else None
|
|
135
|
+
self._Eci = abs(Eci) if Eci is not None else None
|
|
136
|
+
self._Gf = abs(Gf) if Gf is not None else None
|
|
137
|
+
self._eps_c1 = abs(eps_c1) if eps_c1 is not None else None
|
|
138
|
+
self._eps_cu1 = abs(eps_cu1) if eps_cu1 is not None else None
|
|
139
|
+
self._k_sargin = k_sargin if k_sargin is not None else None
|
|
140
|
+
self._eps_c2 = abs(eps_c2) if eps_c2 is not None else None
|
|
141
|
+
self._eps_cu2 = abs(eps_cu2) if eps_cu2 is not None else None
|
|
142
|
+
self._n_parabolic_rectangular = (
|
|
143
|
+
n_parabolic_rectangular
|
|
144
|
+
if n_parabolic_rectangular is not None
|
|
145
|
+
else None
|
|
146
|
+
)
|
|
147
|
+
self._eps_c3 = abs(eps_c3) if eps_c3 is not None else None
|
|
148
|
+
self._eps_cu3 = abs(eps_cu3) if eps_cu3 is not None else None
|
|
149
|
+
|
|
150
|
+
self.__post_init__()
|
|
151
|
+
|
|
152
|
+
# The constitutive law requires valid attributes, so it should be set
|
|
153
|
+
# after validation
|
|
154
|
+
self._constitutive_law = (
|
|
155
|
+
constitutive_law
|
|
156
|
+
if isinstance(constitutive_law, ConstitutiveLaw)
|
|
157
|
+
else create_constitutive_law(
|
|
158
|
+
constitutive_law_name=constitutive_law, material=self
|
|
159
|
+
)
|
|
160
|
+
)
|
|
161
|
+
if 'concrete' not in self._constitutive_law.__materials__:
|
|
162
|
+
raise ValueError(
|
|
163
|
+
'The provided constitutive law is not valid for concrete.'
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
def __post_init__(self):
|
|
167
|
+
"""Validator for the attributes that are set in the constructor."""
|
|
168
|
+
# fcm
|
|
169
|
+
if self._fcm is not None and self._fcm <= self._fck:
|
|
170
|
+
raise ValueError(
|
|
171
|
+
(
|
|
172
|
+
'Mean compressive strength cannot be lower than',
|
|
173
|
+
'characteristic strength.\n',
|
|
174
|
+
'Current characteristing strength: ',
|
|
175
|
+
f'fck = {self._fck}.',
|
|
176
|
+
f'Current value: value = {self._fcm}',
|
|
177
|
+
)
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# Eci
|
|
181
|
+
if self._Eci is not None and (self._Eci < 1e4 or self._Eci > 1e5):
|
|
182
|
+
warnings.warn(
|
|
183
|
+
'A suspect value of Eci has been input.\n'
|
|
184
|
+
f'Please check Eci that should be in MPa ({self._Eci} given).'
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
# fctm
|
|
188
|
+
if self._fctm is not None and self._fctm > 0.5 * self._fck:
|
|
189
|
+
warnings.warn(
|
|
190
|
+
'A suspect value of fctm has been input. Please check.'
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
# eps_c1
|
|
194
|
+
if self._eps_c1 is not None and abs(self._eps_c1) >= 0.1:
|
|
195
|
+
warnings.warn(
|
|
196
|
+
'A suspect value is input for eps_c1 that should be a pure'
|
|
197
|
+
f' number without units. Please check ({self._eps_c1} given).'
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# eps_cu1
|
|
201
|
+
if self._eps_cu1 is not None and abs(self._eps_cu1) >= 0.1:
|
|
202
|
+
warnings.warn(
|
|
203
|
+
'A suspect value is input for eps_cu1 that should be a pure'
|
|
204
|
+
f' number without units. Please check ({self._eps_cu1} given).'
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
# k_sargin
|
|
208
|
+
if self._k_sargin is not None and self._k_sargin < 0:
|
|
209
|
+
raise ValueError(
|
|
210
|
+
f'k_sargin should be a positive value ({self._k_sargin} given)'
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
# eps_c2
|
|
214
|
+
if self._eps_c2 is not None and abs(self._eps_c2) >= 0.1:
|
|
215
|
+
warnings.warn(
|
|
216
|
+
'A suspect value is input for eps_c2 that should be a pure'
|
|
217
|
+
f' number without units. Please check ({self._eps_c2} given).'
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# eps_cu2
|
|
221
|
+
if self._eps_cu2 is not None and abs(self._eps_cu2) >= 0.1:
|
|
222
|
+
warnings.warn(
|
|
223
|
+
'A suspect value is input for eps_cu2 that should be a pure'
|
|
224
|
+
f' number without units. Please check ({self._eps_cu2} given).'
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
# n_parabolic_rectangular
|
|
228
|
+
if (
|
|
229
|
+
self._n_parabolic_rectangular is not None
|
|
230
|
+
and self._n_parabolic_rectangular < 0
|
|
231
|
+
):
|
|
232
|
+
raise ValueError(
|
|
233
|
+
'n should be a positive value '
|
|
234
|
+
f'({self._n_parabolic_rectangular} given)'
|
|
235
|
+
)
|
|
236
|
+
if (
|
|
237
|
+
self._n_parabolic_rectangular is not None
|
|
238
|
+
and self._n_parabolic_rectangular >= 5
|
|
239
|
+
):
|
|
240
|
+
warnings.warn(
|
|
241
|
+
'A suspect value is input for n_parabolic_rectangular. Please '
|
|
242
|
+
'check '
|
|
243
|
+
f'({self._n_parabolic_rectangular} given).'
|
|
244
|
+
)
|
|
69
245
|
|
|
70
|
-
|
|
71
|
-
self.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
self.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
self._eps_c3 = None
|
|
84
|
-
self._eps_cu3 = None
|
|
246
|
+
# eps_c3
|
|
247
|
+
if self._eps_c3 is not None and abs(self._eps_c3) >= 0.1:
|
|
248
|
+
warnings.warn(
|
|
249
|
+
'A suspect value is input for eps_c3 that should be a pure'
|
|
250
|
+
f' number without units. Please check ({self._eps_c3} given).'
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
# eps_cu3
|
|
254
|
+
if self._eps_cu3 is not None and abs(self._eps_cu3) >= 0.1:
|
|
255
|
+
warnings.warn(
|
|
256
|
+
'A suspect value is input for eps_cu3 that should be a pure'
|
|
257
|
+
f' number without units. Please check ({self._eps_cu3} given).'
|
|
258
|
+
)
|
|
85
259
|
|
|
86
260
|
@property
|
|
87
261
|
def fcm(self) -> float:
|
|
@@ -89,31 +263,14 @@ class ConcreteMC2010(Concrete):
|
|
|
89
263
|
|
|
90
264
|
Returns:
|
|
91
265
|
float: The mean compressive strength in MPa.
|
|
92
|
-
"""
|
|
93
|
-
self._fcm = self._fcm or mc2010.fcm(self._fck)
|
|
94
|
-
return self._fcm
|
|
95
|
-
|
|
96
|
-
@fcm.setter
|
|
97
|
-
def fcm(self, value: float):
|
|
98
|
-
"""Sets a user defined value for fcm.
|
|
99
266
|
|
|
100
|
-
|
|
101
|
-
value
|
|
102
|
-
|
|
103
|
-
Raises:
|
|
104
|
-
ValueError: If value is lower than fck.
|
|
267
|
+
Note:
|
|
268
|
+
The returned value is derived from fck if fcm is not manually
|
|
269
|
+
provided when initializing the object.
|
|
105
270
|
"""
|
|
106
|
-
if
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
'Mean compressive strength cannot be lower than',
|
|
110
|
-
'characteristic strength.\n',
|
|
111
|
-
'Current characteristing strength: ',
|
|
112
|
-
f'fck = {self._fck}.',
|
|
113
|
-
f'Current value: value = {value}',
|
|
114
|
-
)
|
|
115
|
-
)
|
|
116
|
-
self._fcm = abs(value)
|
|
271
|
+
if self._fcm is None:
|
|
272
|
+
return mc2010.fcm(self._fck)
|
|
273
|
+
return self._fcm
|
|
117
274
|
|
|
118
275
|
@property
|
|
119
276
|
def Eci(self) -> float:
|
|
@@ -121,24 +278,17 @@ class ConcreteMC2010(Concrete):
|
|
|
121
278
|
days.
|
|
122
279
|
|
|
123
280
|
It is assumed a normal concrete with quartzite aggregates (alfa_e = 1)
|
|
124
|
-
"""
|
|
125
|
-
self._Eci = self._Eci or mc2010.Eci(self.fcm)
|
|
126
|
-
return self._Eci
|
|
127
281
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
"""Sets a user defined value for modulus of elasticity at the concrete
|
|
131
|
-
age of 28 days, Eci.
|
|
282
|
+
Returns:
|
|
283
|
+
float: The modulus of elasticity in MPa.
|
|
132
284
|
|
|
133
|
-
|
|
134
|
-
value
|
|
285
|
+
Note:
|
|
286
|
+
The returned value is derived from fcm if Eci is not manually
|
|
287
|
+
provided when initializing the object.
|
|
135
288
|
"""
|
|
136
|
-
if
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
'Please check Eci that should be in MPa ({value} given).'
|
|
140
|
-
)
|
|
141
|
-
self._Eci = abs(value)
|
|
289
|
+
if self._Eci is None:
|
|
290
|
+
return mc2010.Eci(self.fcm)
|
|
291
|
+
return self._Eci
|
|
142
292
|
|
|
143
293
|
@property
|
|
144
294
|
def fctm(self) -> float:
|
|
@@ -146,22 +296,14 @@ class ConcreteMC2010(Concrete):
|
|
|
146
296
|
|
|
147
297
|
Returns:
|
|
148
298
|
float: The mean tensile strength in MPa.
|
|
149
|
-
"""
|
|
150
|
-
self._fctm = self._fctm or mc2010.fctm(self._fck)
|
|
151
|
-
return self._fctm
|
|
152
|
-
|
|
153
|
-
@fctm.setter
|
|
154
|
-
def fctm(self, value: float):
|
|
155
|
-
"""Sets a user defined value for fctm.
|
|
156
299
|
|
|
157
|
-
|
|
158
|
-
value
|
|
300
|
+
Note:
|
|
301
|
+
The returned value is derived from fck if fctm is not manually
|
|
302
|
+
provided when initializing the object.
|
|
159
303
|
"""
|
|
160
|
-
if
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
)
|
|
164
|
-
self._fctm = abs(value)
|
|
304
|
+
if self._fctm is None:
|
|
305
|
+
return mc2010.fctm(self._fck)
|
|
306
|
+
return self._fctm
|
|
165
307
|
|
|
166
308
|
@property
|
|
167
309
|
def fctkmin(self) -> float:
|
|
@@ -169,18 +311,14 @@ class ConcreteMC2010(Concrete):
|
|
|
169
311
|
|
|
170
312
|
Returns:
|
|
171
313
|
float: The lower bound tensile strength in MPa.
|
|
172
|
-
"""
|
|
173
|
-
self._fctkmin = self._fctkmin or mc2010.fctkmin(self.fctm)
|
|
174
|
-
return self._fctkmin
|
|
175
|
-
|
|
176
|
-
@fctkmin.setter
|
|
177
|
-
def fctkmin(self, value: float):
|
|
178
|
-
"""Sets a user defined value for fctkmin.
|
|
179
314
|
|
|
180
|
-
|
|
181
|
-
value
|
|
315
|
+
Note:
|
|
316
|
+
The returned value is derived from fctm if fctkmin is not manually
|
|
317
|
+
provided when initializing the object.
|
|
182
318
|
"""
|
|
183
|
-
self._fctkmin
|
|
319
|
+
if self._fctkmin is None:
|
|
320
|
+
return mc2010.fctkmin(self.fctm)
|
|
321
|
+
return self._fctkmin
|
|
184
322
|
|
|
185
323
|
@property
|
|
186
324
|
def fctkmax(self) -> float:
|
|
@@ -188,18 +326,14 @@ class ConcreteMC2010(Concrete):
|
|
|
188
326
|
|
|
189
327
|
Returns:
|
|
190
328
|
float: The upper bound tensile strength in MPa.
|
|
191
|
-
"""
|
|
192
|
-
self._fctkmax = self._fctkmax or mc2010.fctkmax(self.fctm)
|
|
193
|
-
return self._fctkmax
|
|
194
|
-
|
|
195
|
-
@fctkmax.setter
|
|
196
|
-
def fctkmax(self, value: float):
|
|
197
|
-
"""Sets a user defined value for fctkmax.
|
|
198
329
|
|
|
199
|
-
|
|
200
|
-
value
|
|
330
|
+
Note:
|
|
331
|
+
The returned value is derived from fctm if fctkmax is not manually
|
|
332
|
+
provided when initializing the object.
|
|
201
333
|
"""
|
|
202
|
-
self._fctkmax
|
|
334
|
+
if self._fctkmax is None:
|
|
335
|
+
return mc2010.fctkmax(self.fctm)
|
|
336
|
+
return self._fctkmax
|
|
203
337
|
|
|
204
338
|
@property
|
|
205
339
|
def Gf(self) -> float:
|
|
@@ -207,18 +341,14 @@ class ConcreteMC2010(Concrete):
|
|
|
207
341
|
|
|
208
342
|
Returns:
|
|
209
343
|
float: The fracture energy in N/m.
|
|
210
|
-
"""
|
|
211
|
-
self._Gf = self._Gf or mc2010.Gf(self._fck)
|
|
212
|
-
return self._Gf
|
|
213
|
-
|
|
214
|
-
@Gf.setter
|
|
215
|
-
def Gf(self, value: float):
|
|
216
|
-
"""Sets a user defined value for fracture energy Gf.
|
|
217
344
|
|
|
218
|
-
|
|
219
|
-
value
|
|
345
|
+
Note:
|
|
346
|
+
The returned value is derived from fck if Gf is not manually
|
|
347
|
+
provided when initializing the object.
|
|
220
348
|
"""
|
|
221
|
-
self._Gf
|
|
349
|
+
if self._Gf is None:
|
|
350
|
+
return mc2010.Gf(self._fck)
|
|
351
|
+
return self._Gf
|
|
222
352
|
|
|
223
353
|
@property
|
|
224
354
|
def gamma_c(self) -> float:
|
|
@@ -251,24 +381,14 @@ class ConcreteMC2010(Concrete):
|
|
|
251
381
|
|
|
252
382
|
Returns:
|
|
253
383
|
float: The strain at maximum compressive strength of concrete.
|
|
254
|
-
"""
|
|
255
|
-
self._eps_c1 = self._eps_c1 or mc2010.eps_c1(self._fck)
|
|
256
|
-
return self._eps_c1
|
|
257
384
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
constitutive law.
|
|
262
|
-
|
|
263
|
-
Arguments:
|
|
264
|
-
value (float): The new value for eps_c1, no units.
|
|
385
|
+
Note:
|
|
386
|
+
The returned value is derived from fck if eps_c1 is not manually
|
|
387
|
+
provided when initializing the object.
|
|
265
388
|
"""
|
|
266
|
-
if
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
' number without units. Plase check ({value} given).'
|
|
270
|
-
)
|
|
271
|
-
self._eps_c1 = value
|
|
389
|
+
if self._eps_c1 is None:
|
|
390
|
+
return mc2010.eps_c1(self._fck)
|
|
391
|
+
return self._eps_c1
|
|
272
392
|
|
|
273
393
|
@property
|
|
274
394
|
def eps_cu1(self) -> float:
|
|
@@ -276,23 +396,14 @@ class ConcreteMC2010(Concrete):
|
|
|
276
396
|
|
|
277
397
|
Returns:
|
|
278
398
|
float: The maximum strength at failure of concrete.
|
|
279
|
-
"""
|
|
280
|
-
self._eps_cu1 = self._eps_cu1 or mc2010.eps_cu1(self._fck)
|
|
281
|
-
return self._eps_cu1
|
|
282
|
-
|
|
283
|
-
@eps_cu1.setter
|
|
284
|
-
def eps_cu1(self, value: float):
|
|
285
|
-
"""Sets the nominal ultimate strain for Sargin constitutive law.
|
|
286
399
|
|
|
287
|
-
|
|
288
|
-
value
|
|
400
|
+
Note:
|
|
401
|
+
The returned value is derived from fck if eps_cu1 is not manually
|
|
402
|
+
provided when initializing the object.
|
|
289
403
|
"""
|
|
290
|
-
if
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
' number without units. Plase check ({value} given).'
|
|
294
|
-
)
|
|
295
|
-
self._eps_cu1 = value
|
|
404
|
+
if self._eps_cu1 is None:
|
|
405
|
+
return mc2010.eps_cu1(self._fck)
|
|
406
|
+
return self._eps_cu1
|
|
296
407
|
|
|
297
408
|
@property
|
|
298
409
|
def k_sargin(self) -> float:
|
|
@@ -300,23 +411,14 @@ class ConcreteMC2010(Concrete):
|
|
|
300
411
|
|
|
301
412
|
Returns:
|
|
302
413
|
float: The plastic coefficient for Sargin law.
|
|
303
|
-
"""
|
|
304
|
-
self._k_sargin = self._k_sargin or mc2010.k_sargin(self._fck)
|
|
305
|
-
return self._k_sargin
|
|
306
|
-
|
|
307
|
-
@k_sargin.setter
|
|
308
|
-
def k_sargin(self, value: float):
|
|
309
|
-
"""Sets the the coefficient for Sargin constitutive law.
|
|
310
|
-
|
|
311
|
-
Arguments:
|
|
312
|
-
value (float): The new value for k, no units.
|
|
313
414
|
|
|
314
|
-
|
|
315
|
-
|
|
415
|
+
Note:
|
|
416
|
+
The returned value is derived from fck if k_sargin is not manually
|
|
417
|
+
provided when initializing the object.
|
|
316
418
|
"""
|
|
317
|
-
if
|
|
318
|
-
|
|
319
|
-
self._k_sargin
|
|
419
|
+
if self._k_sargin is None:
|
|
420
|
+
return mc2010.k_sargin(self._fck)
|
|
421
|
+
return self._k_sargin
|
|
320
422
|
|
|
321
423
|
@property
|
|
322
424
|
def eps_c2(self) -> float:
|
|
@@ -325,24 +427,14 @@ class ConcreteMC2010(Concrete):
|
|
|
325
427
|
|
|
326
428
|
Returns:
|
|
327
429
|
float: The strain at maximum compressive strength of concrete.
|
|
328
|
-
"""
|
|
329
|
-
self._eps_c2 = self._eps_c2 or mc2010.eps_c2(self.fck)
|
|
330
|
-
return self._eps_c2
|
|
331
430
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
for the Parabola-rectangle constitutive law.
|
|
336
|
-
|
|
337
|
-
Arguments:
|
|
338
|
-
value (float): The new value for eps_c2, no units.
|
|
431
|
+
Note:
|
|
432
|
+
The returned value is derived from fck if eps_c2 is not manually
|
|
433
|
+
provided when initializing the object.
|
|
339
434
|
"""
|
|
340
|
-
if
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
' number without units. Plase check ({value} given).'
|
|
344
|
-
)
|
|
345
|
-
self._eps_c2 = value
|
|
435
|
+
if self._eps_c2 is None:
|
|
436
|
+
return mc2010.eps_c2(self.fck)
|
|
437
|
+
return self._eps_c2
|
|
346
438
|
|
|
347
439
|
@property
|
|
348
440
|
def eps_cu2(self) -> float:
|
|
@@ -351,24 +443,14 @@ class ConcreteMC2010(Concrete):
|
|
|
351
443
|
|
|
352
444
|
Returns:
|
|
353
445
|
float: The maximum strain at failure of concrete.
|
|
354
|
-
"""
|
|
355
|
-
self._eps_cu2 = self._eps_cu2 or mc2010.eps_cu2(self.fck)
|
|
356
|
-
return self._eps_cu2
|
|
357
446
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
Parabola-rectangle constitutive law.
|
|
362
|
-
|
|
363
|
-
Arguments:
|
|
364
|
-
value (float): The new value for eps_cu2, no units.
|
|
447
|
+
Note:
|
|
448
|
+
The returned value is derived from fck if eps_cu2 is not manually
|
|
449
|
+
provided when initializing the object.
|
|
365
450
|
"""
|
|
366
|
-
if
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
' number without units. Plase check ({value} given).'
|
|
370
|
-
)
|
|
371
|
-
self._eps_cu2 = value
|
|
451
|
+
if self._eps_cu2 is None:
|
|
452
|
+
return mc2010.eps_cu2(self.fck)
|
|
453
|
+
return self._eps_cu2
|
|
372
454
|
|
|
373
455
|
@property
|
|
374
456
|
def n_parabolic_rectangular(self) -> float:
|
|
@@ -376,31 +458,14 @@ class ConcreteMC2010(Concrete):
|
|
|
376
458
|
|
|
377
459
|
Returns:
|
|
378
460
|
float: The exponent for Parabola-recangle law.
|
|
379
|
-
"""
|
|
380
|
-
self._n_parabolic_rectangular = (
|
|
381
|
-
self._n_parabolic_rectangular
|
|
382
|
-
or mc2010.n_parabolic_rectangular(self.fck)
|
|
383
|
-
)
|
|
384
|
-
return self._n_parabolic_rectangular
|
|
385
461
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
Arguments:
|
|
391
|
-
value (float): The new value for n, no units.
|
|
392
|
-
|
|
393
|
-
Raises:
|
|
394
|
-
ValueError: If value < 0.
|
|
462
|
+
Note:
|
|
463
|
+
The returned value is derived from fck if n is not manually
|
|
464
|
+
provided when initializing the object.
|
|
395
465
|
"""
|
|
396
|
-
if
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
warnings.warn(
|
|
400
|
-
'A suspect value is input for eps_cu2 that should be a pure'
|
|
401
|
-
' number without units. Plase check ({value} given).'
|
|
402
|
-
)
|
|
403
|
-
self._n_parabolic_rectangular = value
|
|
466
|
+
if self._n_parabolic_rectangular is None:
|
|
467
|
+
return mc2010.n_parabolic_rectangular(self.fck)
|
|
468
|
+
return self._n_parabolic_rectangular
|
|
404
469
|
|
|
405
470
|
@property
|
|
406
471
|
def eps_c3(self) -> float:
|
|
@@ -409,24 +474,14 @@ class ConcreteMC2010(Concrete):
|
|
|
409
474
|
|
|
410
475
|
Returns:
|
|
411
476
|
float: The strain at maximum compressive strength of concrete.
|
|
412
|
-
"""
|
|
413
|
-
self._eps_c3 = self._eps_c3 or mc2010.eps_c3(self.fck)
|
|
414
|
-
return self._eps_c3
|
|
415
477
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
for the Bi-linear constitutive law.
|
|
420
|
-
|
|
421
|
-
Arguments:
|
|
422
|
-
value (float): The new value for eps_c3, no units.
|
|
478
|
+
Note:
|
|
479
|
+
The returned value is derived from fck if eps_c3 is not manually
|
|
480
|
+
provided when initializing the object.
|
|
423
481
|
"""
|
|
424
|
-
if
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
' number without units. Plase check ({value} given).'
|
|
428
|
-
)
|
|
429
|
-
self._eps_c3 = value
|
|
482
|
+
if self._eps_c3 is None:
|
|
483
|
+
return mc2010.eps_c3(self.fck)
|
|
484
|
+
return self._eps_c3
|
|
430
485
|
|
|
431
486
|
@property
|
|
432
487
|
def eps_cu3(self) -> float:
|
|
@@ -435,24 +490,14 @@ class ConcreteMC2010(Concrete):
|
|
|
435
490
|
|
|
436
491
|
Returns:
|
|
437
492
|
float: The maximum strain at failure of concrete.
|
|
438
|
-
"""
|
|
439
|
-
self._eps_cu3 = self._eps_cu3 or mc2010.eps_cu3(self.fck)
|
|
440
|
-
return self._eps_cu3
|
|
441
|
-
|
|
442
|
-
@eps_cu3.setter
|
|
443
|
-
def eps_cu3(self, value: float):
|
|
444
|
-
"""Sets the strain at concrete failure of concrete for the Bi-linear
|
|
445
|
-
constitutive law.
|
|
446
493
|
|
|
447
|
-
|
|
448
|
-
value
|
|
494
|
+
Note:
|
|
495
|
+
The returned value is derived from fck if eps_cu3 is not manually
|
|
496
|
+
provided when initializing the object.
|
|
449
497
|
"""
|
|
450
|
-
if
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
' number without units. Plase check ({value} given).'
|
|
454
|
-
)
|
|
455
|
-
self._eps_cu3 = value
|
|
498
|
+
if self._eps_cu3 is None:
|
|
499
|
+
return mc2010.eps_cu3(self.fck)
|
|
500
|
+
return self._eps_cu3
|
|
456
501
|
|
|
457
502
|
def __elastic__(self) -> dict:
|
|
458
503
|
"""Returns kwargs for creating an elastic constitutive law."""
|