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