kib-lap 0.5__cp313-cp313-win_amd64.whl → 0.7.7__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 (44) hide show
  1. KIB_LAP/Betonbau/TEST_Rectangular.py +21 -0
  2. KIB_LAP/Betonbau/beam_rectangular.py +4 -0
  3. KIB_LAP/FACHWERKEBEN/Elements.py +209 -0
  4. KIB_LAP/FACHWERKEBEN/InputData.py +118 -0
  5. KIB_LAP/FACHWERKEBEN/Iteration.py +967 -0
  6. KIB_LAP/FACHWERKEBEN/Materials.py +30 -0
  7. KIB_LAP/FACHWERKEBEN/Plotting.py +681 -0
  8. KIB_LAP/FACHWERKEBEN/__init__.py +4 -0
  9. KIB_LAP/FACHWERKEBEN/main.py +27 -0
  10. KIB_LAP/Plattentragwerke/PlateBendingKirchhoff.py +36 -29
  11. KIB_LAP/STABRAUM/InputData.py +13 -2
  12. KIB_LAP/STABRAUM/Output_Data.py +61 -0
  13. KIB_LAP/STABRAUM/Plotting.py +1453 -0
  14. KIB_LAP/STABRAUM/Programm.py +518 -1026
  15. KIB_LAP/STABRAUM/Steifigkeitsmatrix.py +338 -117
  16. KIB_LAP/STABRAUM/main.py +58 -0
  17. KIB_LAP/STABRAUM/results.py +37 -0
  18. KIB_LAP/Scheibe/Assemble_Stiffness.py +246 -0
  19. KIB_LAP/Scheibe/Element_Stiffness.py +362 -0
  20. KIB_LAP/Scheibe/Meshing.py +365 -0
  21. KIB_LAP/Scheibe/Output.py +34 -0
  22. KIB_LAP/Scheibe/Plotting.py +722 -0
  23. KIB_LAP/Scheibe/Shell_Calculation.py +523 -0
  24. KIB_LAP/Scheibe/Testing_Mesh.py +25 -0
  25. KIB_LAP/Scheibe/__init__.py +14 -0
  26. KIB_LAP/Scheibe/main.py +33 -0
  27. KIB_LAP/StabEbenRitz/Biegedrillknicken.py +757 -0
  28. KIB_LAP/StabEbenRitz/Biegedrillknicken_Trigeometry.py +328 -0
  29. KIB_LAP/StabEbenRitz/Querschnittswerte.py +527 -0
  30. KIB_LAP/StabEbenRitz/Stabberechnung_Klasse.py +868 -0
  31. KIB_LAP/plate_bending_cpp.cp313-win_amd64.pyd +0 -0
  32. KIB_LAP/plate_buckling_cpp.cp313-win_amd64.pyd +0 -0
  33. {kib_lap-0.5.dist-info → kib_lap-0.7.7.dist-info}/METADATA +1 -1
  34. {kib_lap-0.5.dist-info → kib_lap-0.7.7.dist-info}/RECORD +37 -19
  35. Examples/Cross_Section_Thin.py +0 -61
  36. KIB_LAP/Betonbau/Bemessung_Zust_II.py +0 -648
  37. KIB_LAP/Betonbau/Iterative_Design.py +0 -723
  38. KIB_LAP/Plattentragwerke/NumInte.cpp +0 -23
  39. KIB_LAP/Plattentragwerke/NumericalIntegration.cpp +0 -23
  40. KIB_LAP/Plattentragwerke/plate_bending_cpp.cp313-win_amd64.pyd +0 -0
  41. KIB_LAP/main.py +0 -2
  42. {Examples → KIB_LAP/StabEbenRitz}/__init__.py +0 -0
  43. {kib_lap-0.5.dist-info → kib_lap-0.7.7.dist-info}/WHEEL +0 -0
  44. {kib_lap-0.5.dist-info → kib_lap-0.7.7.dist-info}/top_level.txt +0 -0
@@ -1,723 +0,0 @@
1
- from Querschnittsbreite import PolygonSection
2
- import numpy as np
3
- import matplotlib.pyplot as plt
4
- import pandas as pd
5
- from scipy.interpolate import interp1d
6
-
7
-
8
- class Baustoffe:
9
- def __init__(self, liste_baustoffe, h_c=0.13, b_c=4, traeger="FT", t0=1, t=365):
10
- """
11
- Klasse zur Berechnung der Baustoffparameter: Eingabe in [MN/m², m , MN, etc.]
12
-
13
-
14
- """
15
- # Teilsicherheitsbeiwerte für Baustoffe
16
- self.gamma_c = 1.5
17
- self.gamma_s = 1.15
18
- # Stahlbeton
19
- self.fck = liste_baustoffe[0]
20
- self.fcd = self.fck / self.gamma_c * 0.85
21
- self.fctm = 0.30 * self.fck ** (2 / 3) # Nach Eurocode 2 Tabelle 3.1
22
- self.fctk_005 = 0.7 * self.fctm
23
- self.fcm = self.fck + 8
24
- self.Ecm = 22000 * (0.1 * self.fcm) ** (0.3)
25
-
26
- self.alpha_T = 1.2e-5
27
-
28
- # Kriechen und Schwinden
29
-
30
- self.traeger = traeger
31
- self.Zement = "I42.5N"
32
- self.LF = 80
33
-
34
- self.t0 = t0 # Annahme: Belastungsbeginn der Fertigteile nach 28 d
35
- self.t = t
36
-
37
- # Querschnittswerte für Kriechen / Schwinden
38
-
39
- self.b_c = b_c
40
- self.h_c = h_c
41
-
42
- self.A = self.b_c * self.h_c
43
- if self.traeger == "FT":
44
- self.u = self.b_c
45
- elif self.traeger == "Normal":
46
- self.u = self.b_c * 2 # Zur Trocknung freigesetzter Umfang
47
- else:
48
- self.u = self.b_c * 2
49
-
50
- self.h_0 = 2 * self.A / self.u
51
-
52
- # Stahl
53
- self.fyk = liste_baustoffe[1]
54
- self.fyd = self.fyk / self.gamma_s
55
- self.Es = 2e5
56
- self.Materialgesetz_Beton()
57
- self.Kriechzahlen()
58
- self.Schwindzahlen()
59
-
60
- def Materialgesetz_Beton(self):
61
- self.eps_c1 = 0.7 * self.fcm**0.31
62
- self.eps_c1 = min(self.eps_c1, 2.8) # Sicherstellen, dass eps_c1 <= 2.8
63
-
64
- def Kriechzahlen(self):
65
- self.Zement = "I42.5N"
66
-
67
- if self.Zement == "I42.5N" or self.Zement == "I32.5R":
68
- self.alpha = 0
69
- elif (
70
- self.Zement == "I42.5R"
71
- or self.Zement == "I52.5N"
72
- or self.Zement == "I52.5R"
73
- ):
74
- self.alpha = 1
75
- else:
76
- self.alpha = -1
77
-
78
- self.t_0 = self.t0
79
-
80
- self.t_0_eff = max(
81
- self.t_0 * (1 + 9 / (2 + self.t_0 ** (1.2))) ** self.alpha, 0.5
82
- )
83
-
84
- self.t_infty = (
85
- self.t
86
- ) # self.t_0+15 #70 * 365 Annahme: 15 Tage nach der Betonage
87
-
88
- self.RH = self.LF # Außenliegendes Bauteil
89
-
90
- # Fallunterscheidung für Druckfestigkeit
91
- self.alpha_1 = min((35 / self.fcm) ** 0.7, 1)
92
- self.alpha_2 = min((35 / self.fcm) ** 0.2, 1)
93
- self.alpha_3 = min((35 / self.fcm) ** 0.5, 1)
94
-
95
- # Einfluss der Luftfeuchte und wirksamer Bauteildicke
96
- if self.fcm <= 35:
97
- self.phi_rh = 1 + (1 - self.RH / 100) / (
98
- 0.1 * (self.h_0 * 1000) ** (0.3333333)
99
- )
100
- else:
101
- self.phi_rh = (
102
- 1
103
- + (1 - self.RH / 100)
104
- / (0.1 * (self.h_0 * 1000) ** (0.3333333))
105
- * self.alpha_1
106
- ) * self.alpha_2
107
-
108
- # Einfluss der Betondruckfestigkeit
109
- self.beta_fcm = 16.8 / np.sqrt(self.fcm)
110
- # Einfluss des Belastungsbeginns
111
- self.beta_t0 = 1 / (0.1 + self.t_0_eff**0.2)
112
-
113
- # Einfluss der Luftfeuchte - Beta-Beiwert
114
- if self.fcm <= 35:
115
- self.beta_h = min(
116
- 1.5 * (1 + (0.012 * self.RH) ** 18) * self.h_0 * 1000 + 250, 1500
117
- )
118
- else:
119
- self.beta_h = min(
120
- 1.5 * (1 + (0.012 * self.RH) ** 18) * self.h_0 * 1000
121
- + 250 * self.alpha_3,
122
- 1500 * self.alpha_3,
123
- )
124
-
125
- # Einfluss der Belastungsdauer und Belastungsbeginn
126
-
127
- self.beta_c_t_t0 = (
128
- (self.t_infty - self.t_0) / (self.beta_h + self.t_infty - self.t_0)
129
- ) ** 0.30
130
-
131
- self.phi_infty = (
132
- self.phi_rh * self.beta_fcm * self.beta_t0 * self.beta_c_t_t0
133
- ) # Kriechzahl zum Zeitpunkt t
134
-
135
- print("Kriechzahl phi ", self.phi_infty)
136
-
137
- def Schwindzahlen(self):
138
- self.beta_rh = 1.55 * (1 - (self.RH / 100) ** 3)
139
-
140
- if self.Zement == "I42.5N" or self.Zement == "I32.5R":
141
- self.alpha_as = 700
142
- self.alpha_ds1 = 4
143
- self.alpha_ds2 = 0.12
144
- elif (
145
- self.Zement == "I42.5R"
146
- or self.Zement == "I52.5N"
147
- or self.Zement == "I52.5R"
148
- ):
149
- self.alpha_as = 600
150
- self.alpha_ds1 = 6
151
- self.alpha_ds2 = 0.12
152
- else:
153
- self.alpha_as = 800
154
- self.alpha_ds1 = 3
155
- self.alpha_ds2 = 0.12
156
-
157
- self.epsilon_cd_0 = (
158
- 0.85
159
- * ((220 + 110 * self.alpha_ds1) * np.exp(-self.alpha_ds2 * self.fcm / 10))
160
- * 1e-6
161
- * self.beta_rh
162
- )
163
-
164
- ts = 3 # Nachbehandlung des Betons
165
- self.t_s = ts
166
-
167
- t = self.t_infty
168
- self.t_infty_s = t
169
-
170
- self.beta_ds = (t - ts) / ((t - ts) + 0.04 * np.sqrt(self.h_0**3))
171
-
172
- if self.h_0 * 1000 <= 100:
173
- self.k_h = 1.00
174
- elif self.h_0 * 1000 > 100 and self.h_0 * 1000 <= 200:
175
- self.k_h = 1.00 - 0.15 / 100 * self.h_0 * 1000
176
- elif self.h_0 * 1000 > 200 and self.h_0 * 1000 <= 300:
177
- self.k_h = 0.85 - 0.10 / 100 * self.h_0 * 1000
178
- elif self.h_0 * 1000 > 300 and self.h_0 * 1000 <= 500:
179
- self.k_h = 0.75 - 0.05 / 100 * self.h_0 * 1000
180
- elif self.h_0 * 1000 > 500:
181
- self.k_h = 0.70
182
-
183
- self.epsilon_cd = self.beta_ds * self.epsilon_cd_0 * self.k_h
184
-
185
- # Autogenes Schwinden
186
- self.epsilon_ca_infty = 2.5 * (self.fck - 10) * 1e-6
187
- self.beta_as = 1 - np.exp(-0.2 * np.sqrt(t))
188
-
189
- self.epsilon_ca = self.beta_as * self.epsilon_ca_infty
190
-
191
- # Gesamtschwinden
192
- self.epsilon_cs = self.epsilon_cd + self.epsilon_ca
193
-
194
- print("Gesamtschwindmaß ", self.epsilon_cs)
195
-
196
-
197
- class Laengsbemessung:
198
- def __init__(
199
- self,
200
- fck=30,
201
- fyk=500,
202
- _LoadingType="csv",
203
- Iter="Bruch",
204
- Reinforcement="csv",
205
- Querschnittsbemessung="Polygon",
206
- P_m_inf = 0, A_p = 0, d_p1 = 0
207
- ):
208
- # Calculation mode
209
- self.Iter = Iter
210
- # Material properties from input
211
- self.fck = fck
212
- self.fyk = fyk
213
- self.varepsilon_grenz = 2 # In Permille
214
- self.n_czone = 100
215
- # Init design values for loading
216
- self.LoadingType = _LoadingType
217
-
218
- self.NEd_GZT = 0
219
- self.MEd_GZT = 0
220
- self.MEds_GZT = 0
221
- self.Mrds_GZT = 0
222
-
223
- self.NEd_GZG = 0
224
- self.MEd_GZG = 0
225
- self.MEds_GZG = 0
226
-
227
- self.PM_inf = P_m_inf
228
-
229
-
230
-
231
- # Geometric parameters for the design
232
- self.Bewehrung = Reinforcement
233
-
234
- self.d_s1 = 0
235
- self.d_s2 = 0
236
- self.dp_1 = d_p1 # Abstand der Außenkante Biegezug bis elast. Zentrum des Spannglieds
237
-
238
- self.A_svorh = 0
239
- self.A_svorh2 = 0
240
-
241
- self.Ap = A_p
242
- try:
243
- self.epsilon_pm_inf = abs(self.PM_inf / self.Ap * 1/ self.Ep ) #Vordehnung
244
- except:
245
- self.epsilon_pm_inf = 0
246
- self.epsilon_yk = 1500/195000 # Für St 1550/1770
247
-
248
- def Calculate_All(self):
249
- self.Querschnittswerte()
250
- self.Bewehrungsangaben()
251
- self.Baustoffe()
252
- self.ReadLoading()
253
- self.Iter_Gebrauchslast()
254
- # if self.Iter == "Bruch":
255
- # self.Iter_Compression()
256
- # else:
257
- # self.Iter_Gebrauchslast()
258
-
259
- def Querschnittswerte(self, _height_test=0.5):
260
- # Example usage
261
- df = pd.read_csv("Polygon/Polygon.csv")
262
- self.vertices = df.values.tolist()
263
-
264
- self.polygon = PolygonSection(self.vertices)
265
-
266
- # Calculate the height of the polygon based on y-values
267
-
268
- y_values = [vertex[1] for vertex in self.vertices]
269
- self.height = abs(max(y_values) - min(y_values))
270
- self.z_su = self.height - self.polygon.centroid[0]
271
- self.z_so = self.height - self.z_su
272
-
273
- # Define the rotation angle
274
- self.angle_degrees = 0
275
- self.polygon.rotate(self.angle_degrees)
276
-
277
- height = _height_test
278
- section_width = self.polygon.calculate_section_width_at_height(height)
279
-
280
- return section_width
281
-
282
- def PlotCrossSection(self, _height_test=0.5):
283
- # Define the height at which to calculate the section width
284
- height = _height_test
285
- section_width = self.polygon.calculate_section_width_at_height(height)
286
- print(
287
- f"Section width at height {height} after rotating by {self.angle_degrees} degrees: {section_width}"
288
- )
289
-
290
- # Plot the polygon and the horizontal line
291
- self.polygon.plot(height)
292
-
293
- def Bewehrungsangaben(self):
294
- if self.Bewehrung == "csv":
295
- df = pd.read_csv("Bewehrung/Linienbewehrung.csv")
296
- print(df)
297
- for i in range(0, len(df["Lage"]), 1):
298
- Lage = df["Lage"][i]
299
- if Lage == "Unten":
300
- self.d_s1 = (
301
- df["dsl [m]"][i] * 0.5 + df["cnom [m]"][i] + df["dsw [m]"][i]
302
- )
303
- self.A_svorh = df["As [cm**2]"][i]
304
- elif Lage == "Oben":
305
- self.d_s2 = (
306
- df["dsl [m]"][i] * 0.5 + df["cnom [m]"][i] + df["dsw [m]"][i]
307
- )
308
- self.A_svorh2 = df["As [cm**2]"][i]
309
-
310
- self.z_ds1 = self.z_su - self.d_s1
311
- self.z_ds2 = self.z_so - self.d_s2
312
-
313
- def ReadLoading(self):
314
- if self.LoadingType == "csv":
315
- df = pd.read_csv("Lasteingabe/Lasten.csv")
316
- print(df)
317
- self.Zugseite = None
318
- for i in range(0, len(df["Grenzzustand"]), 1):
319
- if df["Grenzzustand"][i] == "GZT":
320
- self.NEd_GZT = df["NEd in [MN]"][i]
321
- self.MEd_GZT = df["MEd in [MNm]"][i]
322
- elif df["Grenzzustand"][i] == "GZG":
323
- self.NEd_GZG = df["NEd in [MN]"][i]
324
- self.MEd_GZG = df["MEd in [MNm]"][i]
325
-
326
- if self.MEd_GZT >= 0:
327
- self.MEds_GZT = abs(
328
- self.MEd_GZT - self.NEd_GZT * self.z_ds1 + self.PM_inf * (self.dp_1 - self.d_s1)
329
- ) # Bezug auf die Biegezugbewehrung (Hier UNTEN)
330
- self.NEd_GZT -= self.PM_inf
331
- self.Zugseite_GZT = "UNTEN"
332
- self.d = self.height - self.d_s1
333
- elif self.MEd_GZT < 0:
334
- self.MEds_GZT = abs(
335
- self.MEd_GZT + self.NEd_GZT * self.z_ds2 - self.PM_inf * (self.dp_1 - self.d_s1)
336
- ) # Bezug auf die Biegezugbewehrung (Hier OBEN)
337
- self.NEd_GZT -= self.PM_inf
338
- self.Zugseite_GZT = "OBEN"
339
- self.d = self.height - self.d_s2
340
-
341
- if self.MEd_GZG >= 0:
342
- self.MEds_GZG = self.MEd_GZG - self.NEd_GZG * self.z_ds1 + self.PM_inf * (self.dp_1 - self.d_s1)
343
- self.NEd_GZG -= self.PM_inf
344
- self.Zugseite_GZG = "UNTEN"
345
- self.d = self.height - self.d_s1
346
- elif self.MEd_GZG < 0:
347
- self.MEds_GZG = self.MEd_GZG + self.NEd_GZG * self.z_ds2 - self.PM_inf * (self.dp_1 - self.d_s1)
348
- self.NEd_GZG -= self.PM_inf
349
- self.Zugseite_GZG = "OBEN"
350
- self.d = self.height - self.d_s2
351
-
352
- else:
353
- self.NEd_GZT = float(
354
- input("Geben Sie die Normalkraft NEd im GZT in [MN] ein: \n")
355
- )
356
- self.MEd_GZT = float(
357
- input("Geben Sie das Biegemoment im GZT in [MN] ein: \n")
358
- )
359
- if self.MEd_GZT >= 0:
360
- self.MEds_GZT = self.MEd_GZT - self.NEd_GZT * self.z_ds1
361
- elif self.MEd_GZT < 0:
362
- self.MEds_GZT = self.MEd_GZT + self.NEd_GZT * self.z_ds1
363
-
364
- if self.MEd_GZG >= 0:
365
- self.MEds_GZG = self.MEd_GZG - self.NEd_GZG * self.z_ds1
366
- elif self.MEd_GZG < 0:
367
- self.MEds_GZG = self.MEd_GZG + self.NEd_GZG * self.z_ds1
368
-
369
- # Export loading parameters to the output folder
370
- self.zsi_GZT = None
371
- self.zsi_GZG = None
372
-
373
- if self.Zugseite_GZT == "UNTEN":
374
- self.zsi_GZT = self.z_ds1
375
- else:
376
- self.zsi_GZT = self.z_ds2
377
-
378
- if self.Zugseite_GZG == "UNTEN":
379
- self.zsi_GZG = self.z_ds1
380
- else:
381
- self.zsi_GZG = self.z_ds2
382
-
383
- df = pd.DataFrame(
384
- {
385
- "GZT": [
386
- self.NEd_GZT,
387
- self.MEd_GZT,
388
- self.zsi_GZT,
389
- self.MEds_GZT,
390
- self.Zugseite_GZT,
391
- ],
392
- "GZG": [
393
- self.NEd_GZG,
394
- self.MEd_GZG,
395
- self.zsi_GZG,
396
- self.MEds_GZG,
397
- self.Zugseite_GZG,
398
- ],
399
- },
400
- index=[
401
- "NEd [MN]",
402
- "MEd in [MNm]",
403
- "zsi in [m]",
404
- "|MEds| in [MNm]",
405
- "Zugseite",
406
- ],
407
- )
408
-
409
- df.to_csv("Output/Design_Forces.csv")
410
-
411
- def Baustoffe(self):
412
- self.fcd = self.fck / 1.5 * 0.85
413
- self.fctm = 0.30 * self.fck ** (2 / 3) # Nach Eurocode 2 Tabelle 3.1
414
- self.fctk_005 = 0.7 * self.fctm
415
- self.fcm = self.fck + 8
416
- self.Ecm = 22000 * (self.fcm / 10) ** 0.3
417
- # Stahl
418
- self.fyd = self.fyk / 1.15
419
- self.Es = 200000
420
- # Spannstahl
421
- self.Ep = 195000 # Für Litzen
422
-
423
- def Sigma_ParabalRechteck(self, _varepsilon):
424
- if _varepsilon <= self.varepsilon_grenz:
425
- sigma = self.fcd * (1 - (1 - _varepsilon / self.varepsilon_grenz) ** 2)
426
- return sigma
427
- else:
428
- sigma = self.fcd
429
- return sigma
430
-
431
- def Sigma_Gebrauchslasten(self, _varepsilon):
432
- """
433
- This function returns the concrete stresses under
434
- servicability strains smaller than 0.5e-3.
435
- Args:
436
- _varepsilon (_type_): _description_
437
-
438
- Returns:
439
- _type_: _description_
440
- """
441
- return self.Ecm * _varepsilon * 1e-3
442
-
443
- def Iter_Compression(self):
444
- print("iteration")
445
- iter = 0
446
- self.epss = 25
447
- self.epsc = 0.00
448
- self.dimensionsless_moment = 0
449
- self.limit_dimensionless_moment = 0.296
450
- self.bcm_i = np.zeros(self.n_czone - 1)
451
- self.hcm_i = np.zeros(self.n_czone - 1)
452
-
453
- self.Fc_i = np.zeros(self.n_czone - 1)
454
-
455
- while self.Mrds <= self.Meds and iter <= 10000:
456
- self.xi = self.epsc / (self.epss + self.epsc)
457
- self.hu = self.height * (1 - self.xi)
458
-
459
- self.hc_i = np.linspace(self.hu, self.height, self.n_czone)
460
- self.Mrds = 0
461
-
462
- for i in range(0, self.n_czone - 1, 1):
463
- self.hcm_i[i] = 0.5 * (self.hc_i[i] + self.hc_i[i + 1])
464
- self.bcm_i[i] = 0.5 * (
465
- self.Querschnittswerte(self.hc_i[i])
466
- + self.Querschnittswerte(self.hc_i[i + 1])
467
- )
468
-
469
- for i in range(0, self.n_czone - 1, 1):
470
- epsilon_ci = abs(
471
- self.epss
472
- - (self.epsc + self.epss) / self.d * (self.hcm_i[i] - self.d_s1)
473
- )
474
- sigma_ci = self.Sigma_ParabalRechteck(epsilon_ci)
475
-
476
- self.Fc_i[i] = (
477
- (self.hc_i[i + 1] - self.hc_i[i]) * self.bcm_i[i] * sigma_ci
478
- )
479
-
480
- self.Mrds += self.Fc_i[i] * (self.hcm_i[i] - self.d_s1)
481
-
482
- iter += 1
483
-
484
- if self.epsc >= 3.5:
485
- while self.Mrds <= self.Meds and iter <= 10000:
486
- self.Mrds = 0
487
-
488
- self.xi = self.epsc / (self.epss + self.epsc)
489
- self.hu = self.height * (1 - self.xi)
490
- self.hc_i = np.linspace(self.hu, self.height, self.n_czone)
491
-
492
- for i in range(0, self.n_czone - 1, 1):
493
- self.hcm_i[i] = 0.5 * (self.hc_i[i] + self.hc_i[i + 1])
494
- self.bcm_i[i] = 0.5 * (
495
- self.Querschnittswerte(self.hc_i[i])
496
- + self.Querschnittswerte(self.hc_i[i + 1])
497
- )
498
- epsilon_ci = abs(
499
- self.epss
500
- - (self.epsc + self.epss)
501
- / self.d
502
- * (self.hcm_i[i] - self.d_s1)
503
- )
504
- sigma_ci = self.Sigma_ParabalRechteck(epsilon_ci)
505
- self.Fc_i[i] = (
506
- (self.hc_i[i + 1] - self.hc_i[i]) * self.bcm_i[i] * sigma_ci
507
- )
508
-
509
- self.Mrds += self.Fc_i[i] * (self.hcm_i[i] - self.d_s1)
510
-
511
- iter += 1
512
-
513
- if abs(self.Mrds - self.Meds) > 0.15:
514
- self.epss -= 0.1
515
- elif abs(self.Mrds - self.Meds) > 0.02:
516
- self.epss -= 0.01
517
- else:
518
- self.epss -= 0.001
519
-
520
- if abs(self.Mrds - self.Meds) > 0.15:
521
- self.epsc += 0.1
522
- elif abs(self.Mrds - self.Meds) > 0.02:
523
- self.epsc += 0.01
524
- else:
525
- self.epsc += 0.0001
526
-
527
- self.F_sd = self.Fc_i.sum() + self.NEd
528
- self.A_serf = self.F_sd / self.fyd
529
-
530
- print(
531
- "The required reinforcement for bending is ",
532
- self.A_serf * 100**2,
533
- "cm**2",
534
- )
535
-
536
- def Iter_Gebrauchslast(self):
537
- iter = 0
538
-
539
- self.bcm_i = np.zeros(self.n_czone - 1)
540
- self.hcm_i = np.zeros(self.n_czone - 1)
541
- self.Fc_i = np.zeros(self.n_czone - 1)
542
-
543
- self.Fc_ges = 0
544
- self.F_c_list = []
545
- self.F_s1_ges = 0
546
- self.F_s1_list = []
547
-
548
- sum_h = []
549
- sum_F_s1 = []
550
- sum_F_s2 = []
551
- sum_F_c = []
552
-
553
- resu = []
554
-
555
- b = self.Querschnittswerte(self.height / 2)
556
- xi = 1e-4
557
- result = 1
558
-
559
- print("Iteration begins")
560
- p = 0
561
- while xi < 0.70:
562
- print(xi)
563
- x = xi * self.d
564
-
565
- epsilon_c2 = self.MEds_GZG / (
566
- (self.d - x / 3) * (0.5 * b * x * self.Ecm)
567
- + self.Es
568
- * (1 - self.d_s2 / x)
569
- * (self.d - self.d_s2)
570
- * self.A_svorh2
571
- * 0.01**2
572
- )
573
-
574
- sigma_c2 = epsilon_c2 * self.Ecm
575
- epsilon_s1 = epsilon_c2 * (self.d / x - 1)
576
- epsilon_s2 = epsilon_c2 * (1 - self.d_s2 / x)
577
-
578
- self.F_ci = 0.5 * b * x * sigma_c2 * (-1)
579
- if self.F_ci > 0:
580
- self.F_ci = 0
581
-
582
- self.F_s1 = (self.A_svorh * 0.01**2) * epsilon_s1 * self.Es
583
- self.F_s2 = epsilon_s2 * self.Es * self.A_svorh2 * 0.01**2 * (-1)
584
-
585
- result = - self.NEd_GZG + self.F_s1 + self.F_ci + self.F_s2
586
-
587
- sum_h.append(result)
588
- sum_F_s1.append(self.F_s1)
589
- sum_F_s2.append(self.F_s2)
590
- sum_F_c.append(self.F_ci)
591
-
592
- if abs(result) < 0.0001:
593
- print("The iterated compression zone height xi is ", xi ,"and x = ", xi*self.d)
594
- self.xi = xi
595
- break
596
-
597
- if abs(result) > 0.5:
598
- xi += 0.0001
599
- elif abs(result) > 0.01:
600
- xi += 0.00001
601
- else:
602
- xi += 0.000001
603
-
604
-
605
- p+=1
606
-
607
- print(xi)
608
- # plt.plot(sum_h)
609
- # plt.show()
610
-
611
- def Iter_Gebrauchslast_Spannbeton(self):
612
- iter = 0
613
-
614
- self.bcm_i = np.zeros(self.n_czone - 1)
615
- self.hcm_i = np.zeros(self.n_czone - 1)
616
- self.Fc_i = np.zeros(self.n_czone - 1)
617
-
618
- self.Fc_ges = 0
619
- self.F_c_list = []
620
- self.F_s1_ges = 0
621
- self.F_s1_list = []
622
-
623
- sum_h = []
624
- sum_F_s1 = []
625
- sum_F_s2 = []
626
- sum_F_c = []
627
- sum_F_p = []
628
-
629
- xi = 1e-5
630
-
631
- b = self.Querschnittswerte(self.height / 2)
632
- print("Iteration begins")
633
-
634
- while xi < 0.60:
635
- x = xi * self.d
636
- epsilon_c2 = self.MEds_GZG / (
637
- (self.d - x / 3) * (0.5 * b * x * self.Ecm)
638
- + self.Es
639
- * (1 - self.d_s2 / x)
640
- * (self.d - self.d_s2)
641
- * self.A_svorh2
642
- * 0.01**2
643
-
644
- )
645
-
646
- sigma_c2 = epsilon_c2 * self.Ecm
647
- epsilon_s1 = epsilon_c2 * (self.d / x - 1)
648
- epsilon_s2 = epsilon_c2 * (1 - self.d_s2 / x)
649
-
650
- epsilon_p = epsilon_c2 + (abs(epsilon_c2) + epsilon_s1)/self.d * (self.height - self.dp_1) # Additional strains in the prestressing cable
651
-
652
- self.F_ci = 0.5 * b * x * sigma_c2
653
-
654
- if self.F_ci < 0:
655
- self.F_ci = 0
656
- if (epsilon_s1 * self.Es <= self.fyk):
657
- self.F_s1 = (self.A_svorh * 0.01**2) * epsilon_s1 * self.Es
658
- else:
659
- self.F_s1 = (self.A_svorh * 0.01**2) * self.fyk
660
- if (epsilon_s2 * self.Es <= self.fyk):
661
- self.F_s2 = epsilon_s2 * self.Es * self.A_svorh2 * 0.01**2
662
- else:
663
- self.F_s2 = - self.fyk * self.A_svorh2 * 0.01**2
664
-
665
- if (abs(epsilon_p +self.epsilon_pm_inf) <= self.epsilon_yk):
666
- self.F_p = abs((epsilon_p)) * self.Ep * self.Ap
667
- else:
668
- self.F_p = 1500 * self.Ap
669
-
670
- result = -self.NEd_GZG + self.F_s1 - self.F_ci + self.F_s2 + self.F_p
671
-
672
- sum_h.append(result)
673
- sum_F_s1.append(self.F_s1)
674
- sum_F_s2.append(self.F_s2)
675
- sum_F_c.append(self.F_ci)
676
-
677
- if abs(result) < 0.0001:
678
- print("The iterated compression zone height xi is ", xi)
679
- self.xi = xi
680
- break
681
-
682
-
683
- if abs(result) > 0.7:
684
- xi += 0.0001
685
- elif abs(result) > 0.10:
686
- xi += 0.00001
687
- else:
688
- xi += 0.000001
689
-
690
- print("Ned", self.NEd_GZG)
691
- print("xi",xi)
692
- print("Sum H", result)
693
- print("MEds - GZG", self.MEds_GZG)
694
- print("NEd - GZG", self.NEd_GZG)
695
-
696
- print("Fcd", self.F_ci)
697
- print("FP", self.F_p)
698
- print("Fs1" , self.F_s1)
699
- print("Fs2", self.F_s2)
700
-
701
-
702
- Laengs = Laengsbemessung(P_m_inf=0,A_p=37.8*0.01**2,d_p1=0.19)
703
-
704
- Laengs.Calculate_All()
705
-
706
- print("Fcd" ,Laengs.F_ci)
707
- print("Fs1",Laengs.F_s1)
708
- print("Fs2",Laengs.F_s2)
709
- print("NEd",Laengs.NEd_GZG)
710
-
711
- print("Sigma_s1 [MPa]", Laengs.F_s1 / (Laengs.A_svorh*0.01**2))
712
- print("Sigma_s2 [MPa]", Laengs.F_s2 / (Laengs.A_svorh2*0.01**2))
713
-
714
- print(Laengs.MEds_GZG)
715
-
716
- print(Laengs.z_su)
717
- print(Laengs.d_s1)
718
- print(Laengs.d_s2)
719
-
720
- Laengs.PlotCrossSection()
721
-
722
- # Laengs.Iter_Gebrauchslast_Spannbeton()
723
-