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,104 @@
1
+ """Shear at the interface between concrete with different casting times."""
2
+
3
+ from math import cos, pi, sin
4
+
5
+
6
+ def tau_edi(beta: float, v_ed: float, z: float, b_i: float) -> float:
7
+ """Shear at the interface between concrete cast at different times.
8
+
9
+ fib Model Code 2010, eq. (7.3-49).
10
+
11
+ Args:
12
+ beta (float): The ratio of longitudinal force in the new concrete and
13
+ the longitudinal force in either compression or tension zone.
14
+ v_ed (float): The shear force at the interface in N.
15
+ z (float): The inner lever arm of the composed section in mm.
16
+ b_i (float): The width of the inerface in mm.
17
+
18
+ Returns:
19
+ float: The shear force that should be used at the intersection.
20
+ """
21
+ return (beta * v_ed) / (z * b_i)
22
+
23
+
24
+ def tau_rdi_without_reinforcement(
25
+ c_a: float,
26
+ f_ctd: float,
27
+ mu: float,
28
+ sigma_n: float,
29
+ f_ck: float,
30
+ f_cd: float,
31
+ ) -> float:
32
+ """Shear resistance without reinforcement at the intesection with different
33
+ casting time.
34
+
35
+ fib Model Code 2010, eq. (7.3-50).
36
+
37
+ Args:
38
+ c_a (float): The coefficient for adhesive bond (Table 7.3-1).
39
+ f_ctd (float): The design axial tensile strength of concrete.
40
+ mu (float): The friction coefficient.
41
+ sigma_n (float): The lowest expected compressive stress from normal
42
+ forces in MPa.
43
+ f_ck (float): Characteristic strength in MPa.
44
+ f_cd (float): The design value of cylinder compressive strength
45
+ concrete in MPa.
46
+
47
+ Returns:
48
+ float: The shear resistance without reinforcement at the intesection
49
+ with different casting time.
50
+ """
51
+ v = min(0.55 * (30 / f_ck) ** (1 / 3), 0.55)
52
+ return min((c_a * f_ctd) + (mu * sigma_n), 0.5 * v * f_cd)
53
+
54
+
55
+ def tau_rdi_with_reinforcement(
56
+ c_r: float,
57
+ k1: float,
58
+ k2: float,
59
+ mu: float,
60
+ ro: float,
61
+ sigma_n: float,
62
+ alpha: float,
63
+ beta_c: float,
64
+ f_ck: float,
65
+ f_yd: float,
66
+ f_cd: float,
67
+ ) -> float:
68
+ """Shear resistance with reinforcement or dowels at the intesection with
69
+ different casting time.
70
+
71
+ fib Model Code 2010, eq. (7.3-51).
72
+
73
+ Args:
74
+ c_r (float): Coefficient for aggregate interlock effects (Table 7.3-2).
75
+ k1 (float): The interaction coefficient for tensile force activated in
76
+ reinforcment (Table 7.3-2).
77
+ k2 (float): The interaction coeffiction for flexural resistance (Table
78
+ 7.3-2).
79
+ mu (float): The friction coefficient (Table 7.3-2).
80
+ ro (float): The reinforcement ratio of reinforcing steel crossing the
81
+ interface.
82
+ sigma_n (float): The lowest expected compressive stress resulting from
83
+ normal forces acting on the interface in MPa.
84
+ alpha (float): The inclination of reinforcement crossing the interface
85
+ (Table 7.3-14).
86
+ beta_c (float): The coefficient for strength of compression strut
87
+ (Table 7.3-2).
88
+ f_ck (float): Characteristic strength in MPa.
89
+ f_yd (float): design strength of reinforment steel in MPa.
90
+ f_cd (float): The design value of cylinder compressive strength
91
+ concrete.
92
+
93
+ Returns:
94
+ float: Shear resistance with reinforcement at intesection with
95
+ different casting time.
96
+ """
97
+ v = min(0.55 * (30 / f_ck) ** (1 / 3), 0.55)
98
+ return min(
99
+ (c_r * f_ck ** (1 / 3))
100
+ + (mu * sigma_n)
101
+ + k1 * ro * f_yd * (mu * sin(alpha * pi / 180) + cos(alpha * pi / 180))
102
+ + k2 * ro * (f_yd * f_cd) ** 0.5,
103
+ beta_c * v * f_cd,
104
+ )
@@ -0,0 +1,463 @@
1
+ """A collection of material properties for concrete."""
2
+
3
+ from __future__ import annotations # To have clean hints of ArrayLike in docs
4
+
5
+ import math
6
+ import typing as t
7
+
8
+ import numpy as np
9
+ import numpy.typing as npt
10
+
11
+ # Values from Table 5.1-6.
12
+ ALPHA_E = {
13
+ 'basalt': 1.2,
14
+ 'quartzite': 1.0,
15
+ 'limestone': 0.9,
16
+ 'sandstone': 0.7,
17
+ }
18
+ # Values for normal strength concrete, from Table 5.1-9.
19
+ S_CEM = {
20
+ '32.5 R': 0.25,
21
+ '42.5 N': 0.25,
22
+ '42.5 R': 0.2,
23
+ '52.5 N': 0.2,
24
+ '52.5 R': 0.2,
25
+ '32.5 N': 0.38,
26
+ }
27
+
28
+
29
+ def fcm(fck: float, delta_f: float = 8.0) -> float:
30
+ """Compute the mean concrete compressive strength from the characteristic
31
+ strength.
32
+
33
+ fib Model Code 2010, Eq. (5.1-1).
34
+
35
+ Args:
36
+ fck (float): The characteristic compressive strength in MPa.
37
+
38
+ Keyword Args:
39
+ delta_f (float): The difference between the mean and the characteristic
40
+ strength.
41
+
42
+ Returns:
43
+ float: The mean compressive strength in MPa.
44
+ """
45
+ return abs(fck) + abs(delta_f)
46
+
47
+
48
+ def fctm(fck: float) -> float:
49
+ """Compute the mean concrete tensile strength from the characteristic
50
+ compressive strength.
51
+
52
+ fib Model Code 2010, Eqs. (5.1-3a) and (5.1-3b).
53
+
54
+ Args:
55
+ fck (float): The characteristic compressive strength in MPa.
56
+
57
+ Returns:
58
+ float: The mean tensile strength in MPa.
59
+ """
60
+ if abs(fck) <= 50:
61
+ return 0.3 * math.pow(abs(fck), 2 / 3)
62
+ return 2.12 * math.log(1 + 0.1 * fcm(fck))
63
+
64
+
65
+ def fctkmin(fctm: float) -> float:
66
+ """Compute the lower bound value of the characteristic tensile strength
67
+ from the mean tensile strength.
68
+
69
+ fib Model Code 2010, Eq. (5.1-4).
70
+
71
+ Args:
72
+ fctm (float): The mean tensile strength in MPa.
73
+
74
+ Returns:
75
+ float: Lower bound of the characteristic tensile strength in MPa.
76
+ """
77
+ return 0.7 * fctm
78
+
79
+
80
+ def fctkmax(fctm: float) -> float:
81
+ """Compute the upper bound value of the characteristic tensile strength
82
+ from the mean tensile strength.
83
+
84
+ fib Model Code 2010, Eq. (5.1-5).
85
+
86
+ Args:
87
+ fctm (float): The mean tensile strength in MPa.
88
+
89
+ Returns:
90
+ float: Upper bound of the characteristic tensile strength in MPa.
91
+ """
92
+ return 1.3 * fctm
93
+
94
+
95
+ def Gf(fck: float) -> float:
96
+ """Compute tensile fracture energy from characteristic compressive
97
+ strength.
98
+
99
+ fib Model Code 2010, Eq. (5.1-9).
100
+
101
+ Args:
102
+ fck (float): The characteristic compressive strength in MPa.
103
+
104
+ Returns:
105
+ float: The tensile fracture energy in N/m.
106
+ """
107
+ return 73 * fcm(fck) ** 0.18
108
+
109
+
110
+ def Eci(
111
+ fcm: float,
112
+ agg_type: t.Literal[
113
+ 'basalt', 'quartzite', 'limestone', 'sandstone'
114
+ ] = 'quartzite',
115
+ EC0: float = 21500,
116
+ ) -> float:
117
+ """Calculate the modulus of elasticity for normal weight concrete at 28
118
+ days.
119
+
120
+ Defined in fib Model Code 2010 (2013), Eq. 5.1-21.
121
+
122
+ Args:
123
+ fcm (float): The mean value of the compressive strength of the
124
+ concrete in MPa.
125
+
126
+ Keyword Args:
127
+ agg_type (str): Type of coarse grain aggregate used in the concrete.
128
+ Choices are: 'basalt', 'quartzite', 'limestone', 'sandstone'.
129
+ EC0 (float): Initial value of modulus of elasticity in MPa.
130
+
131
+ Returns:
132
+ float: The modulus of elasticity for normal weight concrete at 28 days
133
+ in MPa.
134
+ """
135
+ return EC0 * ALPHA_E[agg_type.lower()] * (fcm / 10) ** (1 / 3)
136
+
137
+
138
+ def beta_cc(
139
+ time: npt.ArrayLike,
140
+ fcm: float,
141
+ cem_class: t.Literal[
142
+ '32.5 N', '32.5 R', '42.5 N', '42.5 R', '52.5 N', '52.5 R'
143
+ ],
144
+ ) -> np.ndarray:
145
+ """Calculate multiplication factor beta_cc, used to determine the
146
+ compressive strength at an arbitrary time.
147
+
148
+ Defined in fib Model Code 2010 (2013), Eq. 5.1-51.
149
+
150
+ Args:
151
+ time (numpy.typing.ArrayLike): The time in days at which the
152
+ compressive strength is to be determined.
153
+ fcm (float): The mean compressive strength of the concrete in MPa.
154
+ cem_class (str): The cement strength class that is used. The choices
155
+ are: '32.5 N', '32.5 R', '42.5 N', '42.5 R', '52.5 N', '52.5 R'.
156
+
157
+ Returns:
158
+ numpy.ndarray: Multiplication factor beta_cc.
159
+ """
160
+ if fcm > 60:
161
+ return np.exp(0.2 * (1 - np.sqrt(28 / time)))
162
+ return np.exp(S_CEM[cem_class.upper()] * (1 - np.sqrt(28 / time)))
163
+
164
+
165
+ def beta_e(beta_cc: npt.ArrayLike) -> np.ndarray:
166
+ """Calculate multiplication factor beta_e, used to determine the modulus of
167
+ elasticity at an arbitrary time.
168
+
169
+ Defined in fib Model Code 2010 (2013), Eq. 5.1-57.
170
+
171
+ Args:
172
+ beta_cc (numpy.typing.ArrayLike): Multiplication factor as defined in
173
+ the fib Model Code 2010 (2013), Eq. 5.1-51.
174
+
175
+ Returns:
176
+ numpy.ndarray: Multiplication factor beta_e.
177
+ """
178
+ return np.sqrt(beta_cc)
179
+
180
+
181
+ def Eci_t(beta_e: npt.ArrayLike, Eci: float) -> np.ndarray:
182
+ """Calculate the modulus of elasticity for normal weight concrete at time
183
+ 'time' (not 28 days).
184
+
185
+ Defined in fib Model Code 2010 (2013), Eq. 5.1-56.
186
+
187
+ Args:
188
+ beta_e (numpy.typing.ArrayLike): Multiplication factor to determine
189
+ the modulus of elasticity at an arbitrary time, as defined in fib
190
+ Model Code 2010 (2013), Eq. 5.1-51.
191
+ Eci (float): Modulus of elasticity of normal weight concrete at 28
192
+ days, as defined in fib Model Code 2010 (2013), Eq. 5.1-21.
193
+
194
+ Returns:
195
+ numpy.ndarray: The modulus of elasticity for normal weight concrete at
196
+ time 'time' (not 28 days) in MPa.
197
+ """
198
+ return beta_e * Eci
199
+
200
+
201
+ def fcd(fck: float, alpha_cc: float = 1.0, gamma_c: float = 1.5) -> float:
202
+ """The design compressive strength of concrete.
203
+
204
+ Defined in fib Model Code 2010 (2013), Eq. 7.2-11.
205
+
206
+ Args:
207
+ fck (float): The characteristic compressive strength in MPa.
208
+
209
+ Keyword Args:
210
+ alpha_cc (float): A factor for considering long-term effects on the
211
+ strength, and effects that arise from the way the load is applied.
212
+ Default value 1.0.
213
+ gamma_c (float): The partial factor of concrete. Default value 1.5.
214
+
215
+ Returns:
216
+ float: The design compressive strength of concrete in MPa.
217
+ """
218
+ return abs(alpha_cc) * abs(fck) / abs(gamma_c)
219
+
220
+
221
+ def eps_c1(fck: float) -> float:
222
+ """The strain at maximum compressive stress of concrete (fcm) for the
223
+ Sargin constitutive law.
224
+
225
+ Defined in fib Model Code 2010 (2013), Eq. 5.1-26 and Table 5.1-8
226
+
227
+ The value is computing using interpolation from Table 5.1-8
228
+
229
+ Args:
230
+ fck (float): The characteristic compressive strength of concrete in
231
+ MPa.
232
+
233
+ Returns:
234
+ float: The strain at maximum compressive stress, absolute value, no
235
+ unit.
236
+
237
+ Raises:
238
+ ValueError: if fck is less than 12 or greater than 120
239
+ """
240
+ grade = np.array(
241
+ [12, 16, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80, 90, 100, 110, 120]
242
+ )
243
+ eps_c1 = np.array(
244
+ [
245
+ -1.9,
246
+ -2.0,
247
+ -2.1,
248
+ -2.2,
249
+ -2.3,
250
+ -2.3,
251
+ -2.4,
252
+ -2.5,
253
+ -2.6,
254
+ -2.6,
255
+ -2.7,
256
+ -2.7,
257
+ -2.8,
258
+ -2.9,
259
+ -3.0,
260
+ -3.0,
261
+ -3.0,
262
+ ]
263
+ )
264
+ if fck < grade.min() or fck > grade.max():
265
+ raise ValueError(
266
+ f'fck must be between {grade.min()} MPa and {grade.max()} MPa.'
267
+ ' fck = {fck} given.'
268
+ )
269
+ return np.interp(fck, grade, eps_c1) / 1000
270
+
271
+
272
+ def eps_clim(fck: float) -> float:
273
+ """The ultimate strain for the Sargin constitutive law.
274
+
275
+ Defined in fib Model Code 2010 (2013), Eq. 5.1-26 and Table 5.1-8
276
+
277
+ The value is computing using interpolation from Table 5.1-8
278
+
279
+ Args:
280
+ fck (float): The characteristic compressive strength of concrete in
281
+ MPa.
282
+
283
+ Returns:
284
+ float: The ultimate strain, absolute value, no unit.
285
+ """
286
+ grade = np.array(
287
+ [12, 16, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80, 90, 100, 110, 120]
288
+ )
289
+ eps_clim = np.array(
290
+ [
291
+ -3.5,
292
+ -3.5,
293
+ -3.5,
294
+ -3.5,
295
+ -3.5,
296
+ -3.5,
297
+ -3.5,
298
+ -3.5,
299
+ -3.4,
300
+ -3.4,
301
+ -3.3,
302
+ -3.2,
303
+ -3.1,
304
+ -3.0,
305
+ -3.0,
306
+ -3.0,
307
+ -3.0,
308
+ ]
309
+ )
310
+ if fck < grade.min() or fck > grade.max():
311
+ raise ValueError(
312
+ f'fck must be between {grade.min()} MPa and {grade.max()} MPa.'
313
+ ' fck = {fck} given.'
314
+ )
315
+ return np.interp(fck, grade, eps_clim) / 1000
316
+
317
+
318
+ def k_sargin(fck: float) -> float:
319
+ """The plasticity number k for Sargin constitutive Law.
320
+
321
+ Defined in fib Model Code 2010 (2013), Eq. 5.1-26 and Table 5.1-8
322
+
323
+ Args:
324
+ fck (float): The characteristic compressive strength of concrete in
325
+ MPa.
326
+
327
+ Returns:
328
+ float: The plasticity number k, absolute value, no unit.
329
+ """
330
+ grade = np.array(
331
+ [12, 16, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80, 90, 100, 110, 120]
332
+ )
333
+ k = np.array(
334
+ [
335
+ 2.44,
336
+ 2.36,
337
+ 2.28,
338
+ 2.15,
339
+ 2.04,
340
+ 1.92,
341
+ 1.82,
342
+ 1.74,
343
+ 1.66,
344
+ 1.61,
345
+ 1.55,
346
+ 1.47,
347
+ 1.41,
348
+ 1.36,
349
+ 1.32,
350
+ 1.24,
351
+ 1.18,
352
+ ]
353
+ )
354
+ if fck < grade.min() or fck > grade.max():
355
+ raise ValueError(
356
+ f'fck must be between {grade.min()} MPa and {grade.max()} MPa.'
357
+ ' fck = {fck} given.'
358
+ )
359
+ return np.interp(fck, grade, k)
360
+
361
+
362
+ def eps_cu1(fck: float) -> float:
363
+ """The nominal ultimate strain for the Sargin constitutive law.
364
+
365
+ Defined in fib Model Code 2010 (2013), Table 7.2-1 and Eq. 7.2-10
366
+
367
+ Args:
368
+ fck (float): The characteristic compressive strength of concrete in
369
+ MPa.
370
+
371
+ Returns:
372
+ float: The strain at maximum compressive stress, absolute value, no
373
+ unit.
374
+ """
375
+ return eps_clim(fck)
376
+
377
+
378
+ def eps_c2(fck: float) -> float:
379
+ """The strain at maximum compressive stress of concrete for the
380
+ parabolic-rectangular law.
381
+
382
+ Defined in fib Model Code 2010 (2013), Table 7.2-1
383
+
384
+ Args:
385
+ fck (float): The characteristic compressive strength of concrete in
386
+ MPa.
387
+
388
+ Returns:
389
+ float: The strain at maximum compressive stress, absolute value, no
390
+ unit.
391
+ """
392
+ fck = abs(fck)
393
+ return (
394
+ 2.0 / 1000 if fck <= 50 else (2.0 + 0.085 * (fck - 50) ** 0.53) / 1000
395
+ )
396
+
397
+
398
+ def eps_cu2(fck: float) -> float:
399
+ """The ultimate strain of the parabolic-rectangular law.
400
+
401
+ Defined in fib Model Code 2010 (2013), Table 7.2-1
402
+
403
+ Args:
404
+ fck (float): The characteristic compressive strength of concrete in
405
+ MPa.
406
+
407
+ Returns:
408
+ float: The ultimate strain, absolute value, no unit.
409
+ """
410
+ fck = abs(fck)
411
+ return (
412
+ 3.5 / 1000
413
+ if fck <= 50
414
+ else (2.6 + 35 * ((90 - fck) / 100) ** 4) / 1000
415
+ )
416
+
417
+
418
+ def n_parabolic_rectangular(fck: float) -> float:
419
+ """The exponent in the parabolic-rectangular law.
420
+
421
+ Defined in fib Model Code 2010 (2013), Table 7.2-1
422
+
423
+ Args:
424
+ fck (float): The characteristic compressive strength of concrete in
425
+ MPa.
426
+
427
+ Returns:
428
+ float: The exponent n, absolute value, no unit.
429
+ """
430
+ fck = abs(fck)
431
+ return 2.0 if fck <= 50 else (1.4 + 23.4 * ((90 - fck) / 100) ** 4)
432
+
433
+
434
+ def eps_c3(fck: float) -> float:
435
+ """The strain at maximum compressive stress of the bi-linear law.
436
+
437
+ Defined in fib Model Code 2010 (2013), Table 7.2-1
438
+
439
+ Args:
440
+ fck (float): The characteristic compressive strength of concrete in
441
+ MPa.
442
+
443
+ Returns:
444
+ float: The strain at maximum compressive stress, absolute value, no
445
+ unit.
446
+ """
447
+ fck = abs(fck)
448
+ return 1.75 / 1000 if fck <= 50 else (1.75 + 0.55 * (fck - 50) / 40) / 1000
449
+
450
+
451
+ def eps_cu3(fck: float) -> float:
452
+ """The ultimate strain of the bi-linear law.
453
+
454
+ Defined in fib Model Code 2010 (2013), Table 7.2-1
455
+
456
+ Args:
457
+ fck (float): The characteristic compressive strength of concrete in
458
+ MPa.
459
+
460
+ Returns:
461
+ float: The ultimate strain, absolute value, no unit.
462
+ """
463
+ return eps_cu2(fck)