kib-lap 0.5__cp313-cp313-win_amd64.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.
Files changed (64) hide show
  1. Examples/Cross_Section_Thin.py +61 -0
  2. Examples/__init__.py +0 -0
  3. KIB_LAP/Betonbau/Bemessung_Polygon.py +667 -0
  4. KIB_LAP/Betonbau/Bemessung_Zust_II.py +648 -0
  5. KIB_LAP/Betonbau/Cross_Section_Kappa.py +925 -0
  6. KIB_LAP/Betonbau/Druckglied_KGV.py +179 -0
  7. KIB_LAP/Betonbau/Iterative_Design.py +723 -0
  8. KIB_LAP/Betonbau/Materialkennwerte_Beton.py +196 -0
  9. KIB_LAP/Betonbau/Querschnittsbreite.py +194 -0
  10. KIB_LAP/Betonbau/Querschnittsbreite_Kreis.py +63 -0
  11. KIB_LAP/Betonbau/__init__.py +2 -0
  12. KIB_LAP/Betonbau/beam_plate_T.py +921 -0
  13. KIB_LAP/Betonbau/beam_plate_T_reverse.py +915 -0
  14. KIB_LAP/Betonbau/beam_rectangular.py +635 -0
  15. KIB_LAP/Betonbau/beam_sub_section.py +9 -0
  16. KIB_LAP/Dynamik/Cross_Section_Properties.py +155 -0
  17. KIB_LAP/Dynamik/Deformation_Method.py +587 -0
  18. KIB_LAP/Dynamik/Duhamel_SDOF.py +221 -0
  19. KIB_LAP/Dynamik/FFT.py +87 -0
  20. KIB_LAP/Dynamik/Kontinuum_Eigenmodes.py +418 -0
  21. KIB_LAP/Dynamik/Kontinuum_Schwingung.py +757 -0
  22. KIB_LAP/Dynamik/Pendulum_Spring_Linearized.py +91 -0
  23. KIB_LAP/Dynamik/Pendulum_Spring_Problem.py +94 -0
  24. KIB_LAP/Dynamik/__init__.py +0 -0
  25. KIB_LAP/Examples/Cross_Section_Thin.py +61 -0
  26. KIB_LAP/Examples/Cross_Section_Thin_2.py +14 -0
  27. KIB_LAP/Examples/Plattentragwerke.py +39 -0
  28. KIB_LAP/Examples/Plattentragwerke_2.py +60 -0
  29. KIB_LAP/Examples/ShearDesign.py +28 -0
  30. KIB_LAP/Examples/__init__.py +0 -0
  31. KIB_LAP/Plattenbeulen/Plate_Design.py +276 -0
  32. KIB_LAP/Plattenbeulen/Ritz_Optimiert.py +658 -0
  33. KIB_LAP/Plattenbeulen/__init__.py +2 -0
  34. KIB_LAP/Plattenbeulen/dist/__init__.py +0 -0
  35. KIB_LAP/Plattenbeulen/plate_buckling.cpp +561 -0
  36. KIB_LAP/Plattenbeulen/plate_buckling_cpp.cp313-win_amd64.pyd +0 -0
  37. KIB_LAP/Plattenbeulen/plate_buckling_cpp.cpp +561 -0
  38. KIB_LAP/Plattenbeulen/setup.py +35 -0
  39. KIB_LAP/Plattentragwerke/Functions.cpp +326 -0
  40. KIB_LAP/Plattentragwerke/Functions.h +41 -0
  41. KIB_LAP/Plattentragwerke/NumInte.cpp +23 -0
  42. KIB_LAP/Plattentragwerke/NumericalIntegration.cpp +23 -0
  43. KIB_LAP/Plattentragwerke/PlateBendingKirchhoff.py +843 -0
  44. KIB_LAP/Plattentragwerke/__init__.py +1 -0
  45. KIB_LAP/Plattentragwerke/plate_bending.cpp +341 -0
  46. KIB_LAP/Plattentragwerke/plate_bending_cpp.cp313-win_amd64.pyd +0 -0
  47. KIB_LAP/Plattentragwerke/setup.py +39 -0
  48. KIB_LAP/Querschnittswerte/Querschnitt_Duenn.py +526 -0
  49. KIB_LAP/Querschnittswerte/__init__.py +1 -0
  50. KIB_LAP/STABRAUM/InputData.py +92 -0
  51. KIB_LAP/STABRAUM/Programm.py +1403 -0
  52. KIB_LAP/STABRAUM/Steifigkeitsmatrix.py +275 -0
  53. KIB_LAP/STABRAUM/__init__.py +3 -0
  54. KIB_LAP/Stahlbau/__init__.py +0 -0
  55. KIB_LAP/Verbundbau/Verbundtraeger_Bemessung.py +766 -0
  56. KIB_LAP/Verbundbau/__init__.py +0 -0
  57. KIB_LAP/__init__.py +4 -0
  58. KIB_LAP/main.py +2 -0
  59. KIB_LAP/plate_bending_cpp.cp313-win_amd64.pyd +0 -0
  60. KIB_LAP/plate_buckling_cpp.cp313-win_amd64.pyd +0 -0
  61. kib_lap-0.5.dist-info/METADATA +25 -0
  62. kib_lap-0.5.dist-info/RECORD +64 -0
  63. kib_lap-0.5.dist-info/WHEEL +5 -0
  64. kib_lap-0.5.dist-info/top_level.txt +1 -0
@@ -0,0 +1,921 @@
1
+ import numpy as np
2
+ from scipy.integrate import simpson as simps
3
+ import math
4
+
5
+
6
+ class BeamPlateT:
7
+
8
+ def __init__(self, index, width_web, height, width_effective, height_plate):
9
+ self.index = index
10
+ self.width_web = width_web
11
+ self.height = height
12
+ self.width_effective = width_effective
13
+ self.height_plate = height_plate
14
+ self.cross_section_area = width_web * (height - height_plate) + height_plate * width_effective
15
+ self.center_of_gravity = ((height_plate * width_effective) * (height_plate / 2) + (width_web * (height - height_plate)) * (height_plate + (height - height_plate) / 2)) / ((height_plate * width_effective) + (width_web * (height - height_plate)))
16
+ self.cross_section_inertia = (((width_effective * height_plate ** 3) / 12) + (width_effective * height_plate) * (self.center_of_gravity - height_plate / 2) ** 2) + (((width_web * (height - height_plate) ** 3) / 12) + (width_web * (height - height_plate)) * ((height - height_plate) / 2 + height_plate - self.center_of_gravity) ** 2)
17
+
18
+ def check_if_beam_is_suitable_for_bending_calc(self, ed_i):
19
+ check = ed_i/self.height
20
+ return check
21
+
22
+ def calculate_beam_section(self, beam_sub_section, strength_of_concrete, tensile_yield_strength, nu_limit):
23
+ M = beam_sub_section.moment_ed # Mnm
24
+ N_f = beam_sub_section.normal_force_ed # Mn
25
+
26
+ Mrds = 0
27
+ Meds = 0
28
+ Meds_lim = 0
29
+
30
+ nu_eds = 0
31
+ nu_eds_grenz = nu_limit # 0.371 # 0.296
32
+
33
+ fcd = strength_of_concrete # N/mm²
34
+ fyd = tensile_yield_strength # MN/m²
35
+ E = beam_sub_section.elasticity_modulus_steel # MN/m²
36
+ fck = (fcd * 1.5) / 0.85
37
+ fctm = 0.3 * fck ** (2 / 3)
38
+ fyk = fyd * 1.15
39
+
40
+ epssyd = (fyd / E) * 1000
41
+
42
+ As1erf = 0 # cm²
43
+ As2erf = 0 # cm² Druckbewehrung
44
+ # Geometrie
45
+ h = self.height # gesamt Höhe
46
+ b_eff = self.width_effective # effective Breite
47
+ b_w = self.width_web # Stegbreite
48
+ h_f = self.height_plate # Plattenbalkenhöhe
49
+
50
+ zs1 = self.center_of_gravity # Schwerpunkt
51
+
52
+ d = beam_sub_section.effective_height
53
+ d2 = beam_sub_section.effective_height_pressure
54
+
55
+ # Startwerte der Dehnungen und Stauchungen
56
+ epss = 25
57
+ steal_strain_1 = 0 # Falls Druckbewehrung, hier die neue Stahldehnung
58
+ epss2 = 0
59
+ epsc = 0.0001 # Darf nicht 0 sein, da sonst Teilung durch 0 in der Berechnung der Schwerpunkte -> Start mit 0,001
60
+
61
+ epss_new = 0
62
+ epss_2_new = 0
63
+
64
+ num_iter = 0
65
+ num_iter_grenz = 30000
66
+
67
+ N = 50 # Numerische Integration der Spannungen ueber die Hoehe
68
+
69
+ xi = 0
70
+ x = 0
71
+ z = 0
72
+
73
+ # KENNWERTE
74
+ # Querschnittslängen
75
+ interval_start_1 = 0
76
+ interval_end_1 = 0
77
+ interval_start_2 = 0
78
+ interval_end_2 = 0
79
+ interval_start_3 = 0
80
+ interval_end_3 = 0
81
+ # Querschnittsbreiten
82
+ concrete_width_1 = 0
83
+ concrete_width_2 = 0
84
+ concrete_width_3 = 0
85
+ # Druckkräfte und Schwerpunkte
86
+ A_1 = 0
87
+ S_1 = 0
88
+ A_2 = 0
89
+ S_2 = 0
90
+ A_3 = 0
91
+ S_3 = 0
92
+ while (Mrds <= abs(Meds) and num_iter < num_iter_grenz):
93
+ xi = epsc / (epsc + epss)
94
+ x = xi * d
95
+
96
+
97
+ # Stahl fließt nicht
98
+ if epss < epssyd:
99
+ sigma_s = E * epss * 0.001
100
+ # Stahl fließt
101
+ else:
102
+ sigma_s = fyd
103
+
104
+ # Feldmoment
105
+ if M >= 0:
106
+ # Druckzone liegt im Flansch -> Nullline im Flansch
107
+ if (x <= h_f):
108
+ # Grenzdehnung von 2 wird nicht erreicht
109
+ if (0 <= epsc < 2.0):
110
+ # Querschnittslängen Vergabe
111
+ interval_start_1 = 0
112
+ interval_end_1 = x
113
+ interval_start_2 = 0
114
+ interval_end_2 = 0
115
+ interval_start_3 = 0
116
+ interval_end_3 = 0
117
+ # Querschnittsbreiten Vergabe
118
+ concrete_width_1 = b_eff
119
+ concrete_width_2 = 0
120
+ concrete_width_3 = 0
121
+ # Grenzdehnung von 2 wird im Flansch erreicht
122
+ elif (2 / epsc * x <= h_f):
123
+ # Querschnittslängen Vergabe
124
+ interval_start_1 = 0
125
+ interval_end_1 = 2 / epsc * x # 2 = Dehnung beim Erreichen der Druckfestigkeit
126
+ interval_start_2 = 2 / epsc * x
127
+ interval_end_2 = x
128
+ interval_start_3 = 0
129
+ interval_end_3 = 0
130
+ # Querschnittsbreiten Vergabe
131
+ concrete_width_1 = b_eff
132
+ concrete_width_2 = b_eff
133
+ concrete_width_3 = 0
134
+
135
+ # Abgrenzen der einzlnen Bereichsunterschiede
136
+ x1 = np.linspace(interval_start_1, interval_end_1, N)
137
+ x2 = np.linspace(interval_start_2, interval_end_2, N)
138
+ x3 = np.linspace(interval_start_3, interval_end_3, N)
139
+
140
+ # Definition der Spannungsfunktionen
141
+ y1 = []
142
+ y2 = []
143
+ y3 = []
144
+ # Grenzdehnung von 2 wird nicht erreicht
145
+ if (0 <= epsc < 2.0):
146
+ y1_list_with_all_sigma_c_values_promille = []
147
+ for i in range(N):
148
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (x * 2))) ** 2)
149
+
150
+ y1_list_with_all_sigma_c_values_promille.append(sigma_c)
151
+
152
+ y1_values = y1_list_with_all_sigma_c_values_promille
153
+ y2_values = fcd * np.zeros(N)
154
+ y3_values = fcd * np.zeros(N)
155
+
156
+ y1.append(y1_values)
157
+ y2.append(y2_values)
158
+ y3.append(y3_values)
159
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
160
+ elif (2 / epsc * x <= h_f):
161
+ y1_list_with_all_sigma_c_values_upto_2_promille = []
162
+ for i in range(N):
163
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (
164
+ x * 2))) ** 2) # Sigma c-Werte bis zum Erreichen der Druckfestigkeit -> Betondehnung = 2
165
+
166
+ y1_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c)
167
+
168
+ y1_values = y1_list_with_all_sigma_c_values_upto_2_promille # sigma_concrete_at_given_intervals(x1)
169
+ y2_values = fcd * np.ones(N)
170
+ y3_values = fcd * np.zeros(N)
171
+
172
+ y1.append(y1_values)
173
+ y2.append(y2_values)
174
+ y3.append(y3_values)
175
+
176
+ # Integration der einzelnen Spannungsfunktionen
177
+ # Grenzdehnung von 2 wird nicht erreicht
178
+ if (0 <= epsc < 2.0):
179
+ M_1 = simps(y1 * x1, x = x1)
180
+ A_1 = simps(y1, x = x1)
181
+ S_1 = M_1 / A_1
182
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
183
+ elif (2 / epsc * x <= h_f):
184
+ M_1 = simps(y1 * x1, x = x1) # moment 1
185
+ A_1 = simps(y1, x = x1) # pressure force 1
186
+ S_1 = M_1 / A_1 # centroid of area 1
187
+
188
+ M_2 = simps(y2 * x2, x = x2)
189
+ A_2 = simps(y2, x = x2)
190
+ S_2 = M_2 / A_2
191
+
192
+ # concrete pressure
193
+ Fc_1 = A_1 * concrete_width_1
194
+ Fc_2 = A_2 * concrete_width_2
195
+ Fc_3 = 0
196
+
197
+ # centroid of compressive stress in concrete
198
+ S_ges = (S_1 * Fc_1 + S_2 * Fc_2 + S_3 * Fc_3) / (
199
+ Fc_1 + Fc_2 + Fc_3) # Bei der Berechnung der Gesamtschwerpunkte der Druckkraefte muss die Querschnittsbreite der einzelnen Querschnitte einfliessen
200
+ z = S_ges + d - x # Innerer Hebelarm
201
+
202
+ Meds = abs(M - N_f * (d - zs1))
203
+ Mrds = (Fc_1 + Fc_2 + Fc_3) * z
204
+
205
+ nu_eds = Meds / (b_eff * (d ** 2) * fcd)
206
+ if nu_eds_grenz <= nu_eds:
207
+ Meds_lim = nu_eds_grenz * b_eff * (d ** 2) * fcd
208
+
209
+ zeta_lim = 0
210
+ concrete_strain_2 = 3.5
211
+ if nu_eds_grenz == 0.296:
212
+ zeta_lim = 0.813
213
+ steal_strain_1 = 4.28
214
+ elif nu_eds_grenz == 0.371:
215
+ zeta_lim = 0.743
216
+ steal_strain_1 = 2.174
217
+
218
+ #epss2 = ((x - d2) / x) * abs(-3.5)
219
+ epss2 = ((steal_strain_1 + concrete_strain_2) / d) * (d - d2) - steal_strain_1
220
+
221
+ sigma_s_2 = 0
222
+ if epssyd <= epss2:
223
+ sigma_s_2 = fyd
224
+ elif epss2 < epssyd:
225
+ sigma_s_2 = fyd * (epss / epssyd)
226
+
227
+ z_nu_eds_grenz = zeta_lim * d
228
+
229
+ delta_Med = abs(M) - Meds_lim
230
+ As1erf_nu_lim = (1 / fyd) * (Meds_lim / z_nu_eds_grenz + N_f) * 100 ** 2
231
+ As2erf = (1 / sigma_s_2) * (delta_Med / (d - d2)) * 100 ** 2
232
+ As1erf = As1erf_nu_lim + As2erf
233
+ else:
234
+ As1erf = (1 / sigma_s) * (Fc_1 + Fc_2 + Fc_3 + N_f) * 100 ** 2
235
+
236
+ if (0 <= epsc < 3.5):
237
+ epsc += 0.001
238
+
239
+ else:
240
+ epss -= 0.001
241
+
242
+ num_iter += 1
243
+ # Druckzone im Steg und Flasch -> Nullline im Steg
244
+ elif (x > h_f):
245
+ # Grenzdehnung von 2 wird nicht erreicht
246
+ if (0 <= epsc < 2.0):
247
+ # Querschnittslängen Vergabe
248
+ interval_start_1 = 0
249
+ interval_end_1 = x - h_f
250
+ interval_start_2 = x - h_f
251
+ interval_end_2 = x
252
+ interval_start_3 = 0
253
+ interval_end_3 = 0
254
+ # Querschnittsbreiten Vergabe
255
+ concrete_width_1 = b_w
256
+ concrete_width_2 = b_eff
257
+ concrete_width_3 = 0
258
+ # Grenzdehnung von 2 wird schon im STEG erreicht
259
+ elif (2 / epsc * x <= x - h_f):
260
+ # Querschnittslängen Vergabe
261
+ interval_start_1 = 0
262
+ interval_end_1 = 2 / epsc * x # 2 = Dehnung beim Erreichen der Druckfestigkeit
263
+ interval_start_2 = 2 / epsc * x
264
+ interval_end_2 = x - h_f
265
+ interval_start_3 = x - h_f
266
+ interval_end_3 = x
267
+ # Querschnittsbreiten Vergabe
268
+ concrete_width_1 = b_w
269
+ concrete_width_2 = b_w
270
+ concrete_width_3 = b_eff
271
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
272
+ elif (2 / epsc * x > x - h_f):
273
+ # Querschnittslängen Vergabe
274
+ interval_start_1 = 0
275
+ interval_end_1 = x - h_f
276
+ interval_start_2 = x - h_f
277
+ interval_end_2 = 2 / epsc * x
278
+ interval_start_3 = 2 / epsc * x
279
+ interval_end_3 = x
280
+ # Querschnittsbreiten Vergabe
281
+ concrete_width_1 = b_w
282
+ concrete_width_2 = b_eff
283
+ concrete_width_3 = b_eff
284
+
285
+ # Abgrenzen der einzlnen Bereichsunterschiede
286
+ x1 = np.linspace(interval_start_1, interval_end_1, N)
287
+ x2 = np.linspace(interval_start_2, interval_end_2, N)
288
+ x3 = np.linspace(interval_start_3, interval_end_3, N)
289
+
290
+ # Definition der Spannungsfunktionen
291
+ y1 = []
292
+ y2 = []
293
+ y3 = []
294
+ # Grenzdehnung von 2 wird nicht erreicht
295
+ if (0 <= epsc < 2.0):
296
+ y1_list_with_all_sigma_c_values_promille = []
297
+ y2_list_with_all_sigma_c_values_upto_2_promille = []
298
+ for i in range(N):
299
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (x * 2))) ** 2)
300
+ sigma_c_2 = fcd * (1 - (1 - ((x2[i] * epsc) / (x * 2))) ** 2)
301
+
302
+ y1_list_with_all_sigma_c_values_promille.append(sigma_c)
303
+ y2_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c_2)
304
+
305
+ y1_values = y1_list_with_all_sigma_c_values_promille
306
+ y2_values = y2_list_with_all_sigma_c_values_upto_2_promille
307
+ y3_values = fcd * np.zeros(N)
308
+
309
+ y1.append(y1_values)
310
+ y2.append(y2_values)
311
+ y3.append(y3_values)
312
+ # Grenzdehnung von 2 wird im STEG erreicht
313
+ elif (2 / epsc * x <= x - h_f):
314
+ y1_list_with_all_sigma_c_values_upto_2_promille = []
315
+ for i in range(N):
316
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (
317
+ x * 2))) ** 2) # Sigma c-Werte bis zum Erreichen der Druckfestigkeit -> Betondehnung = 2
318
+
319
+ y1_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c)
320
+
321
+ y1_values = y1_list_with_all_sigma_c_values_upto_2_promille # sigma_concrete_at_given_intervals(x1)
322
+ y2_values = fcd * np.ones(N)
323
+ y3_values = fcd * np.ones(N)
324
+
325
+ y1.append(y1_values)
326
+ y2.append(y2_values)
327
+ y3.append(y3_values)
328
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
329
+ elif (2 / epsc * x > x - h_f):
330
+ y1_list_with_all_sigma_c_values_promille = []
331
+ y2_list_with_all_sigma_c_values_upto_2_promille = []
332
+ for i in range(N):
333
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (x * 2))) ** 2)
334
+ sigma_c_2 = fcd * (1 - (1 - ((x2[i] * epsc) / (x * 2))) ** 2)
335
+
336
+ y1_list_with_all_sigma_c_values_promille.append(sigma_c)
337
+ y2_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c_2)
338
+
339
+ y1_values = y1_list_with_all_sigma_c_values_promille
340
+ y2_values = y2_list_with_all_sigma_c_values_upto_2_promille
341
+ y3_values = fcd * np.ones(N)
342
+
343
+ y1.append(y1_values)
344
+ y2.append(y2_values)
345
+ y3.append(y3_values)
346
+
347
+ # Integration der einzelnen Spannungsfunktionen
348
+ # Grenzdehnung von 2 wird nicht erreicht
349
+ if (0 <= epsc < 2.0):
350
+ M_1 = simps(y1 * x1, x = x1)
351
+ A_1 = simps(y1, x = x1)
352
+ S_1 = M_1 / A_1
353
+
354
+ M_2 = simps(y2 * x2, x = x2)
355
+ A_2 = simps(y2, x = x2)
356
+ S_2 = M_2 / A_2
357
+ # Grenzdehnung von 2 wird im STEG erreicht
358
+ elif (2 / epsc * x <= x - h_f):
359
+ M_1 = simps(y1 * x1, x = x1) # moment 1
360
+ A_1 = simps(y1, x = x1) # pressure force 1
361
+ S_1 = M_1 / A_1 # centroid of area 1
362
+
363
+ M_2 = simps(y2 * x2, x = x2)
364
+ A_2 = simps(y2, x = x2)
365
+ S_2 = M_2 / A_2
366
+
367
+ M_3 = simps(y3 * x3, x3)
368
+ A_3 = simps(y3, x3)
369
+ S_3 = M_3 / A_3
370
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
371
+ elif (2 / epsc * x > x - h_f):
372
+ M_1 = simps(y1 * x1, x = x1)
373
+ A_1 = simps(y1, x = x1)
374
+ S_1 = M_1 / A_1
375
+
376
+ M_2 = simps(y2 * x2, x = x2)
377
+ A_2 = simps(y2, x = x2)
378
+ S_2 = M_2 / A_2
379
+
380
+ M_3 = simps(y3 * x3, x = x3)
381
+ A_3 = simps(y3, x = x3)
382
+ S_3 = M_3 / A_3
383
+
384
+ # concrete pressure
385
+ Fc_1 = A_1 * concrete_width_1
386
+ Fc_2 = A_2 * concrete_width_2
387
+ Fc_3 = A_3 * concrete_width_3
388
+
389
+ # centroid of compressive stress in concrete
390
+ S_ges = (S_1 * Fc_1 + S_2 * Fc_2 + S_3 * Fc_3) / (
391
+ Fc_1 + Fc_2 + Fc_3) # Bei der Berechnung der Gesamtschwerpunkte der Druckkraefte muss die Querschnittsbreite der einzelnen Querschnitte einfliessen
392
+ z = S_ges + d - x # Innerer Hebelarm
393
+
394
+ Meds = abs(M - N_f * (d - zs1))
395
+ Mrds = (Fc_1 + Fc_2 + Fc_3) * z
396
+
397
+ nu_eds = Meds / (b_eff * (d ** 2) * fcd)
398
+ if nu_eds_grenz <= nu_eds:
399
+ Meds_lim = nu_eds_grenz * b_eff * (d ** 2) * fcd
400
+
401
+ zeta_lim = 0
402
+ concrete_strain_2 = 3.5
403
+ if nu_eds_grenz == 0.296:
404
+ zeta_lim = 0.813
405
+ steal_strain_1 = 4.28
406
+ elif nu_eds_grenz == 0.371:
407
+ zeta_lim = 0.743
408
+ steal_strain_1 = 2.174
409
+
410
+ #epss2 = ((x - d2) / x) * abs(-3.5)
411
+ epss2 = ((steal_strain_1 + concrete_strain_2) / d) * (d - d2) - steal_strain_1
412
+
413
+ sigma_s_2 = 0
414
+ if epssyd <= epss2:
415
+ sigma_s_2 = fyd
416
+ elif epss2 < epssyd:
417
+ sigma_s_2 = fyd * (epss / epssyd)
418
+
419
+ z_nu_eds_grenz = zeta_lim * d
420
+
421
+ delta_Med = abs(M) - Meds_lim
422
+ As1erf_nu_lim = (1 / fyd) * (Meds_lim / z_nu_eds_grenz + N_f) * 100 ** 2
423
+ As2erf = (1 / sigma_s_2) * (delta_Med / (d - d2)) * 100 ** 2
424
+ As1erf = As1erf_nu_lim + As2erf
425
+ else:
426
+ As1erf = (1 / sigma_s) * (Fc_1 + Fc_2 + Fc_3 + N_f) * 100 ** 2
427
+
428
+ # increase of concrete strain
429
+ if (0 <= epsc < 3.5):
430
+ epsc += 0.001
431
+ # reduction of steel strain
432
+ else:
433
+ epss -= 0.001
434
+
435
+ num_iter += 1
436
+
437
+ # Stützmoment
438
+ elif 0 > M:
439
+ # Druckzone liegt im Steg -> Nullline im Steg
440
+ if (x <= (h - h_f)):
441
+ # Grenzdehnung von 2 wird nicht erreicht
442
+ if (0 <= epsc < 2.0):
443
+ # Querschnittslängen Vergabe
444
+ interval_start_1 = 0
445
+ interval_end_1 = x
446
+ interval_start_2 = 0
447
+ interval_end_2 = 0
448
+ interval_start_3 = 0
449
+ interval_end_3 = 0
450
+ # Querschnittsbreiten Vergabe
451
+ concrete_width_1 = b_w
452
+ concrete_width_2 = 0
453
+ concrete_width_3 = 0
454
+ # Grenzdehnung von 2 wird im Steg erreicht
455
+ elif (2 / epsc * x <= (h - h_f)):
456
+ # Querschnittslängen Vergabe
457
+ interval_start_1 = 0
458
+ interval_end_1 = 2 / epsc * x # 2 = Dehnung beim Erreichen der Druckfestigkeit
459
+ interval_start_2 = 2 / epsc * x
460
+ interval_end_2 = x
461
+ interval_start_3 = 0
462
+ interval_end_3 = 0
463
+ # Querschnittsbreiten Vergabe
464
+ concrete_width_1 = b_w
465
+ concrete_width_2 = b_w
466
+ concrete_width_3 = 0
467
+
468
+ # Abgrenzen der einzlnen Bereichsunterschiede
469
+ x1 = np.linspace(interval_start_1, interval_end_1, N)
470
+ x2 = np.linspace(interval_start_2, interval_end_2, N)
471
+ x3 = np.linspace(interval_start_3, interval_end_3, N)
472
+
473
+ # Definition der Spannungsfunktionen
474
+ y1 = []
475
+ y2 = []
476
+ y3 = []
477
+ # Grenzdehnung von 2 wird nicht erreicht
478
+ if (0 <= epsc < 2.0):
479
+ y1_list_with_all_sigma_c_values_promille = []
480
+ for i in range(N):
481
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (x * 2))) ** 2)
482
+
483
+ y1_list_with_all_sigma_c_values_promille.append(sigma_c)
484
+
485
+ y1_values = y1_list_with_all_sigma_c_values_promille
486
+ y2_values = fcd * np.zeros(N)
487
+ y3_values = fcd * np.zeros(N)
488
+
489
+ y1.append(y1_values)
490
+ y2.append(y2_values)
491
+ y3.append(y3_values)
492
+ # Grenzdehnung von 2 wird im Steg erreicht
493
+ elif (2 / epsc * x <= (h - h_f)):
494
+ y1_list_with_all_sigma_c_values_upto_2_promille = []
495
+ for i in range(N):
496
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (
497
+ x * 2))) ** 2) # Sigma c-Werte bis zum Erreichen der Druckfestigkeit -> Betondehnung = 2
498
+
499
+ y1_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c)
500
+
501
+ y1_values = y1_list_with_all_sigma_c_values_upto_2_promille # sigma_concrete_at_given_intervals(x1)
502
+ y2_values = fcd * np.ones(N)
503
+ y3_values = fcd * np.zeros(N)
504
+
505
+ y1.append(y1_values)
506
+ y2.append(y2_values)
507
+ y3.append(y3_values)
508
+
509
+ # Integration der einzelnen Spannungsfunktionen
510
+ if (0 <= epsc < 2.0):
511
+ M_1 = simps(y1 * x1, x = x1)
512
+ A_1 = simps(y1, x = x1)
513
+ S_1 = M_1 / A_1
514
+ # Grenzdehnung von 2 wird im Steg erreicht
515
+ elif (2 / epsc * x <= (h - h_f)):
516
+ M_1 = simps(y1 * x1, x = x1) # moment 1
517
+ A_1 = simps(y1, x = x1) # pressure force 1
518
+ S_1 = M_1 / A_1 # centroid of area 1
519
+
520
+ M_2 = simps(y2 * x2, x = x2)
521
+ A_2 = simps(y2, x = x2)
522
+ S_2 = M_2 / A_2
523
+
524
+ # concrete pressure
525
+ Fc_1 = A_1 * concrete_width_1
526
+ Fc_2 = A_2 * concrete_width_2
527
+ Fc_3 = 0
528
+
529
+ # centroid of compressive stress in concrete
530
+ S_ges = (S_1 * Fc_1 + S_2 * Fc_2 + S_3 * Fc_3) / (
531
+ Fc_1 + Fc_2 + Fc_3) # Bei der Berechnung der Gesamtschwerpunkte der Druckkraefte muss die Querschnittsbreite der einzelnen Querschnitte einfliessen
532
+ z = S_ges + d - x # Innerer Hebelarm
533
+
534
+ Meds = abs(M - N_f * (zs1 - (h - d)))
535
+ Mrds = (Fc_1 + Fc_2 + Fc_3) * z
536
+
537
+ nu_eds = Meds / (b_w * (d ** 2) * fcd)
538
+ if nu_eds_grenz <= nu_eds:
539
+ Meds_lim = nu_eds_grenz * b_w * (d ** 2) * fcd
540
+
541
+ zeta_lim = 0
542
+ concrete_strain_2 = 3.5
543
+ if nu_eds_grenz == 0.296:
544
+ zeta_lim = 0.813
545
+ steal_strain_1 = 4.28
546
+ elif nu_eds_grenz == 0.371:
547
+ zeta_lim = 0.743
548
+ steal_strain_1 = 2.174
549
+
550
+ #epss2 = ((x - d2) / x) * abs(-3.5)
551
+ epss2 = ((steal_strain_1 + concrete_strain_2) / d) * (d - d2) - steal_strain_1
552
+
553
+ sigma_s_2 = 0
554
+ if epssyd <= epss2:
555
+ sigma_s_2 = fyd
556
+ elif epss2 < epssyd:
557
+ sigma_s_2 = fyd * (epss / epssyd)
558
+
559
+ z_nu_eds_grenz = zeta_lim * d
560
+
561
+ delta_Med = abs(M) - Meds_lim
562
+ As1erf_nu_lim = (1 / fyd) * (Meds_lim / z_nu_eds_grenz + N_f) * 100 ** 2
563
+ As2erf = (1 / sigma_s_2) * (
564
+ delta_Med / (d - d2)) * 100 ** 2
565
+ As1erf = As1erf_nu_lim + As2erf
566
+ else:
567
+ As1erf = (1 / sigma_s) * (Fc_1 + Fc_2 + Fc_3 + N_f) * 100 ** 2
568
+
569
+ # increase of concrete strain
570
+ if (0 <= epsc < 3.5):
571
+ epsc += 0.001
572
+ # reduction of steel strain
573
+ else:
574
+ epss -= 0.001
575
+
576
+ num_iter += 1
577
+ # Druckzone im Steg und Flasch -> Nullline im Flansch
578
+ elif (x > (h - h_f)):
579
+ # Grenzdehnung von 2 wird nicht erreicht
580
+ if (0 <= epsc < 2.0):
581
+ # Querschnittslängen Vergabe
582
+ interval_start_1 = 0
583
+ interval_end_1 = x - (h - h_f)
584
+ interval_start_2 = x - (h - h_f)
585
+ interval_end_2 = x
586
+ interval_start_3 = 0
587
+ interval_end_3 = 0
588
+ # Querschnittsbreiten Vergabe
589
+ concrete_width_1 = b_eff
590
+ concrete_width_2 = b_w
591
+ concrete_width_3 = 0
592
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
593
+ elif (2 / epsc * x <= (x - (h - h_f))):
594
+ # Querschnittslängen Vergabe
595
+ interval_start_1 = 0
596
+ interval_end_1 = 2 / epsc * x # 2 = Dehnung beim Erreichen der Druckfestigkeit
597
+ interval_start_2 = 2 / epsc * x
598
+ interval_end_2 = x - (h - h_f)
599
+ interval_start_3 = x - (h - h_f)
600
+ interval_end_3 = x
601
+ # Querschnittsbreiten Vergabe
602
+ concrete_width_1 = b_eff
603
+ concrete_width_2 = b_eff
604
+ concrete_width_3 = b_w
605
+ # Grenzdehnung von 2 wird im STEG erreicht
606
+ elif (2 / epsc * x > (x - (h - h_f))):
607
+ # Querschnittslängen Vergabe
608
+ interval_start_1 = 0
609
+ interval_end_1 = x - (h - h_f)
610
+ interval_start_2 = x - (h - h_f)
611
+ interval_end_2 = 2 / epsc * x
612
+ interval_start_3 = 2 / epsc * x
613
+ interval_end_3 = x
614
+ # Querschnittsbreiten Vergabe
615
+ concrete_width_1 = b_eff
616
+ concrete_width_2 = b_w
617
+ concrete_width_3 = b_w
618
+
619
+ # Abgrenzen der einzlnen Bereichsunterschiede
620
+ x1 = np.linspace(interval_start_1, interval_end_1, N)
621
+ x2 = np.linspace(interval_start_2, interval_end_2, N)
622
+ x3 = np.linspace(interval_start_3, interval_end_3, N)
623
+
624
+ # Definition der Spannungsfunktionen
625
+ y1 = []
626
+ y2 = []
627
+ y3 = []
628
+ # Grenzdehnung von 2 wird nicht erreicht
629
+ if (0 <= epsc < 2.0):
630
+ y1_list_with_all_sigma_c_values_promille = []
631
+ y2_list_with_all_sigma_c_values_upto_2_promille = []
632
+ for i in range(N):
633
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (x * 2))) ** 2)
634
+ sigma_c_2 = fcd * (1 - (1 - ((x2[i] * epsc) / (x * 2))) ** 2)
635
+
636
+ y1_list_with_all_sigma_c_values_promille.append(sigma_c)
637
+ y2_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c_2)
638
+
639
+ y1_values = y1_list_with_all_sigma_c_values_promille
640
+ y2_values = y2_list_with_all_sigma_c_values_upto_2_promille
641
+ y3_values = fcd * np.zeros(N, )
642
+
643
+ y1.append(y1_values)
644
+ y2.append(y2_values)
645
+ y3.append(y3_values)
646
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
647
+ elif (2 / epsc * x <= (x - (h - h_f))):
648
+ y1_list_with_all_sigma_c_values_upto_2_promille = []
649
+ for i in range(N):
650
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (
651
+ x * 2))) ** 2) # Sigma c-Werte bis zum Erreichen der Druckfestigkeit -> Betondehnung = 2
652
+
653
+ y1_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c)
654
+
655
+ y1_values = y1_list_with_all_sigma_c_values_upto_2_promille # sigma_concrete_at_given_intervals(x1)
656
+ y2_values = fcd * np.ones(N)
657
+ y3_values = fcd * np.ones(N)
658
+
659
+ y1.append(y1_values)
660
+ y2.append(y2_values)
661
+ y3.append(y3_values)
662
+ # Grenzdehnung von 2 wird im STEG erreicht
663
+ elif (2 / epsc * x > (x - (h - h_f))):
664
+ y1_list_with_all_sigma_c_values_promille = []
665
+ y2_list_with_all_sigma_c_values_upto_2_promille = []
666
+ for i in range(N):
667
+ sigma_c = fcd * (1 - (1 - ((x1[i] * epsc) / (x * 2))) ** 2)
668
+ sigma_c_2 = fcd * (1 - (1 - ((x2[i] * epsc) / (x * 2))) ** 2)
669
+
670
+ y1_list_with_all_sigma_c_values_promille.append(sigma_c)
671
+ y2_list_with_all_sigma_c_values_upto_2_promille.append(sigma_c_2)
672
+
673
+ y1_values = y1_list_with_all_sigma_c_values_promille
674
+ y2_values = y2_list_with_all_sigma_c_values_upto_2_promille
675
+ y3_values = fcd * np.ones(N)
676
+
677
+ y1.append(y1_values)
678
+ y2.append(y2_values)
679
+ y3.append(y3_values)
680
+
681
+ # Integration der einzelnen Spannungsfunktionen
682
+ # Grenzdehnung von 2 wird nicht erreicht
683
+ if (0 <= epsc < 2.0):
684
+ M_1 = simps(y1 * x1, x = x1)
685
+ A_1 = simps(y1, x = x1)
686
+ S_1 = M_1 / A_1
687
+
688
+ M_2 = simps(y2 * x2, x = x2)
689
+ A_2 = simps(y2, x = x2)
690
+ S_2 = M_2 / A_2
691
+ # Grenzdehnung von 2 wird im FLANSCH erreicht
692
+ elif (2 / epsc * x <= (x - (h - h_f))):
693
+ M_1 = simps(y1 * x1, x = x1) # moment 1
694
+ A_1 = simps(y1, x = x1) # pressure force 1
695
+ S_1 = M_1 / A_1 # centroid of area 1
696
+
697
+ M_2 = simps(y2 * x2, x = x2)
698
+ A_2 = simps(y2, x = x2)
699
+ S_2 = M_2 / A_2
700
+
701
+ M_3 = simps(y3 * x3, x = x3)
702
+ A_3 = simps(y3, x = x3)
703
+ S_3 = M_3 / A_3
704
+ # Grenzdehnung von 2 wird im STEG erreicht
705
+ elif (2 / epsc * x > (x - (h - h_f))):
706
+ M_1 = simps(y1 * x1, x = x1)
707
+ A_1 = simps(y1, x = x1)
708
+ S_1 = M_1 / A_1
709
+
710
+ M_2 = simps(y2 * x2, x = x2)
711
+ A_2 = simps(y2, x = x2)
712
+ S_2 = M_2 / A_2
713
+
714
+ M_3 = simps(y3 * x3, x = x3)
715
+ A_3 = simps(y3, x = x3)
716
+ S_3 = M_3 / A_3
717
+
718
+ # concrete pressure
719
+ Fc_1 = A_1 * concrete_width_1
720
+ Fc_2 = A_2 * concrete_width_2
721
+ Fc_3 = A_3 * concrete_width_3
722
+
723
+ # centroid of compressive stress in concrete
724
+ S_ges = (S_1 * Fc_1 + S_2 * Fc_2 + S_3 * Fc_3) / (
725
+ Fc_1 + Fc_2 + Fc_3) # Bei der Berechnung der Gesamtschwerpunkte der Druckkraefte muss die Querschnittsbreite der einzelnen Querschnitte einfliessen
726
+ z = S_ges + d - x
727
+
728
+ Meds = abs(M - N_f * (zs1 - (h - d)))
729
+ Mrds = (Fc_1 + Fc_2 + Fc_3) * z
730
+
731
+ nu_eds = Meds / (b_w * (d ** 2) * fcd)
732
+ if nu_eds_grenz <= nu_eds:
733
+ Meds_lim = nu_eds_grenz * b_w * (d ** 2) * fcd
734
+
735
+ zeta_lim = 0
736
+ concrete_strain_2 = 3.5
737
+ if nu_eds_grenz == 0.296:
738
+ zeta_lim = 0.813
739
+ steal_strain_1 = 4.28
740
+ elif nu_eds_grenz == 0.371:
741
+ zeta_lim = 0.743
742
+ steal_strain_1 = 2.174
743
+
744
+ #epss2 = ((x - d2) / x) * abs(-3.5)
745
+ epss2 = ((steal_strain_1 + concrete_strain_2) / d) * (d - d2) - steal_strain_1
746
+
747
+ sigma_s_2 = 0
748
+ if epssyd <= epss2:
749
+ sigma_s_2 = fyd
750
+ elif epss2 < epssyd:
751
+ sigma_s_2 = fyd * (epss / epssyd)
752
+
753
+ z_nu_eds_grenz = zeta_lim * d
754
+
755
+ delta_Med = abs(M) - Meds_lim
756
+ As1erf_nu_lim = (1 / fyd) * (Meds_lim / z_nu_eds_grenz + N_f) * 100 ** 2
757
+ As2erf = (1 / sigma_s_2) * (
758
+ delta_Med / (d - d2)) * 100 ** 2
759
+ As1erf = As1erf_nu_lim + As2erf
760
+ else:
761
+ As1erf = (1 / sigma_s) * (Fc_1 + Fc_2 + Fc_3 + N_f) * 100 ** 2
762
+
763
+ # increase of concrete strain
764
+ if (0 <= epsc < 3.5):
765
+ epsc += 0.001
766
+ # reduction of steel strain
767
+ else:
768
+ epss -= 0.001
769
+
770
+ num_iter += 1
771
+ else:
772
+ print("Limit reached!")
773
+ break
774
+
775
+ # DIN 1045-1:2008-08
776
+ amax = 0
777
+ a1 = self.center_of_gravity
778
+ a2 = h - self.center_of_gravity
779
+ if a1 > a2:
780
+ amax = a1 * 100
781
+ else:
782
+ amax = a2 * 100
783
+ Wc = (self.cross_section_inertia * 100 * 100 * 100 * 100) / amax
784
+ Asmin = ((fctm * 10 ** 2) * Wc) / (fyk * 10 ** 2 * (d * 0.9) * 100)
785
+
786
+
787
+ needed_reinforcement = []
788
+
789
+ if Asmin < As1erf:
790
+ print("Iteration steps: ", num_iter)
791
+ print("Med: ", np.around(M, 3), "MN")
792
+ print("Ned: ", np.around(N_f, 3), "MN")
793
+ print("Affecting moment: ", np.around(Meds, 3), "MN")
794
+ print("Marginal moment: ", np.around(Meds_lim, 3), "MN")
795
+ print("Modulus of section : ", np.around(Mrds, 3), "MN")
796
+ print("Required bending reinforcement: ", np.around(As1erf, 3), "cm²")
797
+ if As2erf != 0:
798
+ print("Required compressive reinforcement : ", np.around(As2erf, 3), "cm²")
799
+ print("Pressure zone height x = ", np.around(x, 3), "m")
800
+ print("Retrieved pressure zone ξ = ", np.around(xi, 3))
801
+ print("Edge concrete compression εc = ", np.around(epsc, 3), "‰")
802
+ if epss >= 2.17:
803
+ print("Steel strain of bending reinforcement εs: Yield strength is reached.")
804
+ if As2erf != 0:
805
+ print("εs = ", np.around(steal_strain_1, 3), "‰")
806
+ else:
807
+ print("εs = ", np.around(epss, 3), "‰")
808
+ else:
809
+ if As2erf != 0:
810
+ print("Steel strain of bending reinforcement εs: Yield strength is reached.")
811
+ print("εs = ", np.around(steal_strain_1, 3), "‰")
812
+ else:
813
+ print("Steel strain of bending reinforcement εs: Yield strength is not reached.")
814
+ print("εs = ", np.around(epss, 3), "‰")
815
+
816
+ if As2erf != 0:
817
+ if As2erf != 0:
818
+ print("Steel strain of compressive reinforcement εs2: Yield strength is reached.")
819
+ print("εs2 = ", np.around(epss2, 3), "‰")
820
+ else:
821
+ print("Steel strain of compressive reinforcement εs2: Yield strength is not reached.")
822
+ print("εs2 = ", np.around(epss2, 3), "‰")
823
+
824
+ print("Inner lever arm z = ", np.around(z, 3), "m")
825
+
826
+ reinforcement = [float(As1erf), float(As2erf)]
827
+ needed_reinforcement.append(reinforcement)
828
+ else:
829
+ print("Minimum reinforcement is dominant!")
830
+ print("Required bending reinforcement: ", np.around(Asmin, 3), "cm²")
831
+ reinforcement = [float(Asmin), float(0.0)]
832
+ needed_reinforcement.append(reinforcement)
833
+
834
+ return needed_reinforcement
835
+
836
+ def calculate_beam_section_stirrup(self, beam_sub_section, strength_of_concrete, tensile_yield_strength, strut_angle_choice):
837
+ Ved = beam_sub_section.shear_force_ed / 1000000
838
+ Vedr = abs(Ved) # reduzierte Querkraft, da direkte Lagerung
839
+ N_f = beam_sub_section.normal_force_ed / 1000000
840
+
841
+ A = self.cross_section_area # QS-Fläche
842
+
843
+ h = self.height
844
+ b = self.width_web # kleinste QS-breite -> bw aus Biegebemessung
845
+
846
+ d1 = beam_sub_section.effective_height_pressure # cnom + dsl*0.5
847
+ d = h - d1
848
+ z = 0.9 * d
849
+
850
+ fcd = strength_of_concrete # N/mm²
851
+ fck = (fcd * 1.5) / 0.85
852
+ fctm = 0.3 * fck ** (2 / 3)
853
+ yc = 1.5
854
+
855
+ fyd = tensile_yield_strength # MN/m²
856
+ fyk = fyd * 1.15
857
+
858
+ a_sw_correct = 0
859
+
860
+ # Berechnung des Druckstrebenwinkels
861
+ c = 0.5
862
+ sigma_cd = abs(N_f / A)
863
+ Vrd_cc = c * 0.48 * (fck ** (1 / 3)) * (1 - 1.2 * (sigma_cd / fcd)) * b * z
864
+
865
+ cot_teta = abs((1.2 + 1.4 * (sigma_cd / fcd)) / (1 - (Vrd_cc / Vedr)))
866
+ strut_angle = math.degrees(math.atan(1 / cot_teta))
867
+
868
+ if strut_angle_choice == 0:
869
+ if 1.0 <= cot_teta <= 3.0:
870
+ cot_teta = cot_teta
871
+ elif 3.0 < cot_teta:
872
+ cot_teta = 3.0
873
+ strut_angle = 18.43
874
+ elif 0 <= cot_teta < 1.0:
875
+ cot_teta = 1.0
876
+ strut_angle = 45
877
+ else:
878
+ if N_f > 0:
879
+ cot_teta = 1.0
880
+ strut_angle = 45
881
+ else:
882
+ cot_teta = 1.2
883
+ strut_angle = 40
884
+
885
+ # Nachweis der Druckstrebentragfähigkeit
886
+ alpha_cw = 1.0
887
+ v2 = 1.1 - (fck / 500)
888
+ v1 = 0.75 * v2
889
+ tan_teta = math.tan(math.radians(strut_angle))
890
+ Vrd_max = (alpha_cw * b * z * v1 * fcd) / ((tan_teta) + (cot_teta))
891
+ proof = abs(Vedr / Vrd_max)
892
+
893
+ # Ermittlung der stat. erforderlichen Bewehrung, für vertikale Bügel
894
+ a_sw = (Vedr / (z * fyd)) * tan_teta * 100 ** 2
895
+
896
+ # Konstruktive Durchbiegung
897
+ a_sw_min = 0.16 * (fctm / fyk) * b * 1.0 * 100 ** 2 # Mindestquerkraftbewehrung, vertikale Bügel
898
+
899
+ needed_reinforcement = []
900
+
901
+ if a_sw <= a_sw_min:
902
+ a_sw_correct = a_sw_min
903
+ else:
904
+ a_sw_correct = a_sw
905
+
906
+
907
+ if proof <= 1.0:
908
+ print("Proof that the strut sturdiness is complied = ", np.around(proof, 3), "%")
909
+ else:
910
+ print("Proof that the strut sturdiness is NOT complied = ", np.around(proof, 3), "%")
911
+
912
+ print("Compression strut angle = ", np.around(strut_angle, 2), "°")
913
+
914
+ if a_sw <= a_sw_min:
915
+ print("Minimum reinforcement is required for the shear force = ", np.around(a_sw_correct, 3), " cm²/m")
916
+ else:
917
+ print("Required shear force reinforcement = ", np.around(a_sw_correct, 3), " cm²/m")
918
+
919
+ needed_reinforcement.append(float(np.around(a_sw_correct, 3)))
920
+
921
+ return needed_reinforcement