structuralcodes 0.0.1__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 +17 -0
- structuralcodes/codes/__init__.py +79 -0
- structuralcodes/codes/ec2_2004/__init__.py +133 -0
- structuralcodes/codes/ec2_2004/_concrete_material_properties.py +239 -0
- structuralcodes/codes/ec2_2004/_reinforcement_material_properties.py +104 -0
- structuralcodes/codes/ec2_2004/_section_7_3_crack_control.py +941 -0
- structuralcodes/codes/ec2_2004/annex_b_shrink_and_creep.py +257 -0
- structuralcodes/codes/ec2_2004/shear.py +506 -0
- structuralcodes/codes/ec2_2023/__init__.py +104 -0
- structuralcodes/codes/ec2_2023/_annexB_time_dependent.py +17 -0
- structuralcodes/codes/ec2_2023/_section5_materials.py +1160 -0
- structuralcodes/codes/ec2_2023/_section9_sls.py +325 -0
- structuralcodes/codes/mc2010/__init__.py +169 -0
- structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py +704 -0
- structuralcodes/codes/mc2010/_concrete_interface_different_casting_times.py +104 -0
- structuralcodes/codes/mc2010/_concrete_material_properties.py +463 -0
- structuralcodes/codes/mc2010/_concrete_punching.py +543 -0
- structuralcodes/codes/mc2010/_concrete_shear.py +749 -0
- structuralcodes/codes/mc2010/_concrete_torsion.py +164 -0
- structuralcodes/codes/mc2010/_reinforcement_material_properties.py +105 -0
- structuralcodes/core/__init__.py +1 -0
- structuralcodes/core/_section_results.py +211 -0
- structuralcodes/core/base.py +260 -0
- structuralcodes/geometry/__init__.py +25 -0
- structuralcodes/geometry/_geometry.py +875 -0
- structuralcodes/geometry/_steel_sections.py +2155 -0
- structuralcodes/materials/__init__.py +9 -0
- structuralcodes/materials/concrete/__init__.py +82 -0
- structuralcodes/materials/concrete/_concrete.py +114 -0
- structuralcodes/materials/concrete/_concreteEC2_2004.py +477 -0
- structuralcodes/materials/concrete/_concreteEC2_2023.py +435 -0
- structuralcodes/materials/concrete/_concreteMC2010.py +494 -0
- structuralcodes/materials/constitutive_laws.py +979 -0
- structuralcodes/materials/reinforcement/__init__.py +84 -0
- structuralcodes/materials/reinforcement/_reinforcement.py +172 -0
- structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +103 -0
- structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +93 -0
- structuralcodes/materials/reinforcement/_reinforcementMC2010.py +98 -0
- structuralcodes/sections/__init__.py +23 -0
- structuralcodes/sections/_generic.py +1249 -0
- structuralcodes/sections/_reinforcement.py +115 -0
- structuralcodes/sections/section_integrators/__init__.py +14 -0
- structuralcodes/sections/section_integrators/_factory.py +41 -0
- structuralcodes/sections/section_integrators/_fiber_integrator.py +238 -0
- structuralcodes/sections/section_integrators/_marin_integration.py +47 -0
- structuralcodes/sections/section_integrators/_marin_integrator.py +222 -0
- structuralcodes/sections/section_integrators/_section_integrator.py +49 -0
- structuralcodes-0.0.1.dist-info/METADATA +40 -0
- structuralcodes-0.0.1.dist-info/RECORD +50 -0
- structuralcodes-0.0.1.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,704 @@
|
|
|
1
|
+
"""Creep and shrinkage models MC2010 for concrete.
|
|
2
|
+
|
|
3
|
+
[1] fib Model Code for Concrete Structures 2010 (2013).
|
|
4
|
+
|
|
5
|
+
Todo:
|
|
6
|
+
- Add the light-weight aggregate formulas
|
|
7
|
+
- Include the additional creep and shrinkage terms for other temperatures
|
|
8
|
+
(see 5.1.10.7 of [1])
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations # To have clean hints of ArrayLike in docs
|
|
12
|
+
|
|
13
|
+
import typing as t
|
|
14
|
+
import warnings
|
|
15
|
+
|
|
16
|
+
import numpy as np
|
|
17
|
+
import numpy.typing as npt
|
|
18
|
+
|
|
19
|
+
ALPHA = {
|
|
20
|
+
'32.5 R': 0,
|
|
21
|
+
'42.5 N': 0,
|
|
22
|
+
'42.5 R': 1,
|
|
23
|
+
'52.5 N': 1,
|
|
24
|
+
'52.5 R': 1,
|
|
25
|
+
'32.5 N': -1,
|
|
26
|
+
}
|
|
27
|
+
ALPHA_BS = {
|
|
28
|
+
'32.5 R': 700,
|
|
29
|
+
'42.5 N': 700,
|
|
30
|
+
'42.5 R': 600,
|
|
31
|
+
'52.5 N': 600,
|
|
32
|
+
'52.5 R': 600,
|
|
33
|
+
'32.5 N': 800,
|
|
34
|
+
}
|
|
35
|
+
ALPHA_DS1 = {
|
|
36
|
+
'32.5 R': 4,
|
|
37
|
+
'42.5 N': 4,
|
|
38
|
+
'42.5 R': 6,
|
|
39
|
+
'52.5 N': 6,
|
|
40
|
+
'52.5 R': 6,
|
|
41
|
+
'32.5 N': 3,
|
|
42
|
+
}
|
|
43
|
+
ALPHA_DS2 = {
|
|
44
|
+
'32.5 R': 0.012,
|
|
45
|
+
'42.5 N': 0.012,
|
|
46
|
+
'42.5 R': 0.012,
|
|
47
|
+
'52.5 N': 0.012,
|
|
48
|
+
'52.5 R': 0.012,
|
|
49
|
+
'32.5 N': 0.013,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _check_fcm(fcm: float) -> None:
|
|
54
|
+
"""Check if the mean compressive strength is in the range of applicability
|
|
55
|
+
of the creep and shrinkage models.
|
|
56
|
+
|
|
57
|
+
Defined in fib Model Code 2010 (2013), section 5.1.9.4.2.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Raises a ValueError if the mean compressive strength is outside of the
|
|
64
|
+
specified range.
|
|
65
|
+
"""
|
|
66
|
+
if fcm < 20 or fcm > 130:
|
|
67
|
+
raise ValueError(
|
|
68
|
+
'The specified mean compressive strength is '
|
|
69
|
+
'outside of the range of applicability for the creep and '
|
|
70
|
+
'shrinkage laws given in the fib Model Code 2010. The mean'
|
|
71
|
+
' compressive strength has to be within the range of '
|
|
72
|
+
'20-130 MPa. Current compressive strength is'
|
|
73
|
+
f': {fcm} MPa.'
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _check_initial_stress(sigma: float, fcm: float) -> None:
|
|
78
|
+
"""Check if the initial compressive stress (based on load at t0) is within
|
|
79
|
+
the range of applicability.
|
|
80
|
+
|
|
81
|
+
Defined in fib Model Code 2010 (2013), section 5.1.9.4.2.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
sigma (float): The compressive stress applied to the concrete at t0 in
|
|
85
|
+
MPa.
|
|
86
|
+
fcm (float): The mean compressive strength of the concrete in MPa. Note
|
|
87
|
+
that its value is non-negative.
|
|
88
|
+
|
|
89
|
+
Raises:
|
|
90
|
+
Raises a warning if the initial compressive stress is greater than
|
|
91
|
+
0.4*fcm.
|
|
92
|
+
Raises a ValueError if the compressive stress is greater than 0.6*fcm.
|
|
93
|
+
"""
|
|
94
|
+
if abs(sigma) > 0.6 * fcm:
|
|
95
|
+
raise ValueError(
|
|
96
|
+
'The stress level exceeds the range of application.'
|
|
97
|
+
'Maximum allowable stress is 0.6*fcm. Current stress level '
|
|
98
|
+
f'is {round(abs(sigma)/fcm, 3)}*fcm.'
|
|
99
|
+
)
|
|
100
|
+
if abs(sigma) > 0.4 * fcm:
|
|
101
|
+
warnings.warn(
|
|
102
|
+
'Initial stress is too high to consider the '
|
|
103
|
+
'concrete as an aging linear visco-elastic material: '
|
|
104
|
+
f'sigma = {round(abs(sigma)/fcm,3)}*fcm > 0.4*fcm. Nonlinear'
|
|
105
|
+
' creep calculations are performed according to subclause '
|
|
106
|
+
'5.1.9.4.3 (d) of the fib Model Code 2010 to account for '
|
|
107
|
+
'large compressive stresses.'
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _check_age_at_loading(t0: float) -> None:
|
|
112
|
+
"""Check if the age of the concrete is greater than the minimum concrete
|
|
113
|
+
age.
|
|
114
|
+
|
|
115
|
+
Defined in fib Model Code 2010 (2013), section 5.1.9.4.2.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
t0 (float): The age of the concrete in days at which the loading is
|
|
119
|
+
applied.
|
|
120
|
+
|
|
121
|
+
Raises:
|
|
122
|
+
Raises a ValueError if the age of the concrete is too low.
|
|
123
|
+
"""
|
|
124
|
+
if t0 < 1:
|
|
125
|
+
raise ValueError(
|
|
126
|
+
'The load is applied too soon to the concrete'
|
|
127
|
+
' in order to calculate the creep and shrinkage behaviour '
|
|
128
|
+
'according to the fib Model Code 2010. The minimum age of the '
|
|
129
|
+
'concrete is 1 day, whereas according to the input the load is'
|
|
130
|
+
f' applied after {t0} day.'
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _check_RH(rh: float) -> None:
|
|
135
|
+
"""Check if the given relative humidity is within the range of
|
|
136
|
+
applicability.
|
|
137
|
+
|
|
138
|
+
Defined in fib Model Code 2010 (2013), section 5.1.9.4.2.
|
|
139
|
+
|
|
140
|
+
Args:
|
|
141
|
+
rh (float): The relative humidity of the environment. Value can be
|
|
142
|
+
provided as percentage (i.e. 40--100), or as ratio (i.e. 0.4--1).
|
|
143
|
+
|
|
144
|
+
Raises:
|
|
145
|
+
Raises a ValueError if the relative humidity is outside of the range of
|
|
146
|
+
applicability.
|
|
147
|
+
"""
|
|
148
|
+
if (rh < 0.4 or rh > 1) and (rh < 40 or rh > 100):
|
|
149
|
+
raise ValueError(
|
|
150
|
+
'The specified relative humidity is outside '
|
|
151
|
+
'of the range of applicability to calculate the creep and '
|
|
152
|
+
'shrinkage according to the fib Model Code 2010. The '
|
|
153
|
+
'relative humidity has to be within the range of 0.4-1.0 or '
|
|
154
|
+
f'40-100%. Currently rh={rh}.'
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _check_env_temp(T: float) -> None:
|
|
159
|
+
"""Check if the given environmental temperature is within the range of
|
|
160
|
+
applicability.
|
|
161
|
+
|
|
162
|
+
Defined in fib Model Code 2010 (2013), section 5.1.9.4.2.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
T (float): The environmental temperature in degrees Celcius.
|
|
166
|
+
|
|
167
|
+
Raises:
|
|
168
|
+
Raises a warning if the applied environmental temperature is outside of
|
|
169
|
+
the range of applicability.
|
|
170
|
+
"""
|
|
171
|
+
if T < 5 or T > 30:
|
|
172
|
+
warnings.warn(
|
|
173
|
+
'The given environmental temperature is outside'
|
|
174
|
+
' of the applicable range of 5-30 degrees Celcius for the'
|
|
175
|
+
' creep and shrinkage calculations according to the fib Model '
|
|
176
|
+
f'Code 2010, T={T} degrees Celcius. Creep and shrinkage will'
|
|
177
|
+
' be calculated according to subclause 5.1.10 of the fib Model'
|
|
178
|
+
' Code 2010.'
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def t_T(
|
|
183
|
+
t0: npt.ArrayLike, T_cur: npt.ArrayLike, dt: npt.ArrayLike = None
|
|
184
|
+
) -> np.ndarray:
|
|
185
|
+
"""Calculate the temperature corrected concrete age in days at t0.
|
|
186
|
+
|
|
187
|
+
Defined in fib Model Code 2010 (2013). Eq. 5.1-85 (only for a single time
|
|
188
|
+
value input, as required in Eq. 5.1-73).
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
t0 (np.typing.ArrayLike): The age of the concrete in days at which the
|
|
192
|
+
loading is applied.
|
|
193
|
+
T_cur (np.typing.ArrayLike): The temperature of the environment during
|
|
194
|
+
curing in degrees Celcius.
|
|
195
|
+
|
|
196
|
+
Keyword Args:
|
|
197
|
+
dt (np.typing.ArrayLike): Number of days at which T_cur prevails.
|
|
198
|
+
Required when providing a list for T_cur.
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
np.ndarray: The temperature corrected age of the concrete in days at
|
|
202
|
+
loading.
|
|
203
|
+
"""
|
|
204
|
+
_check_age_at_loading(t0)
|
|
205
|
+
if dt is None:
|
|
206
|
+
dt = t0
|
|
207
|
+
else:
|
|
208
|
+
T_cur = np.asarray(T_cur)
|
|
209
|
+
dt = np.asarray(dt)
|
|
210
|
+
if T_cur.size != dt.size:
|
|
211
|
+
raise ValueError('Dimensions of T_cur and dt do not match.')
|
|
212
|
+
if np.sum(dt) != t0:
|
|
213
|
+
raise ValueError(
|
|
214
|
+
f'Curing time {np.sum(dt)} and time of loading {t0} do not'
|
|
215
|
+
' match.'
|
|
216
|
+
)
|
|
217
|
+
return np.sum(dt * np.exp(13.65 - (4000 / (273 + T_cur))))
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def t0_adj(
|
|
221
|
+
t_T: float,
|
|
222
|
+
cem_class: t.Literal[
|
|
223
|
+
'32.5 N',
|
|
224
|
+
'32.5 R',
|
|
225
|
+
'42.5 N',
|
|
226
|
+
'42.5 R',
|
|
227
|
+
'52.5 N',
|
|
228
|
+
'52.5 R',
|
|
229
|
+
],
|
|
230
|
+
) -> float:
|
|
231
|
+
"""Calculate the modified age at loading (t0) to account for the effect of
|
|
232
|
+
the type of cement and curing temperature on the degree of hydration and -
|
|
233
|
+
in turn - on creep.
|
|
234
|
+
|
|
235
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-73.
|
|
236
|
+
|
|
237
|
+
Args:
|
|
238
|
+
t_T (float): Temperature adjusted concrete age in days.
|
|
239
|
+
cem_class (str): The cement strength class that is used. The choices
|
|
240
|
+
are: '32.5 N', '32.5 R', '42.5 N', '42.5 R', '52.5 N', '52.5 R'.
|
|
241
|
+
|
|
242
|
+
Returns:
|
|
243
|
+
float: The temperature corrected age of the concrete in days at
|
|
244
|
+
loading, accounting for the effect of the cement type. For slow
|
|
245
|
+
hardening concrete, the creep coefficient is increased due to the lower
|
|
246
|
+
modified age at loading.
|
|
247
|
+
"""
|
|
248
|
+
return max(t_T * ((9 / (2 + t_T**1.2)) + 1) ** ALPHA[cem_class], 0.5)
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def eps_cds0(
|
|
252
|
+
fcm: float,
|
|
253
|
+
cem_class: t.Literal[
|
|
254
|
+
'32.5 N', '32.5 R', '42.5 N', '42.5 R', '52.5 N', '52.5 R'
|
|
255
|
+
],
|
|
256
|
+
) -> float:
|
|
257
|
+
"""Calculate the notional drying shrinkage.
|
|
258
|
+
|
|
259
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-80.
|
|
260
|
+
|
|
261
|
+
Args:
|
|
262
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
263
|
+
cem_class (str): The cement strength class that is used. The choices
|
|
264
|
+
are: '32.5 N', '32.5 R', '42.5 N', '42.5 R', '52.5 N', '52.5 R'.
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
float: The notional drying shrinkage, no units.
|
|
268
|
+
"""
|
|
269
|
+
return (
|
|
270
|
+
(220 + 110 * ALPHA_DS1[cem_class])
|
|
271
|
+
* np.exp(-ALPHA_DS2[cem_class] * fcm)
|
|
272
|
+
* 1e-6
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def beta_ds(
|
|
277
|
+
time: npt.ArrayLike, ts: float, notional_size: float
|
|
278
|
+
) -> np.ndarray:
|
|
279
|
+
"""Calculate the multiplication factor beta_ds.
|
|
280
|
+
|
|
281
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-82.
|
|
282
|
+
|
|
283
|
+
Args:
|
|
284
|
+
time (numpy.typing.ArrayLike): The different times in days at which the
|
|
285
|
+
shrinkage strain is determined.
|
|
286
|
+
ts (float): Age of the concrete when exposed to the environment.
|
|
287
|
+
notional_size (float): The notional size of the considered element in
|
|
288
|
+
mm, defined as 2A/u.
|
|
289
|
+
|
|
290
|
+
Returns:
|
|
291
|
+
numpy.ndarray: Multiplication factor used for calculating the drying
|
|
292
|
+
shrinkage as a function of time.
|
|
293
|
+
"""
|
|
294
|
+
return np.sqrt((time - ts) / (0.035 * (notional_size) ** 2 + (time - ts)))
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def beta_s1(fcm: float) -> float:
|
|
298
|
+
"""Calculate the correction factor beta_s1.
|
|
299
|
+
|
|
300
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-83.
|
|
301
|
+
|
|
302
|
+
Args:
|
|
303
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
304
|
+
|
|
305
|
+
Returns:
|
|
306
|
+
float: Multiplication factor used when calculating the drying
|
|
307
|
+
shrinkage.
|
|
308
|
+
"""
|
|
309
|
+
return min((35 / fcm) ** 0.1, 1.0)
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
def beta_RH(rh: float, beta_s1: float) -> float:
|
|
313
|
+
"""Calculate the multiplication factor beta_RH.
|
|
314
|
+
|
|
315
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-81
|
|
316
|
+
|
|
317
|
+
Args:
|
|
318
|
+
rh (float): The relative humidity of the environment. Value can be
|
|
319
|
+
provided as percentage (i.e. 40--100), or as ratio (i.e. 0.4--1).
|
|
320
|
+
beta_s1 (float): Multiplication factor as calculated in the fib Model
|
|
321
|
+
Code 2010 (2013), Eq. 5.1-83.
|
|
322
|
+
|
|
323
|
+
Returns:
|
|
324
|
+
float: Multiplication factor used when calculating the drying
|
|
325
|
+
shrinkage.
|
|
326
|
+
"""
|
|
327
|
+
_check_RH(rh)
|
|
328
|
+
if rh > 1:
|
|
329
|
+
rh = rh / 100
|
|
330
|
+
|
|
331
|
+
if rh >= 0.99 * beta_s1:
|
|
332
|
+
return 0.25
|
|
333
|
+
if 0.4 * beta_s1 <= rh < 0.99 * beta_s1:
|
|
334
|
+
return -1.55 * (1 - rh**3)
|
|
335
|
+
raise ValueError(
|
|
336
|
+
'The specified rh*beta_s1 is not in the range of application.'
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
def eps_cds(
|
|
341
|
+
eps_cds0: float,
|
|
342
|
+
beta_ds: npt.ArrayLike,
|
|
343
|
+
beta_rh: float,
|
|
344
|
+
) -> np.ndarray:
|
|
345
|
+
"""Calculate the drying shrinkage of the concrete element.
|
|
346
|
+
|
|
347
|
+
Defined in fib Model Code 2010 (2013), Eqs. 5.1-77.
|
|
348
|
+
|
|
349
|
+
Args:
|
|
350
|
+
eps_cds0 (float): The notional drying shrinkage, no units, as defined
|
|
351
|
+
in fib Model Code 2010 (2013), Eq. 5.1-80.
|
|
352
|
+
beta_ds (numpy.typing.ArrayLike): Multiplication factor used for
|
|
353
|
+
calculating the drying shrinkage as a function of time, as defined
|
|
354
|
+
in fib Model Code 2010 (2013), Eq. 5.1-82.
|
|
355
|
+
beta_rh (float): Multiplication factor used when calculating the
|
|
356
|
+
drying shrinkage.
|
|
357
|
+
|
|
358
|
+
Returns:
|
|
359
|
+
numpy.ndarray: The drying shrinkage strains for the given times, no
|
|
360
|
+
units.
|
|
361
|
+
"""
|
|
362
|
+
return eps_cds0 * beta_rh * beta_ds
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def eps_cbs0(
|
|
366
|
+
fcm: float,
|
|
367
|
+
cem_class: t.Literal[
|
|
368
|
+
'32.5 N', '32.5 R', '42.5 N', '42.5 R', '52.5 N', '52.5 R'
|
|
369
|
+
],
|
|
370
|
+
) -> float:
|
|
371
|
+
"""Calculate the notional basic shrinkage.
|
|
372
|
+
|
|
373
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-78.
|
|
374
|
+
|
|
375
|
+
Args:
|
|
376
|
+
fcm (float): The mean compressive strength of the concrete in
|
|
377
|
+
MPa.
|
|
378
|
+
cem_class (str): The cement strength class that is used. The choices
|
|
379
|
+
are: '32.5 N', '32.5 R', '42.5 N', '42.5 R', '52.5 N', '52.5 R'.
|
|
380
|
+
|
|
381
|
+
Returns:
|
|
382
|
+
float: The notional basic shrinkage, no units.
|
|
383
|
+
"""
|
|
384
|
+
return -ALPHA_BS[cem_class] * ((0.1 * fcm) / (6 + 0.1 * fcm)) ** 2.5 * 1e-6
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def beta_bs(time: npt.ArrayLike) -> np.ndarray:
|
|
388
|
+
"""Calculate multiplication factor beta_bs which is used to determine the
|
|
389
|
+
basic shrinkage.
|
|
390
|
+
|
|
391
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-79.
|
|
392
|
+
|
|
393
|
+
Args:
|
|
394
|
+
time (numpy.typing.ArrayLike): The different times in days at which the
|
|
395
|
+
basic strain is determined.
|
|
396
|
+
|
|
397
|
+
Returns:
|
|
398
|
+
numpy.ndarray: Multiplication factor that is used to determine the
|
|
399
|
+
basic shrinkage.
|
|
400
|
+
"""
|
|
401
|
+
return 1 - np.exp(-0.2 * np.sqrt(time))
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
def eps_cbs(eps_cbs0: float, beta_bs: npt.ArrayLike) -> np.ndarray:
|
|
405
|
+
"""Calculate the basic shrinkage.
|
|
406
|
+
|
|
407
|
+
Defined in fib Model Code 2010 (2013), Eqs. 5.1-76.
|
|
408
|
+
|
|
409
|
+
Args:
|
|
410
|
+
eps_cbs0 (float): Notional basic shrinkage, as defined in fib Model
|
|
411
|
+
Code 2010 (2013), Eq. 5.1-78.
|
|
412
|
+
beta_bs (numpy.typing.ArrayLike): Time function for basic shrinkage,
|
|
413
|
+
as defined in fib Model Code 2010 (2013), Eq. 5.1-79.
|
|
414
|
+
|
|
415
|
+
Returns:
|
|
416
|
+
numpy.ndarray: The basic shrinkage strains for the given times.
|
|
417
|
+
"""
|
|
418
|
+
return eps_cbs0 * beta_bs
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
def beta_bc_fcm(fcm: float) -> float:
|
|
422
|
+
"""Calculate multiplication factor that accounts for the effect of the
|
|
423
|
+
compressive strength of the concrete to calculate the basic creep
|
|
424
|
+
coefficient.
|
|
425
|
+
|
|
426
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-65.
|
|
427
|
+
|
|
428
|
+
Args:
|
|
429
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
430
|
+
|
|
431
|
+
Returns:
|
|
432
|
+
float: Multiplication factor beta_bc_fcm.
|
|
433
|
+
"""
|
|
434
|
+
return 1.8 / fcm**0.7
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
def beta_bc_t(time: npt.ArrayLike, t0: float, t0_adj: float) -> np.ndarray:
|
|
438
|
+
"""Calculate multiplication factor that accounts for the effect of the age
|
|
439
|
+
of the of the concrete to calculate the basic creep coefficient.
|
|
440
|
+
|
|
441
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-66.
|
|
442
|
+
|
|
443
|
+
Args:
|
|
444
|
+
time (numpy.typing.ArrayLike): The different times in days at which the
|
|
445
|
+
basic creep coefficient is determined.
|
|
446
|
+
t0 (float): The age of the concrete in days at which the loading is
|
|
447
|
+
applied.
|
|
448
|
+
t0_adj (float): The temperature corrected age of the concrete when the
|
|
449
|
+
loading is applied in days, as defined in fib Model Code 2010
|
|
450
|
+
(2013). Eq. 5.1-85.
|
|
451
|
+
|
|
452
|
+
Returns:
|
|
453
|
+
numpy.ndarray: Multiplication factors beta_bc_t.
|
|
454
|
+
"""
|
|
455
|
+
return np.log(((30 / t0_adj + 0.035) ** 2) * (time - t0) + 1)
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
def phi_bc(beta_bc_fcm: float, beta_bc_t: npt.ArrayLike) -> np.ndarray:
|
|
459
|
+
"""Calculate the basic creep coefficient.
|
|
460
|
+
|
|
461
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-64.
|
|
462
|
+
|
|
463
|
+
Args:
|
|
464
|
+
beta_bc_fcm (float): Multiplication factor that accounts for the
|
|
465
|
+
influence of the concrete strength of the creep behaviour, as
|
|
466
|
+
defined in fib Model Code 2010 (2013), Eq. 5.1-65.
|
|
467
|
+
beta_bc_t (numpy.typing.ArrayLike): Multiplication factor that
|
|
468
|
+
accounts for the influence of the age of the concrete of the creep
|
|
469
|
+
behaviour, as defined in fib Model Code 2010 (2013), Eq. 5.1-66.
|
|
470
|
+
|
|
471
|
+
Returns:
|
|
472
|
+
numpy.ndarray: The basic creep coefficient.
|
|
473
|
+
"""
|
|
474
|
+
return beta_bc_fcm * beta_bc_t
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
def beta_dc_fcm(fcm: float) -> float:
|
|
478
|
+
"""Calculate multiplication factor that accounts for the effect of the
|
|
479
|
+
strength of the concrete to calculate the drying creep coefficient.
|
|
480
|
+
|
|
481
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-68.
|
|
482
|
+
|
|
483
|
+
Args:
|
|
484
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
485
|
+
|
|
486
|
+
Returns:
|
|
487
|
+
float: Multiplication factor beta_dc_fcm.
|
|
488
|
+
"""
|
|
489
|
+
return 412 / fcm**1.4
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
def beta_dc_RH(rh: float, notional_size: float) -> float:
|
|
493
|
+
"""Calculate multiplication factor that accounts for the effect of the
|
|
494
|
+
relative humidity of the environment to calculate the drying creep
|
|
495
|
+
coefficient.
|
|
496
|
+
|
|
497
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-69.
|
|
498
|
+
|
|
499
|
+
Args:
|
|
500
|
+
rh (float): The relative humidity of the environment. Value can be
|
|
501
|
+
provided as percentage (i.e. 40--100), or as ratio (i.e. 0.4--1).
|
|
502
|
+
notional_size (float): The notional size of the considered element in
|
|
503
|
+
mm, defined as 2A/u.
|
|
504
|
+
|
|
505
|
+
Returns:
|
|
506
|
+
float: Multiplication factor beta_RH.
|
|
507
|
+
"""
|
|
508
|
+
_check_RH(rh)
|
|
509
|
+
if rh > 1:
|
|
510
|
+
rh = rh / 100
|
|
511
|
+
return (1 - rh) / ((0.1 * notional_size / 100) ** (1 / 3))
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
def beta_dc_t0(t0_adj: float) -> float:
|
|
515
|
+
"""Calculate multiplication factor that accounts for the effect of the
|
|
516
|
+
(temperature corrected) age of the concrete when loading is applied to
|
|
517
|
+
calculate the drying creep coefficient.
|
|
518
|
+
|
|
519
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-70.
|
|
520
|
+
|
|
521
|
+
Args:
|
|
522
|
+
t0_adj (float): The temperature corrected age of the concrete when the
|
|
523
|
+
loading is applied in days, as defined in fib Model Code 2010
|
|
524
|
+
(2013). Eq. 5.1-85.
|
|
525
|
+
|
|
526
|
+
Returns:
|
|
527
|
+
float: Multiplication factor beta_dc_t0.
|
|
528
|
+
"""
|
|
529
|
+
return 1 / (0.1 + t0_adj**0.2)
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
def alpha_fcm(fcm: float) -> float:
|
|
533
|
+
"""Calculate multiplication factor that accounts for the effect of the
|
|
534
|
+
strength of the concrete to calculate the drying creep coefficient.
|
|
535
|
+
|
|
536
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-71d.
|
|
537
|
+
|
|
538
|
+
Args:
|
|
539
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
540
|
+
|
|
541
|
+
Returns:
|
|
542
|
+
float: Multiplication factor alpha_fcm.
|
|
543
|
+
"""
|
|
544
|
+
return np.sqrt(35 / fcm)
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
def beta_h(notional_size: float, alpha_fcm: float) -> float:
|
|
548
|
+
"""Calculate multiplication factor that accounts for the effect of the
|
|
549
|
+
notional size of the to calculate the drying creep coefficient.
|
|
550
|
+
|
|
551
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-71c
|
|
552
|
+
|
|
553
|
+
Args:
|
|
554
|
+
notional_size (float): The notional size of the considered element in
|
|
555
|
+
mm, defined as 2A/h.
|
|
556
|
+
alpha_fcm (float): Multiplication factor that accounts for the effect
|
|
557
|
+
of the strength of the concrete on the drying creep coefficient.
|
|
558
|
+
|
|
559
|
+
Returns:
|
|
560
|
+
float: Multiplication factor beta_h.
|
|
561
|
+
"""
|
|
562
|
+
return min(1.5 * notional_size + 250 * alpha_fcm, 1500 * alpha_fcm)
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
def gamma_t0(t0_adj: float) -> float:
|
|
566
|
+
"""Calculate exponent that accounts for the effect of the (temperature
|
|
567
|
+
corrected) age of the concrete when loaded. Used to calculate the drying
|
|
568
|
+
creep coefficient.
|
|
569
|
+
|
|
570
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-71b.
|
|
571
|
+
|
|
572
|
+
Args:
|
|
573
|
+
t0_adj (float): The temperature corrected age of the concrete when the
|
|
574
|
+
loading is applied in days, as defined in fib Model Code 2010
|
|
575
|
+
(2013). Eq. 5.1-85.
|
|
576
|
+
|
|
577
|
+
Returns:
|
|
578
|
+
float: Exponent gamma_t0.
|
|
579
|
+
"""
|
|
580
|
+
return 1 / (2.3 + 3.5 / np.sqrt(t0_adj))
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
def beta_dc_t(
|
|
584
|
+
time: npt.ArrayLike, t0: float, beta_h: float, gamma_t0: float
|
|
585
|
+
) -> np.ndarray:
|
|
586
|
+
"""Calculate multiplication factor that accounts for the different
|
|
587
|
+
considered values of time. Used to calculate the drying creep coefficient.
|
|
588
|
+
|
|
589
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-71a.
|
|
590
|
+
|
|
591
|
+
Args:
|
|
592
|
+
time (numpy.typing.ArrayLike): The different times in days at which the
|
|
593
|
+
drying creep coefficient is determined.
|
|
594
|
+
t0 (float): The age of the concrete concrete when the loading is
|
|
595
|
+
applied in days.
|
|
596
|
+
beta_h (float): Multiplication factor that accounts for the effect of
|
|
597
|
+
the notional size, as calculated by Eq. 5.1-71c
|
|
598
|
+
gamma_t0 (float): Exponent that accounts for the effect of the
|
|
599
|
+
(temperature corrected) age of the concrete when loaded, as
|
|
600
|
+
calculated by Eq. 5.1-71b.
|
|
601
|
+
|
|
602
|
+
Returns:
|
|
603
|
+
numpy.ndarray: Multiplcation factor beta_dc_t for the considered values
|
|
604
|
+
of time.
|
|
605
|
+
"""
|
|
606
|
+
return ((time - t0) / (beta_h + (time - t0))) ** gamma_t0
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
def phi_dc(
|
|
610
|
+
beta_dc_fcm: float,
|
|
611
|
+
beta_dc_RH: float,
|
|
612
|
+
beta_dc_t0: float,
|
|
613
|
+
beta_dc_t: npt.ArrayLike,
|
|
614
|
+
) -> np.ndarray:
|
|
615
|
+
"""Calculate drying creep coefficient.
|
|
616
|
+
|
|
617
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-67.
|
|
618
|
+
|
|
619
|
+
Args:
|
|
620
|
+
beta_dc_fcm (float): Multiplication factor that accounts for the
|
|
621
|
+
effect of the strength of the concrete, as calculated by Eq.
|
|
622
|
+
5.1-68.
|
|
623
|
+
beta_dc_RH (float): Multiplication factor that accounts for the effect
|
|
624
|
+
of the relative humidity of the environment, as calculated by Eq.
|
|
625
|
+
5.1-69.
|
|
626
|
+
beta_dc_t0 (float): multiplication factor that accounts for the effect
|
|
627
|
+
of the (temperature corrected) age of the concrete when loading is
|
|
628
|
+
applied, as calculated by Eq. 5.1-70.
|
|
629
|
+
beta_dc_t (numpy.typing.ArrayLike): multiplication factor that
|
|
630
|
+
accounts for the different considered values of time, as calculated
|
|
631
|
+
by Eq. 5.1-71a.
|
|
632
|
+
|
|
633
|
+
Returns:
|
|
634
|
+
numpy.ndarray: Drying creep coeffcient.
|
|
635
|
+
"""
|
|
636
|
+
return beta_dc_fcm * beta_dc_RH * beta_dc_t0 * beta_dc_t
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
def k_sigma(sigma: float, fcm: float) -> float:
|
|
640
|
+
"""Calculate the ratio between the applied stress and the mean concrete
|
|
641
|
+
compressive strength.
|
|
642
|
+
|
|
643
|
+
Defined in fib Model Code 2010 (2013), Eq. 5.1-74.
|
|
644
|
+
|
|
645
|
+
Args:
|
|
646
|
+
sigma (float): The compressive stress applied to the concrete at ts in
|
|
647
|
+
MPa.
|
|
648
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
649
|
+
|
|
650
|
+
Returns:
|
|
651
|
+
float: Absolute value of the ratio between the stress in the concrete
|
|
652
|
+
and the mean concrete strength.
|
|
653
|
+
"""
|
|
654
|
+
_check_initial_stress(sigma, fcm)
|
|
655
|
+
return abs(sigma / fcm)
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
def phi(
|
|
659
|
+
phi_bc: npt.ArrayLike, phi_dc: npt.ArrayLike, sigma: float, fcm: float
|
|
660
|
+
) -> np.ndarray:
|
|
661
|
+
"""Calculate the creep coefficient distinguishing between linear and
|
|
662
|
+
non-linear creep for compressive stresses sigma <= 0.4fcm, and 0.4fcm <
|
|
663
|
+
sigma <= 0.6fcm, respectively.
|
|
664
|
+
|
|
665
|
+
Defined in fib Model Code 2010, Eqs. 5.1-63 and 5.1-74.
|
|
666
|
+
|
|
667
|
+
Args:
|
|
668
|
+
phi_bc (numpy.typing.ArrayLike): Basic creep coefficient, as defined
|
|
669
|
+
in fib Model Code 2010 (2013), Eq. 5.1-64.
|
|
670
|
+
phi_dc (numpy.typing.ArrayLike): Drying creep coefficient, as defined
|
|
671
|
+
in fib Model Code 2010 (2013), Eq. 5.1-67.
|
|
672
|
+
sigma (float): The compressive stress applied to the concrete at ts in
|
|
673
|
+
MPa.
|
|
674
|
+
fcm (float): The mean compressive strength of the concrete in MPa.
|
|
675
|
+
|
|
676
|
+
Returns:
|
|
677
|
+
numpy.ndarray: The creep coefficient.
|
|
678
|
+
"""
|
|
679
|
+
# Calculate the creep coefficient (phi) (see Eq. 5.1-63)
|
|
680
|
+
_phi = phi_bc + phi_dc
|
|
681
|
+
# Include the effect of high stress if needed (see Eq. 5.1-74 of [1]):
|
|
682
|
+
_k_sigma = k_sigma(sigma, fcm)
|
|
683
|
+
if 0.4 < _k_sigma <= 0.6:
|
|
684
|
+
return np.exp(1.5 * (_k_sigma - 0.4)) * _phi
|
|
685
|
+
return _phi
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
def calc_J(E_ci_t0: float, phi: npt.ArrayLike, E_ci: float) -> np.ndarray:
|
|
689
|
+
"""Calculate the creep compliance function.
|
|
690
|
+
|
|
691
|
+
Defined in fib Model Code 2010, Eq. 5.1-61.
|
|
692
|
+
|
|
693
|
+
Args:
|
|
694
|
+
E_ci_t0 (float): Modulus of elasticity at time of loading t0, as
|
|
695
|
+
defined in fib Model Code 2010 (2013), Eq. 5.1-56.
|
|
696
|
+
phi (numpy.typing.ArrayLike): Creep coefficient, as defined in fib
|
|
697
|
+
Model Code 2010 (2013), Eq. 5.1-63.
|
|
698
|
+
E_ci (float) Modulus of elasticity of the concrete at 28 days, as
|
|
699
|
+
defined in fib Model Code 2010 (2013), Eq. 5.1-21.
|
|
700
|
+
|
|
701
|
+
Returns:
|
|
702
|
+
numpy.ndarray: The creep compliance function.
|
|
703
|
+
"""
|
|
704
|
+
return (1 / E_ci_t0) + (phi / E_ci)
|