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.

Files changed (50) hide show
  1. structuralcodes/__init__.py +17 -0
  2. structuralcodes/codes/__init__.py +79 -0
  3. structuralcodes/codes/ec2_2004/__init__.py +133 -0
  4. structuralcodes/codes/ec2_2004/_concrete_material_properties.py +239 -0
  5. structuralcodes/codes/ec2_2004/_reinforcement_material_properties.py +104 -0
  6. structuralcodes/codes/ec2_2004/_section_7_3_crack_control.py +941 -0
  7. structuralcodes/codes/ec2_2004/annex_b_shrink_and_creep.py +257 -0
  8. structuralcodes/codes/ec2_2004/shear.py +506 -0
  9. structuralcodes/codes/ec2_2023/__init__.py +104 -0
  10. structuralcodes/codes/ec2_2023/_annexB_time_dependent.py +17 -0
  11. structuralcodes/codes/ec2_2023/_section5_materials.py +1160 -0
  12. structuralcodes/codes/ec2_2023/_section9_sls.py +325 -0
  13. structuralcodes/codes/mc2010/__init__.py +169 -0
  14. structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py +704 -0
  15. structuralcodes/codes/mc2010/_concrete_interface_different_casting_times.py +104 -0
  16. structuralcodes/codes/mc2010/_concrete_material_properties.py +463 -0
  17. structuralcodes/codes/mc2010/_concrete_punching.py +543 -0
  18. structuralcodes/codes/mc2010/_concrete_shear.py +749 -0
  19. structuralcodes/codes/mc2010/_concrete_torsion.py +164 -0
  20. structuralcodes/codes/mc2010/_reinforcement_material_properties.py +105 -0
  21. structuralcodes/core/__init__.py +1 -0
  22. structuralcodes/core/_section_results.py +211 -0
  23. structuralcodes/core/base.py +260 -0
  24. structuralcodes/geometry/__init__.py +25 -0
  25. structuralcodes/geometry/_geometry.py +875 -0
  26. structuralcodes/geometry/_steel_sections.py +2155 -0
  27. structuralcodes/materials/__init__.py +9 -0
  28. structuralcodes/materials/concrete/__init__.py +82 -0
  29. structuralcodes/materials/concrete/_concrete.py +114 -0
  30. structuralcodes/materials/concrete/_concreteEC2_2004.py +477 -0
  31. structuralcodes/materials/concrete/_concreteEC2_2023.py +435 -0
  32. structuralcodes/materials/concrete/_concreteMC2010.py +494 -0
  33. structuralcodes/materials/constitutive_laws.py +979 -0
  34. structuralcodes/materials/reinforcement/__init__.py +84 -0
  35. structuralcodes/materials/reinforcement/_reinforcement.py +172 -0
  36. structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +103 -0
  37. structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +93 -0
  38. structuralcodes/materials/reinforcement/_reinforcementMC2010.py +98 -0
  39. structuralcodes/sections/__init__.py +23 -0
  40. structuralcodes/sections/_generic.py +1249 -0
  41. structuralcodes/sections/_reinforcement.py +115 -0
  42. structuralcodes/sections/section_integrators/__init__.py +14 -0
  43. structuralcodes/sections/section_integrators/_factory.py +41 -0
  44. structuralcodes/sections/section_integrators/_fiber_integrator.py +238 -0
  45. structuralcodes/sections/section_integrators/_marin_integration.py +47 -0
  46. structuralcodes/sections/section_integrators/_marin_integrator.py +222 -0
  47. structuralcodes/sections/section_integrators/_section_integrator.py +49 -0
  48. structuralcodes-0.0.1.dist-info/METADATA +40 -0
  49. structuralcodes-0.0.1.dist-info/RECORD +50 -0
  50. 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)