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,506 @@
1
+ """Design rules according to EN 1992-1-1 regarding shear."""
2
+
3
+ import math
4
+
5
+ # General functions
6
+
7
+
8
+ # Part of Equation (6.2).
9
+ def _k(d: float) -> float:
10
+ """Compute a correction factor.
11
+
12
+ Defined in EN 1992-1-1 (2005), Eq. (6.2).
13
+
14
+ Args:
15
+ d (float): The effective depth of the cross-section in mm.
16
+
17
+ Returns:
18
+ float: Correction factor to account for the cross-sectional size on the
19
+ shear resistance.
20
+ """
21
+ return min(1.0 + math.sqrt(200.0 / d), 2.0)
22
+
23
+
24
+ # Part of Equation (6.2).
25
+ def _rho_L(Asl: float, bw: float, d: float) -> float:
26
+ """Compute the longitudinal reinforcement ratio.
27
+
28
+ Defined in EN 1992-1-1 (2005), Eq. (6.2).
29
+
30
+ Args:
31
+ Asl (float): The cross-sectional area of the tensile reinforcement,
32
+ anchored at least (lbd + d) beyond the considered cross-section, in
33
+ mm2.
34
+ bw (float): The smallest width of the cross-section in tension in mm.
35
+ d (float): The effective depth of the cross-section in mm.
36
+
37
+ Returns:
38
+ float: The maximum allowable reinforcement ratio of the longitudinal
39
+ reinforcement, unitless.
40
+ """
41
+ return min(Asl / (bw * d), 0.02)
42
+
43
+
44
+ # Part of Equation(6.2).
45
+ def _sigma_cp(NEd: float, Ac: float, fcd: float) -> float:
46
+ """Calculate the average prestress stress in the cross-section.
47
+
48
+ Defined in EN 1992-1-1 (2005), Eq. (6.2).
49
+
50
+ Args:
51
+ NEd (float): The normal force in the cross-section due to loading or
52
+ prestress (NEd > 0 for compression) in N.
53
+ Ac (float): The cross-sectional area of the concrete in mm2.
54
+ fcd (float): The design compressive strength in MPa.
55
+
56
+ Returns:
57
+ float: The maximum allowable average prestress in the cross-section in
58
+ MPa.
59
+ """
60
+ return min(NEd / Ac, 0.2 * fcd)
61
+
62
+
63
+ # Part of Equation (6.4)
64
+ def _alpha_l(L_x, L_pt2) -> float:
65
+ """Compute the relative anchorage length for prestreched prestressing
66
+ steel.
67
+
68
+ Defined in EN 1992-1-1 (2005), Eq. (6.4).
69
+
70
+ Args:
71
+ L_x (float): Distance from the considered cross-section until the
72
+ starting point of the transference length of the prestress steel.
73
+ L_pt2 (float): Maximum value of the transference length of the
74
+ prestress steel, according to Eq. (8.18).
75
+
76
+ Returns:
77
+ float: Fraction (relative anchorage length) for determining the amount
78
+ of prestress that may be used when determining the shear resistance
79
+ using Mohr's circle.
80
+ """
81
+ return min(L_x / L_pt2, 1.0)
82
+
83
+
84
+ # Equation (6.7N)
85
+ def _theta(theta: float, cot_min: float = 1.0, cot_max: float = 2.5) -> None:
86
+ """Check if the provided angle theta is within the bounds provided by the
87
+ code.
88
+
89
+ EN 1992-1-1 (2005). Eq. (6.7N)
90
+
91
+ Args:
92
+ theta (float): The chosen angle of the compression strut in degrees.
93
+
94
+ Keyword Args:
95
+ cot_min (float): The minimum value for cot(theta). Default value is
96
+ 1.0. Different value might be provided in the National Annexes.
97
+ cot_max (float): The maximum value for cot(theta). Default value is
98
+ 2.5. Different value might be provided in the National Annexes.
99
+
100
+ Raises:
101
+ ValueError if the chosen angle is not within the given bounds.
102
+ """
103
+ # Use round to allow less precise angles (i.e. 21.8 degrees instead
104
+ # of 21.801..... degrees for cot_max = 2.5).
105
+ theta_ = math.radians(theta)
106
+ if (
107
+ round(1.0 / math.tan(theta_), 2) < cot_min
108
+ or round(1.0 / math.tan(theta_), 2) > cot_max
109
+ ):
110
+ raise ValueError(
111
+ 'Wrong value for theta is chosen. Theta has '
112
+ f'to be chosen such that 1/tan(theta) lies between '
113
+ f'{cot_min} and {cot_max}. This corresponds to an angle '
114
+ f'between {round(math.degrees(math.atan(1/cot_min)),2)} '
115
+ f'and {round(math.degrees(math.atan(1/cot_max)),2)} '
116
+ f'degrees, respectively. Current angle is set at {theta}'
117
+ ' degrees.'
118
+ )
119
+
120
+
121
+ # Equation (6.11N)
122
+ def alpha_cw(Ned: float, Ac: float, fcd: float) -> float:
123
+ """Calculate factor that affects the maximum shear resistance of the
124
+ concrete based on the prestress.
125
+
126
+ EN 1992-1-1 (2005). Eq. (6.11N)
127
+
128
+ Args:
129
+ NEd (float): The normal force in the cross-section due to loading or
130
+ prestress (NEd > 0 for compression) in N.
131
+ Ac (float): The cross-sectional area of the concrete in mm2.
132
+ fcd (float): The design strength of the concrete in MPa.
133
+
134
+ Returns:
135
+ float: Factor that affects the maximum shear resistance of the concrete
136
+ based on the level of prestress.
137
+
138
+ Raises:
139
+ ValueError: The applied prestress exceeds the concrete design strength.
140
+ """
141
+ # No function call for sigma_cp, value is allowed to be higher than
142
+ # 0.2fcd.
143
+ sigma_cp = Ned / Ac
144
+ if sigma_cp <= 0.0:
145
+ value = 1.0
146
+ elif sigma_cp <= 0.25 * fcd:
147
+ value = 1.0 + sigma_cp / fcd
148
+ elif sigma_cp <= 0.5 * fcd:
149
+ value = 1.25
150
+ elif sigma_cp < fcd:
151
+ value = 2.5 * (1 - sigma_cp / fcd)
152
+ else:
153
+ raise ValueError(
154
+ f'sigma_cp/fcd={sigma_cp/fcd}. Prestress has to be smaller'
155
+ ' than design compressive strength.'
156
+ )
157
+ return value
158
+
159
+
160
+ # Without shear reinforcement
161
+
162
+
163
+ # Equation (6.2 a + b)
164
+ def VRdc(
165
+ fck: float,
166
+ d: float,
167
+ Asl: float,
168
+ bw: float,
169
+ NEd: float,
170
+ Ac: float,
171
+ fcd: float,
172
+ k1: float = 0.15,
173
+ gamma_c: float = 1.5,
174
+ ) -> float:
175
+ """Compute the design strength of the shear resistance.
176
+
177
+ EN 1992-1-1 (2005), Eq. (6.2)
178
+
179
+ Args:
180
+ fck (float): The characteristic compressive strength in MPa.
181
+ d (float): The effective depth of the cross-section in mm.
182
+ Asl (float): The cross-sectional area of the tensile reinforcement,
183
+ anchored atleast (lbd + d) beyond the considered cross-section, in
184
+ mm2.
185
+ bw (float): The smallest width of the cross-section in tension in mm.
186
+ NEd (float): The normal force in the cross-section due to loading or
187
+ prestress (NEd > 0 for compression) in N.
188
+ Ac (float): The cross-sectional area of the concrete in mm2.
189
+ fcd (float): The design compressive strength in MPa.
190
+
191
+ Keyword Args:
192
+ k1 (float): Factor used to include the effect of the normal stress
193
+ into the shear resistance of the concrete. Default value = 0.15,
194
+ value might differ between National Annexes.
195
+ gamma_c (float): Partial factor for concrete. Default value = 1.5,
196
+ value might differ between National Annexes.
197
+
198
+ Returns:
199
+ float: The concrete shear resistance in MPa.
200
+ """
201
+ CRdc = 0.18 / gamma_c
202
+ return (
203
+ max(
204
+ CRdc * _k(d) * (100 * _rho_L(Asl, bw, d) * fck) ** (1.0 / 3.0)
205
+ + k1 * _sigma_cp(NEd, Ac, fcd), # VRdc
206
+ vmin(fck, d) + k1 * _sigma_cp(NEd, Ac, fcd), # VRdcmin
207
+ )
208
+ * bw
209
+ * d
210
+ )
211
+
212
+
213
+ # Equation (6.3N)
214
+ def vmin(fck: float, d: float) -> float:
215
+ """Compute the minimum shear resistance of the concrete.
216
+
217
+ EN 1992-1-1 (2005), Eq. (6.3)
218
+
219
+ Args:
220
+ fck (float): The characteristic compressive strength in MPa.
221
+ d (float): The effective depth of the cross-section in mm.
222
+
223
+ Returns:
224
+ float: The minimal shear stress resistance of the concrete in MPa.
225
+ """
226
+ return 0.035 * _k(d) ** (3.0 / 2.0) * fck ** (1 / 2)
227
+
228
+
229
+ # Equation (6.4)
230
+ def VRdc_prin_stress(
231
+ Iy: float,
232
+ bw: float,
233
+ S: float,
234
+ fctd: float,
235
+ NEd: float,
236
+ Ac: float,
237
+ L_x: float = None,
238
+ L_pt2: float = None,
239
+ ) -> float:
240
+ """Calculate the shear resistance in uncracked, prestressed elements
241
+ without shear reinforcement, value is determined via Mohr's circle.
242
+
243
+ The maximal value of the principle tensile stress does no necessarily lay
244
+ at the centre of gravity. If this is the ase the minimum value of the shear
245
+ resistance and corresponding stress needs to be found at the relevant
246
+ location.
247
+
248
+ EN 1992-1-1 (2005), Eq. (6.4).
249
+
250
+ Args:
251
+ Iy (float): The second moment of area of the considered cross-section
252
+ in mm4.
253
+ bw (float): The width of the cross-section at the centre of gravity.
254
+ S (float): The first moment of area of the considered cross-section of
255
+ the part above the centre of gravity, and with respect to the
256
+ centre of gravity in mm3.
257
+ fctd (float): Design value of the tensile strength of the concrete.
258
+ NEd (float): The normal force in the cross-section due to loading or
259
+ prestress (NEd > 0 for compression) in N.
260
+ Ac (float): The cross-sectional area of the concrete in mm2.
261
+
262
+ Keyword Args:
263
+ L_x (float): Distance from the considered cross-section until the
264
+ starting point of the transference length of the prestress steel.
265
+ This value should be provided when the prestressing steel is
266
+ prestreched. Default value is None.
267
+ L_pt2 (float): Maximum value of the transference length of the
268
+ prestress steel, according to Eq. (8.18). This value should be
269
+ provided when the prestressing steel is prestreched. Default value
270
+ is None.
271
+
272
+ Returns:
273
+ float: The maximum allowable shear force in N for an uncracked,
274
+ prestressed element without shear reinforcement, determined from
275
+ maximum allowable principle stress.
276
+ """
277
+ # No function call for sigma_cp, value is allowed to be higher than
278
+ # 0.2fcd.
279
+ sigma_cp = NEd / Ac
280
+ alpha_L = 1.0 if L_x is None or L_pt2 is None else _alpha_l(L_x, L_pt2)
281
+
282
+ return Iy * bw / S * math.sqrt(fctd**2 + alpha_L * sigma_cp * fctd)
283
+
284
+
285
+ # Equation (6.5)
286
+ def VEdmax_unreinf(
287
+ bw: float,
288
+ d: float,
289
+ fck: float,
290
+ fcd: float,
291
+ ) -> float:
292
+ """Calculate the maximum allowable shear force for cross-sections without
293
+ shear reinforcement.
294
+
295
+ En 1992-1-1 (2005), Eq. (6.5).
296
+
297
+ Args:
298
+ bw (float): The smallest width of the cross-section in tension in mm.
299
+ d (float): The effective depth of the cross-section in mm.
300
+ fck (float): The characteristic compressive strength in MPa.
301
+ fcd (float): The design compressive strength in MPa.
302
+
303
+ Returns:
304
+ float: The maximum allowable shear force in the cross-section in N.
305
+ When a reduced shear force may be considered for the calculations, the
306
+ unreduced shear force has to comply to this value.
307
+ """
308
+ return 0.5 * bw * d * v(fck) * fcd
309
+
310
+
311
+ # Equation (6.6N)
312
+ def v(fck: float) -> float:
313
+ """Calculate a strength redcution factor for concrete cracked by shear
314
+ forces.
315
+
316
+ EN 1992-1-1 (2005), Eq. (6.6N)
317
+
318
+ Args:
319
+ fck (float): The characteristic compressive strength in MPa.
320
+
321
+ Returns:
322
+ float: A concrete reduction factor to account for concrete cracked by
323
+ shear forces.
324
+ """
325
+ return 0.6 * (1 - fck / 250.0)
326
+
327
+
328
+ # Equation (6.10N)
329
+ def v1(fck: float) -> float:
330
+ """Calculate a strength redcution factor for concrete cracked by shear
331
+ forces.
332
+
333
+ EN 1992-1-1 (2005), Eq. (6.10N)
334
+
335
+ Args:
336
+ fck (float): The characteristic compressive strength in MPa.
337
+
338
+ Returns:
339
+ float: A concrete reduction factor to account for concrete cracked by
340
+ shear forces.
341
+ """
342
+ return 0.6 if fck <= 60 else max(0.9 - fck / 200.0, 0.5)
343
+
344
+
345
+ # With shear reinforcement
346
+
347
+
348
+ # Equation (6.8 & 6.13)
349
+ # For alpha == 90 degrees, Equation (6.13) reduces to Equation (6.8).
350
+ def VRds(
351
+ Asw: float,
352
+ s: float,
353
+ z: float,
354
+ theta: float,
355
+ fyk: float,
356
+ alpha: float = 90.0,
357
+ gamma_s: float = 1.15,
358
+ ) -> float:
359
+ """Calculate the shear resistance of vertical shear reinforcement.
360
+
361
+ EN 1992-1-1 (2005). Eq. (6.8)
362
+
363
+ Args:
364
+ Asw (float): the cross-sectional area of the shear reinforcement in
365
+ mm2.
366
+ s (float): The centre-to-centre distance of the shear reinforcement in
367
+ mm.
368
+ z (float): The inner lever arm of internal forces in mm.
369
+ theta (float): The angle of the compression strut in degrees.
370
+ fyk (float): The characteristic strength of the reinforcement steel in
371
+ MPa.
372
+
373
+ Keyword Args:
374
+ alpha (float): The angle of the shear reinforcement with respect to the
375
+ neutral axis in degrees. Default value = 90 degrees.
376
+ gamma_s (float): Partial factor of the reinforcement steel. Default
377
+ value = 1.15. Value might differ between National Annexes.
378
+
379
+ Returns:
380
+ float: The shear resistance of the shear reinforcement in N.
381
+
382
+ Raises:
383
+ ValueError: When theta < 21.8 degrees or theta > 45 degrees.
384
+ """
385
+ fywd = fyk / gamma_s
386
+ _theta(theta)
387
+ theta = math.radians(theta)
388
+ alpha = math.radians(alpha)
389
+ return (
390
+ Asw
391
+ / s
392
+ * z
393
+ * fywd
394
+ * (1 / math.tan(theta) + 1.0 / math.tan(alpha))
395
+ * math.sin(alpha)
396
+ )
397
+
398
+
399
+ # Equation (6.9 & 6.14)
400
+ # For alpha == 90 degrees, Equation (6.14) reduces to Equation (6.9).
401
+ def VRdmax(
402
+ bw: float,
403
+ z: float,
404
+ fck: float,
405
+ theta: float,
406
+ NEd: float,
407
+ Ac: float,
408
+ fcd: float,
409
+ alpha: float = 90.0,
410
+ limit_fyd: bool = False,
411
+ ) -> float:
412
+ """Calculate the maximum shear strength of the compression strut.
413
+
414
+ EN 1992-1-1 (2005). Eq. (6.9)
415
+
416
+ Args:
417
+ bw (float): The smallest width of the cross-section in tension in mm.
418
+ z (float): The inner lever arm of internal forces in mm.
419
+ fck (float): The characteristic compressive strength in MPa.
420
+ theta (float): The angle of the compression strut in degrees.
421
+ NEd (float): The normal force in the cross-section due to loading or
422
+ prestress (NEd > 0 for compression) in N.
423
+ Ac (float): The cross-sectional area of the concrete in mm2.
424
+ fcd (float): The design compressive strength in MPa.
425
+
426
+ Keyword Args:
427
+ alpha (float): The angle of the shear reinforcement with respect to the
428
+ neutral axis in degrees. Default value = 90 degrees.
429
+ limit_fyd (bool): Flag to indicate if the design yield stress is
430
+ limited to 0.8 * fyk or not. This controls whether the stress
431
+ reduction factor of concrete is given by Eq. (6.6) (False) or
432
+ (6.10) (True).
433
+
434
+ Returns:
435
+ float: The shear strength of the shear reinforcement in N.
436
+
437
+ Raises:
438
+ ValueError: When theta < 21.8 degrees or theta > 45 degrees.
439
+ ValueError: When sigma_cp > fcd.
440
+ """
441
+ _theta(theta)
442
+ theta = math.radians(theta)
443
+ alpha = math.radians(alpha)
444
+ strength_reduction = v(fck) if not limit_fyd else v1(fck)
445
+ return (
446
+ alpha_cw(NEd, Ac, fcd)
447
+ * bw
448
+ * z
449
+ * strength_reduction
450
+ * fcd
451
+ * (1.0 / math.tan(theta) + 1.0 / math.tan(alpha))
452
+ / (1 + 1.0 / math.tan(theta) ** 2)
453
+ )
454
+
455
+
456
+ # Equation (6.12 & 6.15)
457
+ # For alpha == 90 degrees, Equation (6.15) reduces to Equation (6.12).
458
+ def Asw_max(
459
+ fcd: float,
460
+ fck: float,
461
+ bw: float,
462
+ s: float,
463
+ fywd: float,
464
+ NEd: float,
465
+ Ac: float,
466
+ alpha: float = 90.0,
467
+ ) -> float:
468
+ """Calculate the maximum cross-sectional area of the shear reinforcement,
469
+ based on the assumption 1/tan(theta) == 1.
470
+
471
+ EN 1992-1-1 (2005). Eq. (6.13)
472
+
473
+ Args:
474
+ fcd (float): The design strength of the concrete in MPa.
475
+ fck (float): The characteristic compressive strength in MPa.
476
+ bw (float): The smallest width of the cross-section in tension in mm.
477
+ s (float): The centre-to-centre distance of the shear reinforcement in
478
+ mm.
479
+ fwyd (float): The design strength of the shear reinforcement steel in
480
+ MPa.
481
+ NEd (float): The normal force in the cross-section due to loading or
482
+ prestress (NEd > 0 for compression) in N.
483
+ Ac (float): The cross-sectional area of the concrete in mm2.
484
+
485
+ Keyword Args:
486
+ alpha (float): The angle of the shear reinforcement with respect to the
487
+ neutral axis in degrees. Default value = 90 degrees.
488
+
489
+ Returns:
490
+ float: The maximum allowable cross-sectional area of the shear
491
+ reinforcement in mm2.
492
+
493
+ Raises:
494
+ ValueError: When sigma_cp > fcd.
495
+ """
496
+ alpha = math.radians(alpha)
497
+ return (
498
+ 1.0
499
+ / 2.0
500
+ * alpha_cw(NEd, Ac, fcd)
501
+ * v(fck)
502
+ * fcd
503
+ * bw
504
+ * s
505
+ / (fywd * math.sin(alpha))
506
+ )
@@ -0,0 +1,104 @@
1
+ """EUROCODE 2 1992-1-1:2023."""
2
+
3
+ import typing as t
4
+
5
+ from ._annexB_time_dependent import alpha_c
6
+ from ._section5_materials import (
7
+ A_phi_correction_exp,
8
+ Ecm,
9
+ Es,
10
+ alpha_c_th,
11
+ alpha_s_th,
12
+ eps_c1,
13
+ eps_c2,
14
+ eps_cs_50y,
15
+ eps_cu1,
16
+ eps_cu2,
17
+ eps_ud,
18
+ eta_cc,
19
+ fcd,
20
+ fcm,
21
+ fctd,
22
+ fctk_5,
23
+ fctk_95,
24
+ fctm,
25
+ fpd,
26
+ fyd,
27
+ hn,
28
+ k_sargin,
29
+ k_tc,
30
+ k_tt,
31
+ n_parabolic_rectangular,
32
+ p_steel_stress_params,
33
+ phi_50y_t0,
34
+ phi_correction_factor,
35
+ reinforcement_duct_props,
36
+ sigma_p,
37
+ sigma_s,
38
+ weight_c,
39
+ weight_s,
40
+ )
41
+ from ._section9_sls import (
42
+ As_min_y,
43
+ Ec_eff,
44
+ delta_simpl,
45
+ epssm_epscm,
46
+ k_1_r,
47
+ kfl,
48
+ kh,
49
+ srm_cal,
50
+ wk_cal,
51
+ wk_cal2,
52
+ )
53
+
54
+ __all__ = [
55
+ 'A_phi_correction_exp',
56
+ 'alpha_c_th',
57
+ 'alpha_s_th',
58
+ 'Ecm',
59
+ 'eps_c1',
60
+ 'eps_cs_50y',
61
+ 'eps_cu1',
62
+ 'k_sargin',
63
+ 'eps_c2',
64
+ 'eps_cu2',
65
+ 'n_parabolic_rectangular',
66
+ 'eps_ud',
67
+ 'Es',
68
+ 'eta_cc',
69
+ 'fcd',
70
+ 'fcm',
71
+ 'fctd',
72
+ 'fctk_5',
73
+ 'fctk_95',
74
+ 'fctm',
75
+ 'fpd',
76
+ 'fyd',
77
+ 'hn',
78
+ 'k_tc',
79
+ 'k_tt',
80
+ 'p_steel_stress_params',
81
+ 'phi_50y_t0',
82
+ 'phi_correction_factor',
83
+ 'reinforcement_duct_props',
84
+ 'sigma_c',
85
+ 'sigma_p',
86
+ 'sigma_s',
87
+ 'weight_c',
88
+ 'weight_s',
89
+ 'alpha_c',
90
+ 'As_min_y',
91
+ 'delta_simpl',
92
+ 'Ec_eff',
93
+ 'epssm_epscm',
94
+ 'k_1_r',
95
+ 'kfl',
96
+ 'kh',
97
+ 'srm_cal',
98
+ 'wk_cal',
99
+ 'wk_cal2',
100
+ ]
101
+
102
+ __title__: str = 'EUROCODE 2 1992-1-1:2023'
103
+ __year__: str = '2023'
104
+ __materials__: t.Tuple[str] = ('concrete', 'reinforcement')
@@ -0,0 +1,17 @@
1
+ """Functions from Annex B of EN 1992-1-1:2022."""
2
+
3
+
4
+ def alpha_c(fcm_28: float) -> float:
5
+ """Returns the coefficient to obtain the tangent modulus of elasticity from
6
+ the secant modulus of elasticity.
7
+
8
+ EN 1992-1-1, Table 5.1
9
+
10
+ Args:
11
+ fcm_28 (float): The characteristic compressive strength at 28 days
12
+ in MPa.
13
+
14
+ Returns:
15
+ float: Coefficient alphac so that Ec=alphac*Ecm,28.
16
+ """
17
+ return max(1 / (0.8 + 0.2 * fcm_28 / 88), 1)