structuralcodes 0.4.0__py3-none-any.whl → 0.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of structuralcodes might be problematic. Click here for more details.

Files changed (26) hide show
  1. structuralcodes/__init__.py +1 -1
  2. structuralcodes/codes/ec2_2004/__init__.py +2 -0
  3. structuralcodes/codes/ec2_2004/shear.py +44 -4
  4. structuralcodes/codes/mc2010/__init__.py +18 -0
  5. structuralcodes/codes/mc2010/_concrete_punching.py +300 -388
  6. structuralcodes/core/base.py +1 -1
  7. structuralcodes/geometry/_circular.py +3 -10
  8. structuralcodes/geometry/_geometry.py +47 -92
  9. structuralcodes/geometry/_rectangular.py +3 -10
  10. structuralcodes/geometry/_reinforcement.py +8 -11
  11. structuralcodes/materials/__init__.py +2 -1
  12. structuralcodes/materials/basic/__init__.py +11 -0
  13. structuralcodes/materials/basic/_elastic.py +52 -0
  14. structuralcodes/materials/basic/_elasticplastic.py +75 -0
  15. structuralcodes/materials/basic/_generic.py +26 -0
  16. structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +1 -1
  17. structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +1 -1
  18. structuralcodes/materials/reinforcement/_reinforcementMC2010.py +1 -1
  19. structuralcodes/sections/_generic.py +53 -14
  20. structuralcodes/sections/_rc_utils.py +15 -5
  21. structuralcodes/sections/section_integrators/_fiber_integrator.py +19 -11
  22. structuralcodes/sections/section_integrators/_marin_integrator.py +24 -19
  23. {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/METADATA +1 -1
  24. {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/RECORD +26 -22
  25. {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/WHEEL +0 -0
  26. {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,6 @@
1
1
  """Covers punching in Model code 2010, 7.3.5.1 to 7.3.5.4."""
2
2
 
3
+ import typing as t
3
4
  import warnings
4
5
  from math import cos, pi, sin
5
6
 
@@ -7,7 +8,7 @@ from math import cos, pi, sin
7
8
  def b_0(v_ed: float, v_prep_d_max: float) -> float:
8
9
  """Gives the general output for b_0, shear-resisting control perimeter.
9
10
 
10
- fib Model Code 2010, eq. (7.3-57).
11
+ fib Model Code 2010, Eq. (7.3-57).
11
12
 
12
13
  Args:
13
14
  V_ed (float): The acting shear force from the columns.
@@ -20,11 +21,31 @@ def b_0(v_ed: float, v_prep_d_max: float) -> float:
20
21
  return v_ed / v_prep_d_max
21
22
 
22
23
 
24
+ def b_s(
25
+ l_x: float,
26
+ l_y: float,
27
+ ) -> float:
28
+ """The width of the support strip for calculating m_ed.
29
+
30
+ fib Model Code 2010, Eq. (7.3-76).
31
+
32
+ Args:
33
+ l_x (float): The width in x direction that the collumn carries.
34
+ l_y (float): The width in y direction that the collumn carries.
35
+
36
+ Returns:
37
+ float: The width of the support strip for calculating m_ed.
38
+ """
39
+ r_sx = 0.22 * l_x # see MC2010 7.3.5.3
40
+ r_sy = 0.22 * l_y # see MC2010 7.3.5.3
41
+ l_min = min(l_x, l_y)
42
+ return min(1.5 * (r_sx * r_sy) ** 0.5, l_min)
43
+
44
+
23
45
  def m_ed(
24
46
  v_ed: float,
25
47
  e_u: float,
26
- l_x: float,
27
- l_y: float,
48
+ b_s: float,
28
49
  inner: bool,
29
50
  edge_par: bool,
30
51
  edge_per: bool,
@@ -32,15 +53,13 @@ def m_ed(
32
53
  ) -> float:
33
54
  """The average bending moment acting in the support strip.
34
55
 
35
- fib Model Code 2010, eq. (7.3-76), (7.3-71), (7.3-72), (7.3-73)
36
- and (7.3-74).
56
+ fib Model Code 2010, Eq. (7.3-71), (7.3-72), (7.3-73) and (7.3-74).
37
57
 
38
58
  Args:
39
59
  v_ed (float): The acting shear force from the columns.
40
60
  e_u (float): Refers to the eccentricity of the resultant of shear
41
61
  forces with respect to the centroid.
42
- l_x (float): The width in x direction that the collumn carries.
43
- l_y (float): The width in y direction that the collumn carries.
62
+ b_s (float): The width of the support strip for calculating m_ed.
44
63
  inner (bool): Is true only if the column is a inner column.
45
64
  edge_par (bool): Is true only if the column is a edge column with
46
65
  tension reinforcement parallel to the edge.
@@ -52,10 +71,6 @@ def m_ed(
52
71
  float: The bending moment acting in the support strip regardless of the
53
72
  position of the column.
54
73
  """
55
- r_sx = 0.22 * l_x
56
- r_sy = 0.22 * l_y
57
- l_min = min(l_x, l_y)
58
- b_s = min(1.5 * (r_sx * r_sy) ** 0.5, l_min)
59
74
  if inner:
60
75
  return v_ed * ((1 / 8) + abs(e_u) / (2 * b_s))
61
76
  if edge_par:
@@ -67,296 +82,346 @@ def m_ed(
67
82
  raise ValueError('Placement is not defined, only one needs to be True')
68
83
 
69
84
 
70
- def psi_punching(
85
+ def b_sr(
86
+ l_x: float,
87
+ l_y: float,
88
+ ) -> float:
89
+ """The width of the support strip in the radial direction.
90
+
91
+ fib Model Code 2010, 7.3.5.3.
92
+
93
+ Args:
94
+ l_x (float): The width in x direction that the collumn carries.
95
+ l_y (float): The width in y direction that the collumn carries.
96
+
97
+ Returns:
98
+ float: The width of the support strip in the radial direction.
99
+ """
100
+ return min(l_x, l_y)
101
+
102
+
103
+ def r_s(
104
+ l_x: float,
105
+ l_y: float,
106
+ x_direction: bool,
107
+ is_level_three_approximation: bool = False,
108
+ column_edge_or_corner: bool = False,
109
+ b_sr: t.Optional[float] = None,
110
+ ) -> float:
111
+ """The position where the radial bending moment is zero with respect to the
112
+ support axis.
113
+
114
+ fib Model Code 2010, 7.3.5.3 and Eq. (7.3-78) for Level III of
115
+ Approximation.
116
+
117
+ Args:
118
+ l_x (float): The width in x direction that the collumn carries.
119
+ l_y (float): The width in y direction that the collumn carries.
120
+ x_direction (bool): True if the radial bending moment is zero in the x
121
+ direction, False if it is in the y direction.
122
+ column_edge_or_corner (bool): True if the column is an edge or corner
123
+ column, False if it is an inner column. To be used for Level III of
124
+ Approximation.
125
+ b_sr (float): The width of the support strip in the radial direction.
126
+
127
+ Returns:
128
+ float: The position where the radial bending moment is zero with
129
+ respect to the support axis.
130
+ """
131
+ r_s = 0.22 * l_x if x_direction is True else 0.22 * l_y
132
+
133
+ if column_edge_or_corner and is_level_three_approximation:
134
+ if b_sr is None:
135
+ raise ValueError(
136
+ 'b_sr is not defined for Level 3 of Approximation'
137
+ )
138
+ return max(r_s, 0.67 * b_sr)
139
+ return r_s
140
+
141
+
142
+ def psi_punching_level_one(
71
143
  l_x: float,
72
144
  l_y: float,
73
145
  f_yd: float,
74
- d: float,
146
+ d_eff: float,
75
147
  e_s: float,
76
- approx_lvl_p: float,
77
- v_ed: float,
78
- e_u: float,
79
- inner: bool,
80
- edge_par: bool,
81
- edge_per: bool,
82
- corner: bool,
148
+ ) -> float:
149
+ """The psi value for the punching level one.
150
+
151
+ fib Model Code 2010, Eq. (7.3-70).
152
+
153
+ Args:
154
+ r_s (float): The position where the radial bending moment is zero with
155
+ respect to the support axis.
156
+ f_yd (float): Design strength of reinforment steel in MPa.
157
+ d_eff (float): The mean value of the effective depth in mm.
158
+ e_s (float): The E_modulus for steel in MPa.
159
+
160
+ Returns:
161
+ float: The psi value for the punching level one.
162
+ """
163
+ r_s = max(0.22 * l_x, 0.22 * l_y) # MC2010 7.3.5.3 - Unique for (7.3-70)
164
+ return 1.5 * r_s * f_yd / (d_eff * e_s)
165
+
166
+
167
+ def psi_punching_level_two(
168
+ r_s: float,
169
+ f_yd: float,
170
+ d_eff: float,
171
+ e_s: float,
172
+ m_ed: float,
83
173
  m_rd: float,
84
- x_direction: bool,
174
+ m_Pd: float = 0,
85
175
  ) -> float:
86
- """The rotation of the slab around the supported area.
176
+ """The psi value for the punching level two.
87
177
 
88
- fib Model Code 2010, eq. (7.3-70), (7.3-75) and (7.3-77).
178
+ fib Model Code 2010, Eq. (7.3-75) and (7.3-77).
89
179
 
90
180
  Args:
91
- l_x (float): The distance between two columns in x direction.
92
- l_y (float): The distance between two columns in y direction.
181
+ r_s (float): The position where the radial bending moment is zero with
182
+ respect to the support axis.
93
183
  f_yd (float): Design strength of reinforment steel in MPa.
94
- d (float): The mean value of the effective depth in mm.
184
+ d_eff (float): The mean value of the effective depth in mm.
95
185
  e_s (float): The E_modulus for steel in MPa.
96
- approx_lvl_p (float): The approx level for punching.
97
- v_ed (float): The acting shear force from the columns.
98
- e_u (float): Refers to the eccentricity of the resultant of shear
99
- forces with respect to the centroid.
100
- inner (bool): Is true only if the column is a inner column.
101
- edge_par (bool): Is true only if the column is a edge column with
102
- tension reinforcement parallel to the edge.
103
- edge_per (bool): Is true only if the column is a edge column with
104
- tension reinforcement perpendicular to the edge.
105
- corner (bool): Is true only if the column is a corner column.
186
+ m_ed (float): The average bending moment acting in the support strip.
106
187
  m_rd (float): The design average strength per unit length in MPa.
107
- m_pd: (float): The average decompresstion moment due to prestressing
108
- in MPa.
188
+ m_Pd (float): Optional to cover Eq. (7.3-77) for prestressed slabs.
189
+ The average decompression moment over the width of the support
190
+ strip (b_s) due to prestressing.
191
+
192
+ Returns:
193
+ float: The psi value for the punching level two.
194
+ """
195
+ return (1.5 * r_s * f_yd / (d_eff * e_s)) * (
196
+ (m_ed - m_Pd) / (m_rd - m_Pd)
197
+ ) ** 1.5
198
+
199
+
200
+ def psi_punching_level_three(
201
+ psi_punching_level_two: float,
202
+ is_uncracked_model: bool = False,
203
+ is_moment_from_uncracked_model: bool = False,
204
+ ) -> float:
205
+ """The psi value for the punching level three.
206
+
207
+ fib Model Code 2010, Level III of Approximation Eq. (7.3-75) and Eq.
208
+ (7.3-77) with coefficient 1.2 instead of 1.5 under specific conditions.
209
+
210
+ Args:
211
+ psi_punching_level_two (float): The psi value for the punching level 2.
212
+ is_uncracked_model (bool): True if r_s is calculated using a linear
213
+ elastic (uncracked) model.
214
+ is_moment_from_uncracked_model (bool): True if m_sd is calculated from
215
+ a linear elastic (uncracked) model as the average value of the
216
+ moment for design of the flexural reinforcement over the width of
217
+ the support strip (b_s).
218
+
219
+ Returns:
220
+ float: The psi value for the punching level three.
221
+ """
222
+ if is_uncracked_model and is_moment_from_uncracked_model:
223
+ return 1.2 / 1.5 * psi_punching_level_two
224
+ return psi_punching_level_two
225
+
226
+
227
+ def psi_punching(
228
+ psi_punching_level_one: float,
229
+ psi_punching_level_two: float,
230
+ psi_punching_level_three: float,
231
+ approx_lvl_p: float,
232
+ ) -> float:
233
+ """The rotation of the slab around the supported area.
234
+
235
+ fib Model Code 2010, Clause 7.3.5.4.
236
+
237
+ Args:
238
+ psi_punching_level_one (float): The psi value for the punching level 1.
239
+ psi_punching_level_two (float): The psi value for the punching level 2.
240
+ psi_punching_level_three (float): The psi value for the punching level
241
+ 3.
242
+ approx_lvl_p (float): The approx level for punching.
109
243
 
110
244
  Returns:
111
245
  float: psi for the chosen approx level in punching.
112
246
  """
113
- r_s = max(0.22 * l_x, 0.22 * l_y)
114
247
  if approx_lvl_p == 1:
115
- psi = 1.5 * r_s * f_yd / (d * e_s)
248
+ return psi_punching_level_one
249
+ if approx_lvl_p == 2:
250
+ return psi_punching_level_two
251
+ if approx_lvl_p == 3:
252
+ return psi_punching_level_three
253
+ raise ValueError('Approximation level is not defined')
116
254
 
117
- elif approx_lvl_p == 2:
118
- r_s = 0.22 * l_x if x_direction is True else 0.22 * l_y
119
- psi = (1.5 * r_s * f_yd / (d * e_s)) * (
120
- (m_ed(v_ed, e_u, l_x, l_y, inner, edge_par, edge_per, corner))
121
- / (m_rd)
122
- ) ** 1.5
123
255
 
124
- return psi
256
+ def k_dg(
257
+ d_g: float,
258
+ ) -> float:
259
+ """Calculate k_dg factor for punching resistance.
260
+
261
+ fib Model Code 2010, Eq. (7.3-62).
262
+
263
+ Args:
264
+ d_g (float): Maximum size of aggregate.
265
+
266
+ Returns:
267
+ float: k_dg factor.
268
+ """
269
+ return max(32 / (16 + d_g), 0.75)
270
+
271
+
272
+ def k_psi(
273
+ k_dg: float,
274
+ d_eff: float,
275
+ psi_punching: float,
276
+ ) -> float:
277
+ """Calculate k_psi factor for punching resistance.
278
+
279
+ fib Model Code 2010, Eq. (7.3-63).
280
+
281
+ Args:
282
+ k_dg (float): k_dg factor.
283
+ d_eff (float): The mean value of the effective depth in mm.
284
+ psi_punching (float): psi value from psi_punching.
285
+
286
+ Returns:
287
+ float: k_psi factor.
288
+ """
289
+ return min(1 / (1.5 + 0.9 * k_dg * d_eff * psi_punching), 0.6)
125
290
 
126
291
 
127
292
  def v_rdc_punching(
128
- l_x: float,
129
- l_y: float,
130
- f_yd: float,
131
- d: float,
132
- e_s: float,
133
- approx_lvl_p: float,
134
- dg: float,
135
- f_ck: float,
293
+ k_psi_val: float,
294
+ b_0: float,
136
295
  d_v: float,
137
- v_ed: float,
138
- e_u: float,
139
- inner: bool,
140
- edge_par: bool,
141
- edge_per: bool,
142
- corner: bool,
143
- m_rd: float,
144
- m_pd: float,
145
- v_prep_d_max: float,
296
+ f_ck: float,
146
297
  gamma_c: float = 1.5,
147
298
  ) -> float:
148
299
  """Punching resistance from the concrete.
149
300
 
150
- fib Model Code 2010, eq. (7.3-61), (7.3-62) and (7.3-63).
301
+ fib Model Code 2010, Eq. (7.3-61).
151
302
 
152
303
  Args:
153
- l_x (float): The distance between two columns in x direction.
154
- l_y (float): The distance between two columns in y direction.
155
- f_yd (float): Design strength of reinforment steel in MPa.
156
- d (float): The mean value of the effective depth in mm.
157
- e_s (float): The E_modulus for steel in MPa.
158
- approx_lvl_p (float): The approx level for punching.
159
- dg (float): Maximum size of aggregate.
160
- f_ck (float): Characteristic strength in MPa.
304
+ k_psi_val (float): k_psi value from k_psi.
305
+ b_0 (float): The shear-resisting control perimeter from b_0.
161
306
  d_v (float): The effective depth considering support in mm.
162
- v_ed (float): The acting shear force from the columns.
163
- e_u (float): Refers to the eccentricity of the resultant of shear
164
- forces with respect to the centroid.
165
- inner (bool): Is true only if the column is a inner column.
166
- edge_par (bool): Is true only if the column is a edge column with
167
- tension reinforcement parallel to the edge.
168
- edge_per (bool): Is true only if the column is a edge column with
169
- tension reinforcement perpendicular to the edge.
170
- corner (bool): Is true only if the column is a corner column.
171
- m_rd (float): The design average strength per unit length in MPa.
172
- m_pd: (float): The average decompresstion moment due to prestressing
173
- in MPa.
174
- v_prep_d_max (float): The maximum shear force per unit length
175
- perpendicular to the basic control parameter (Figure 7.3-24).
307
+ f_ck (float): Characteristic strength in MPa.
176
308
  gamma_c: Safety factor for concrete.
177
309
 
178
310
  Returns:
179
311
  float: v_rdc for punching with the right approx level.
180
312
  """
181
- k_dg = max(32 / (16 + dg), 0.75)
182
- k_psi = min(
183
- 1
184
- / (
185
- 1.5
186
- + 0.9
187
- * k_dg
188
- * d
189
- * psi_punching(
190
- l_x,
191
- l_y,
192
- f_yd,
193
- d,
194
- e_s,
195
- approx_lvl_p,
196
- v_ed,
197
- e_u,
198
- inner,
199
- edge_par,
200
- edge_per,
201
- corner,
202
- m_rd,
203
- m_pd,
204
- )
205
- ),
206
- 0.6,
313
+ return k_psi_val * b_0 * d_v * (f_ck**0.5) / gamma_c
314
+
315
+
316
+ def f_ywd(
317
+ f_ywk: float,
318
+ gamma_s: float,
319
+ ) -> float:
320
+ """Calculate f_ywd for punching resistance.
321
+
322
+ fib Model Code 2010, Eq. (7.3-64).
323
+
324
+ Args:
325
+ f_ywk (float): Characteristic yield strength of the shear reinforcement
326
+ in MPa.
327
+ gamma_s (float): Safety factor for reinforcement.
328
+
329
+ Returns:
330
+ float: f_ywd for punching resistance.
331
+ """
332
+ return f_ywk / gamma_s
333
+
334
+
335
+ def sigma_swd(
336
+ e_s: float,
337
+ psi_punching: float,
338
+ alpha: float,
339
+ f_bd: float,
340
+ d_eff: float,
341
+ f_ywd: float,
342
+ phi_w: float,
343
+ ) -> float:
344
+ """Calculate sigma_swd for punching resistance.
345
+
346
+ fib Model Code 2010, Eq. (7.3-65).
347
+
348
+ Args:
349
+ e_s (float): The E_modulus for steel in MPa.
350
+ psi_punching (float): psi value from psi_punching.
351
+ alpha (float): Inclination of the stirrups in degrees.
352
+ f_bd (float): The design bond strength in MPa.
353
+ d_eff (float): The mean value of the effective depth in mm.
354
+ f_ywd (float): Design yield strength of the shear reinforcement in MPa.
355
+ phi_w (float): The diameter of the shear reinforcement.
356
+
357
+ Returns:
358
+ float: sigma_swd.
359
+ """
360
+ return min(
361
+ (e_s * psi_punching / 6)
362
+ * (sin(alpha * pi / 180) + cos(alpha * pi / 180))
363
+ * (sin(alpha * pi / 180) + f_bd * d_eff / (f_ywd * phi_w)),
364
+ f_ywd,
207
365
  )
208
- return k_psi * b_0(v_ed, v_prep_d_max) * d_v * (f_ck**0.5) / gamma_c
209
366
 
210
367
 
211
368
  def v_rds_punching(
369
+ f_ywd: float,
212
370
  e_u: float,
213
371
  b_u: float,
214
- l_x: float,
215
- l_y: float,
216
- f_yd: float,
217
- d: float,
218
- e_s: float,
219
- approx_lvl_p: float,
220
- v_ed: float,
221
- inner: bool,
222
- edge_par: bool,
223
- edge_per: bool,
224
- corner: bool,
225
- m_rd: float,
226
- m_pd: float,
227
372
  alpha: float,
228
- f_bd: float,
229
- f_ywk: float,
230
- phi_w: float,
373
+ sigma_swd: float,
231
374
  a_sw: float,
232
- gamma_s: float,
233
- ):
375
+ v_ed: float,
376
+ ) -> float:
234
377
  """The punching resistance from shear reinforcement.
235
378
 
236
- fib Model Code 2010, eq. (7.3-64) and (7.3-65).
379
+ fib Model Code 2010, Eq. (7.3-64).
237
380
 
238
381
  Args:
239
- e_u (float): The ecentrisity of the result of shear forces
240
- with respect to the centroid (Figure 7.3-27b).
382
+ f_ywd (float): Design yield strength of the shear reinforcement in MPa.
383
+ e_u (float): The ecentrisity of the result of shear forces with respect
384
+ to the centroid (Figure 7.3-27b).
241
385
  b_u (float): The diamter of a circle with same surface as the region
242
386
  inside the basic control perimeter (Figure 7.3-27b).
243
- l_x (float): The distance between two columns in x direction.
244
- l_y (float): The distance between two columns in y direction.
245
- f_yd (float): Design strength of reinforment steel in MPa.
246
- d (float): The mean value of the effective depth in mm.
247
- e_s (float): The E_modulus for steel in MPa.
248
- approx_lvl_p (float): The approx level for punching.
249
- v_ed (float): The acting shear force from the columns.
250
- inner (bool): Is true only if the column is a inner column.
251
- edge_par (bool): Is true only if the column is a edge column with
252
- tension reinforcement parallel to the edge.
253
- edge_per (bool): Is true only if the column is a edge column with
254
- tension reinforcement perpendicular to the edge.
255
- corner (bool): Is true only if the column is a corner column.
256
- m_rd (float): The design average strength per unit length in MPa.
257
- m_pd: (float): The average decompresstion moment due to prestressing in
258
- MPa.
259
387
  alpha (float): Inclination of the stirrups in degrees.
260
- f_bd (float): The design bond strength in MPa.
261
- f_ywk (float): Characteristic yield strength of the shear reinforcement
262
- in MPa.
263
- phi_w (float): The diameter of the shear reinforcement.
388
+ sigma_swd (float): sigma_swd from sigma_swd.
264
389
  a_sw (float): The area of the shear reinforcement in mm^2.
265
- gamma_s (float): Safety factor for reinforcement.
390
+ v_ed (float): The acting shear force from the columns.
266
391
 
267
392
  Returns:
268
393
  float: Punching resistance that comes from reinforcement.
269
394
  """
270
- f_ywd = f_ywk / gamma_s
271
395
  k_e = 1 / (1 + e_u / b_u)
272
- sigma_swd = min(
273
- (
274
- e_s
275
- * psi_punching(
276
- l_x,
277
- l_y,
278
- f_yd,
279
- d,
280
- e_s,
281
- approx_lvl_p,
282
- v_ed,
283
- e_u,
284
- inner,
285
- edge_par,
286
- edge_per,
287
- corner,
288
- m_rd,
289
- m_pd,
290
- )
291
- / 6
292
- )
293
- * (sin(alpha * pi / 180) + cos(alpha * pi / 180))
294
- * (sin(alpha * pi / 180) + f_bd * d / (f_ywd * phi_w)),
295
- f_ywd,
296
- )
297
-
298
396
  if (a_sw * k_e * f_ywd) < 0.5 * v_ed:
299
397
  warnings.warn(
300
- """In order to ensure sufficent deformation capacity,
301
- consider increasing the amount of punching shear reinforcement"""
398
+ 'Consider increasing punching shear reinforcement for sufficient '
399
+ 'deformation capacity'
302
400
  )
303
401
  return a_sw * k_e * sigma_swd * sin(alpha * pi / 180)
304
402
 
305
403
 
306
404
  def v_rd_max_punching(
307
- l_x: float,
308
- l_y: float,
309
- f_yd: float,
310
- d: float,
311
- e_s: float,
312
- approx_lvl_p: float,
313
- v_ed: float,
314
- e_u: float,
315
- inner: bool,
316
- edge_par: bool,
317
- edge_per: bool,
318
- dg: float,
319
- corner: bool,
320
- m_rd: float,
321
- m_pd: float,
322
- v_prep_d_max: float,
323
405
  d_v: float,
324
406
  f_ck: float,
325
407
  d_head: bool,
326
408
  stirrups_compression: bool,
409
+ b0_val: float,
410
+ k_psi_val: float,
327
411
  gamma_c: float = 1.5,
328
412
  ) -> float:
329
413
  """Finds the maximum value you can have for v_rd_punching.
330
414
 
331
- fib Model Code 2010, eq. (7.3-68) and (7.3-69).
415
+ fib Model Code 2010, Eq. (7.3-69).
332
416
 
333
417
  Args:
334
- l_x (float): The distance between two columns in x direction.
335
- l_y (float): The distance between two columns in y direction.
336
- f_yd (float): Design strength of reinforment steel in MPa.
337
- d (float): The mean value of the effective depth in mm.
338
- e_s (float): The E_modulus for steel in MPa.
339
- approx_lvl_p (float): The approx level for punching.
340
- v_ed (float): The acting shear force from the columns.
341
- e_u (float): Refers to the eccentricity of the resultant of shear
342
- forces with respect to the centroid.
343
- inner (bool): Is true only if the column is a inner column.
344
- edge_par (bool): Is true only if the column is a edge column with
345
- tension reinforcement parallel to the edge.
346
- edge_per (bool): Is true only if the column is a edge column with
347
- tension reinforcement perpendicular to the edge.
348
- dg (float): Maximum size of aggregate.
349
- corner (bool): Is true only if the column is a corner column.
350
- m_rd (float): The design average strength per unit length in MPa.
351
- m_pd: (float): The average decompresstion moment due to prestressing in
352
- MPa.
353
- v_prep_d_max (float): The maximum shear force per unit length
354
- perpendiculerer to the basic control parameter (Figure 7.3-24).
355
418
  d_v (float): The effective depth considering support in mm.
356
419
  f_ck (float): Characteristic strength in MPa.
357
420
  d_head (bool): True if diameter of heads is three times larger than.
358
421
  stirrups_compression: (bool): Stirrups with sufficient length at
359
422
  compression face, and bent on tension face.
423
+ b0_val (float): The shear-resisting control perimeter from b_0.
424
+ k_psi_val (float): k_psi value from k_psi.
360
425
  gamma_c (float): Safety factor for concrete.
361
426
 
362
427
  Return:
@@ -369,175 +434,22 @@ def v_rd_max_punching(
369
434
  else:
370
435
  k_sys = 2
371
436
 
372
- k_dg = max(32 / (16 + dg), 0.75)
373
- k_psi = min(
374
- 1
375
- / (
376
- 1.5
377
- + 0.9
378
- * k_dg
379
- * d
380
- * psi_punching(
381
- l_x,
382
- l_y,
383
- f_yd,
384
- d,
385
- e_s,
386
- approx_lvl_p,
387
- v_ed,
388
- e_u,
389
- inner,
390
- edge_par,
391
- edge_per,
392
- corner,
393
- m_rd,
394
- m_pd,
395
- )
396
- ),
397
- 0.6,
398
- )
399
- return min(
400
- (k_sys * k_psi * b_0(v_ed, v_prep_d_max) * d_v * f_ck**0.5) / gamma_c,
401
- (b_0(v_ed, v_prep_d_max) * d_v * f_ck**0.5) / gamma_c,
402
- )
437
+ base_resistance = b0_val * d_v * (f_ck**0.5 / gamma_c)
403
438
 
439
+ return min(k_sys * k_psi_val * base_resistance, base_resistance)
404
440
 
405
- def v_rd_punching(
406
- e_u: float,
407
- b_u: float,
408
- l_x: float,
409
- l_y: float,
410
- f_yd: float,
411
- d: float,
412
- e_s: float,
413
- approx_lvl_p: float,
414
- v_ed: float,
415
- inner: bool,
416
- edge_par: bool,
417
- edge_per: bool,
418
- corner: bool,
419
- m_rd: float,
420
- m_pd: float,
421
- alpha: float,
422
- f_bd: float,
423
- f_ywk: float,
424
- phi_w: float,
425
- a_sw: float,
426
- dg: float,
427
- f_ck: float,
428
- d_v: float,
429
- v_prep_d_max: float,
430
- d_head: bool,
431
- stirrups_compression: bool,
432
- gamma_c: float = 1.5,
433
- gamma_s: float = 1.15,
434
- ) -> float:
435
- """The total resistance for punching, both Vrd,c and Vrd,s.
436
441
 
437
- fib Model Code 2010, eq. (7.3-60).
442
+ def v_rd_punching(v_rd_c: float, v_rd_s: float, v_rd_max: float) -> float:
443
+ """The total resistance for punching.
444
+
445
+ fib Model Code 2010, Eq. (7.3-60).
438
446
 
439
447
  Args:
440
- e_u (float): The ecentrisity of the result of shear forces with respect
441
- to the centroid (Figure 7.3-27b).
442
- b_u (float): The diamter of a circle with same surface as the region
443
- inside the basic control perimeter (Figure 7.3-27b).
444
- l_x (float): The distance between two columns in x direction.
445
- l_y (float): The distance between two columns in y direction.
446
- f_yd (float): Design strength of reinforment steel in MPa.
447
- d (float): The mean value of the effective depth in mm.
448
- e_s (float): The E_modulus for steel in MPa.
449
- approx_lvl_p (float): The approx level for punching.
450
- v_ed (float): The acting shear force from the columns.
451
- inner (bool): Is true only if the column is a inner column.
452
- edge_par (bool): Is true only if the column is a edge column with
453
- tension reinforcement parallel to the edge.
454
- edge_per (bool): Is true only if the column is a edge column with
455
- tension reinforcement perpendicular to the edge.
456
- corner (bool): Is true only if the column is a corner column.
457
- m_rd (float): The design average strength per unit length in MPa.
458
- m_pd: (float): The average decompresstion moment due to prestressing in
459
- MPa.
460
- alpha (float): Inclination of the stirrups in degrees.
461
- f_bd (float): The design bond strength in MPa.
462
- f_ywk (float): Characteristic yield strength of the shear reinforcement
463
- in MPa.
464
- phi_w (float): The diameter of the shear reinforcement.
465
- a_sw (float): The area of the shear reinforcement in mm^2.
466
- dg (float): Maximum size of aggregate.
467
- f_ck (float): Characteristic strength in MPa.
468
- d_v (float): The effective depth considering support in mm.
469
- v_prep_d_max (float): The maximum shear force per unit length
470
- perpendicular to the basic control parameter (Figure 7.3-24).
448
+ v_rd_c: Concrete contribution to punching resistance.
449
+ v_rd_s: Shear reinforcement contribution to punching resistance.
450
+ v_rd_max: Maximum punching resistance.
471
451
 
472
- Return:
473
- float: The maximum allowed punching resistance, regardless of values
474
- from v_rdc and v_rds.
452
+ Returns:
453
+ float: Total punching resistance as min(v_rd_c + v_rd_s, v_rd_max).
475
454
  """
476
- return min(
477
- v_rdc_punching(
478
- l_x,
479
- l_y,
480
- f_yd,
481
- d,
482
- e_s,
483
- approx_lvl_p,
484
- dg,
485
- f_ck,
486
- d_v,
487
- v_ed,
488
- e_u,
489
- inner,
490
- edge_par,
491
- edge_per,
492
- corner,
493
- m_rd,
494
- v_prep_d_max,
495
- gamma_c,
496
- )
497
- + v_rds_punching(
498
- e_u,
499
- b_u,
500
- l_x,
501
- l_y,
502
- f_yd,
503
- d,
504
- e_s,
505
- approx_lvl_p,
506
- v_ed,
507
- inner,
508
- edge_par,
509
- edge_per,
510
- corner,
511
- m_rd,
512
- m_pd,
513
- alpha,
514
- f_bd,
515
- f_ywk,
516
- phi_w,
517
- a_sw,
518
- gamma_s,
519
- ),
520
- v_rd_max_punching(
521
- l_x,
522
- l_y,
523
- f_yd,
524
- d,
525
- e_s,
526
- approx_lvl_p,
527
- v_ed,
528
- e_u,
529
- inner,
530
- edge_par,
531
- edge_per,
532
- dg,
533
- corner,
534
- m_rd,
535
- m_pd,
536
- v_prep_d_max,
537
- d_v,
538
- f_ck,
539
- d_head,
540
- stirrups_compression,
541
- gamma_c,
542
- ),
543
- )
455
+ return min(v_rd_c + v_rd_s, v_rd_max)