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,648 +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
- from Materialkennwerte_Beton import Baustoffe
8
-
9
- class Laengsbemessung:
10
- def __init__(
11
- self,
12
- fck=30,
13
- fyk=500,
14
- varphi_cal = 0,
15
- epsilon_cs = 0,
16
- _LoadingType="csv",
17
- Iter="Bruch",
18
- Reinforcement="csv",
19
- Querschnittsbemessung="Polygon",
20
- P_m_inf = 0, A_p = 0, d_p1 = 0
21
- ):
22
- """_summary_
23
-
24
- Args:
25
- fck (int, optional): Charateristic compression strength of concrete material. Defaults to 30.
26
- fyk (int, optional): _description_. Defaults to 500.
27
- varphi_cal (int, optional): _description_. Defaults to 0.
28
- epsilon_cs (int, optional): _description_. Defaults to 0.
29
- _LoadingType (str, optional): _description_. Defaults to "csv".
30
- Iter (str, optional): _description_. Defaults to "Bruch".
31
- Reinforcement (str, optional): _description_. Defaults to "csv".
32
- Querschnittsbemessung (str, optional): _description_. Defaults to "Polygon".
33
- P_m_inf (int, optional): _description_. Defaults to 0.
34
- A_p (int, optional): _description_. Defaults to 0.
35
- d_p1 (int, optional): _description_. Defaults to 0.
36
- """
37
- # Calculation mode
38
- self.Iter = Iter
39
- # Material properties from input
40
- self.fck = fck
41
- self.fyk = fyk
42
- self.varepsilon_grenz = 2 # In Permille
43
- self.n_czone = 100
44
- # Init design values for loading
45
- self.LoadingType = _LoadingType
46
-
47
- self.NEd_GZT = 0
48
- self.MEd_GZT = 0
49
- self.MEds_GZT = 0
50
- self.Mrds_GZT = 0
51
-
52
- self.NEd_GZG = 0
53
- self.MEd_GZG = 0
54
- self.MEds_GZG = 0
55
-
56
- self.PM_inf = P_m_inf
57
-
58
-
59
-
60
- # Geometric parameters for the design
61
- self.Bewehrung = Reinforcement
62
-
63
- self.d_s1 = 0
64
- self.d_s2 = 0
65
- self.dp_1 = d_p1 # Abstand der Außenkante Biegezug bis elast. Zentrum des Spannglieds
66
-
67
- self.A_svorh = 0
68
- self.A_svorh2 = 0
69
-
70
- self.Ap = A_p
71
- try:
72
- self.epsilon_pm_inf = abs(self.PM_inf / self.Ap * 1/ self.Ep ) #Vordehnung
73
- except:
74
- self.epsilon_pm_inf = 0
75
- self.epsilon_yk = 1500/195000 # Für St 1550/1770
76
-
77
- def Calculate_All(self):
78
- self.Querschnittswerte()
79
- self.Bewehrungsangaben()
80
- self.Baustoffe()
81
- self.ReadLoading()
82
-
83
- # if self.Iter == "Bruch":
84
- # self.Iter_Compression()
85
- # else:
86
- # self.Iter_Gebrauchslast()
87
-
88
- def Querschnittswerte(self, _height_test=0.5):
89
- # Example usage
90
- df = pd.read_csv("Polygon/Polygon.csv")
91
- self.vertices = df.values.tolist()
92
-
93
- self.polygon = PolygonSection(self.vertices)
94
-
95
- # Calculate the height of the polygon based on y-values
96
-
97
- y_values = [vertex[1] for vertex in self.vertices]
98
- self.height = abs(max(y_values) - min(y_values))
99
- self.z_su = self.height - self.polygon.centroid[0]
100
- self.z_so = self.height - self.z_su
101
-
102
- # Define the rotation angle
103
- self.angle_degrees = 0
104
- self.polygon.rotate(self.angle_degrees)
105
-
106
- height = _height_test
107
- section_width = self.polygon.calculate_section_width_at_height(height)
108
-
109
- return section_width
110
-
111
- def PlotCrossSection(self, _height_test=0.5):
112
- # Define the height at which to calculate the section width
113
- height = _height_test
114
- section_width = self.polygon.calculate_section_width_at_height(height)
115
- print(
116
- f"Section width at height {height} after rotating by {self.angle_degrees} degrees: {section_width}"
117
- )
118
-
119
- # Plot the polygon and the horizontal line
120
- self.polygon.plot(height)
121
-
122
- def Bewehrungsangaben(self):
123
- if self.Bewehrung == "csv":
124
- df = pd.read_csv("Bewehrung/Linienbewehrung.csv")
125
- print(df)
126
- for i in range(0, len(df["Lage"]), 1):
127
- Lage = df["Lage"][i]
128
- if Lage == "Unten":
129
- self.d_s1 = (
130
- df["dsl [m]"][i] * 0.5 + df["cnom [m]"][i] + df["dsw [m]"][i]
131
- )
132
- self.A_svorh = df["As [cm**2]"][i]
133
- elif Lage == "Oben":
134
- self.d_s2 = (
135
- df["dsl [m]"][i] * 0.5 + df["cnom [m]"][i] + df["dsw [m]"][i]
136
- )
137
- self.A_svorh2 = df["As [cm**2]"][i]
138
-
139
- self.z_ds1 = self.z_su - self.d_s1
140
- self.z_ds2 = self.z_so - self.d_s2
141
-
142
- def ReadLoading(self):
143
- if self.LoadingType == "csv":
144
- df = pd.read_csv("Lasteingabe/Lasten.csv")
145
- print(df)
146
- self.Zugseite = None
147
- for i in range(0, len(df["Grenzzustand"]), 1):
148
- if df["Grenzzustand"][i] == "GZT":
149
- self.NEd_GZT = df["NEd in [MN]"][i]
150
- self.MEd_GZT = df["MEd in [MNm]"][i]
151
- elif df["Grenzzustand"][i] == "GZG":
152
- self.NEd_GZG = df["NEd in [MN]"][i]
153
- self.MEd_GZG = df["MEd in [MNm]"][i]
154
-
155
- if self.MEd_GZT >= 0:
156
- self.MEds_GZT = abs(
157
- self.MEd_GZT - self.NEd_GZT * self.z_ds1 + self.PM_inf * (self.dp_1 - self.d_s1)
158
- ) # Bezug auf die Biegezugbewehrung (Hier UNTEN)
159
- self.NEd_GZT -= self.PM_inf
160
- self.Zugseite_GZT = "UNTEN"
161
- self.d = self.height - self.d_s1
162
- elif self.MEd_GZT < 0:
163
- self.MEds_GZT = abs(
164
- self.MEd_GZT + self.NEd_GZT * self.z_ds2 - self.PM_inf * (self.dp_1 - self.d_s1)
165
- ) # Bezug auf die Biegezugbewehrung (Hier OBEN)
166
- self.NEd_GZT -= self.PM_inf
167
- self.Zugseite_GZT = "OBEN"
168
- self.d = self.height - self.d_s2
169
-
170
- if self.MEd_GZG >= 0:
171
- self.MEds_GZG = self.MEd_GZG - self.NEd_GZG * self.z_ds1 + self.PM_inf * (self.dp_1 - self.d_s1)
172
- self.NEd_GZG -= self.PM_inf
173
- self.Zugseite_GZG = "UNTEN"
174
- self.d = self.height - self.d_s1
175
- elif self.MEd_GZG < 0:
176
- self.MEds_GZG = self.MEd_GZG + self.NEd_GZG * self.z_ds2 - self.PM_inf * (self.dp_1 - self.d_s1)
177
- self.NEd_GZG -= self.PM_inf
178
- self.Zugseite_GZG = "OBEN"
179
- self.d = self.height - self.d_s2
180
-
181
- else:
182
- self.NEd_GZT = float(
183
- input("Geben Sie die Normalkraft NEd im GZT in [MN] ein: \n")
184
- )
185
- self.MEd_GZT = float(
186
- input("Geben Sie das Biegemoment im GZT in [MN] ein: \n")
187
- )
188
- if self.MEd_GZT >= 0:
189
- self.MEds_GZT = self.MEd_GZT - self.NEd_GZT * self.z_ds1
190
- elif self.MEd_GZT < 0:
191
- self.MEds_GZT = self.MEd_GZT + self.NEd_GZT * self.z_ds1
192
-
193
- if self.MEd_GZG >= 0:
194
- self.MEds_GZG = self.MEd_GZG - self.NEd_GZG * self.z_ds1
195
- elif self.MEd_GZG < 0:
196
- self.MEds_GZG = self.MEd_GZG + self.NEd_GZG * self.z_ds1
197
-
198
- # Export loading parameters to the output folder
199
- self.zsi_GZT = None
200
- self.zsi_GZG = None
201
-
202
- if self.Zugseite_GZT == "UNTEN":
203
- self.zsi_GZT = self.z_ds1
204
- else:
205
- self.zsi_GZT = self.z_ds2
206
-
207
- if self.Zugseite_GZG == "UNTEN":
208
- self.zsi_GZG = self.z_ds1
209
- else:
210
- self.zsi_GZG = self.z_ds2
211
-
212
- df = pd.DataFrame(
213
- {
214
- "GZT": [
215
- self.NEd_GZT,
216
- self.MEd_GZT,
217
- self.zsi_GZT,
218
- self.MEds_GZT,
219
- self.Zugseite_GZT,
220
- ],
221
- "GZG": [
222
- self.NEd_GZG,
223
- self.MEd_GZG,
224
- self.zsi_GZG,
225
- self.MEds_GZG,
226
- self.Zugseite_GZG,
227
- ],
228
- },
229
- index=[
230
- "NEd [MN]",
231
- "MEd in [MNm]",
232
- "zsi in [m]",
233
- "|MEds| in [MNm]",
234
- "Zugseite",
235
- ],
236
- )
237
-
238
- df.to_csv("Output/Design_Forces.csv")
239
-
240
- def Sigma_ParabalRechteck(self, _varepsilon):
241
- if _varepsilon <= self.varepsilon_grenz:
242
- sigma = self.fcd * (1 - (1 - _varepsilon / self.varepsilon_grenz) ** 2)
243
- return sigma
244
- else:
245
- sigma = self.fcd
246
- return sigma
247
-
248
- def Sigma_Gebrauchslasten(self, _varepsilon):
249
- """
250
- This function returns the concrete stresses under
251
- servicability strains smaller than 0.5e-3.
252
- Args:
253
- _varepsilon (_type_): _description_
254
-
255
- Returns:
256
- _type_: _description_
257
- """
258
- return self.Ecm * _varepsilon * 1e-3
259
-
260
- def Iter_Compression(self):
261
- iter = 0
262
- self.epss = 25
263
- self.epsc = 0.00
264
- self.dimensionsless_moment = 0
265
- self.limit_dimensionless_moment = 0.296
266
- self.bcm_i = np.zeros(self.n_czone - 1)
267
- self.hcm_i = np.zeros(self.n_czone - 1)
268
-
269
- self.Fc_i = np.zeros(self.n_czone - 1)
270
-
271
- while self.Mrds <= self.Meds and iter <= 10000:
272
- self.xi = self.epsc / (self.epss + self.epsc)
273
- self.hu = self.height * (1 - self.xi)
274
-
275
- self.hc_i = np.linspace(self.hu, self.height, self.n_czone)
276
- self.Mrds = 0
277
-
278
- for i in range(0, self.n_czone - 1, 1):
279
- self.hcm_i[i] = 0.5 * (self.hc_i[i] + self.hc_i[i + 1])
280
- self.bcm_i[i] = 0.5 * (
281
- self.Querschnittswerte(self.hc_i[i])
282
- + self.Querschnittswerte(self.hc_i[i + 1])
283
- )
284
-
285
- for i in range(0, self.n_czone - 1, 1):
286
- epsilon_ci = abs(
287
- self.epss
288
- - (self.epsc + self.epss) / self.d * (self.hcm_i[i] - self.d_s1)
289
- )
290
- sigma_ci = self.Sigma_ParabalRechteck(epsilon_ci)
291
-
292
- self.Fc_i[i] = (
293
- (self.hc_i[i + 1] - self.hc_i[i]) * self.bcm_i[i] * sigma_ci
294
- )
295
-
296
- self.Mrds += self.Fc_i[i] * (self.hcm_i[i] - self.d_s1)
297
-
298
- iter += 1
299
-
300
- if self.epsc >= 3.5:
301
- while self.Mrds <= self.Meds and iter <= 10000:
302
- self.Mrds = 0
303
-
304
- self.xi = self.epsc / (self.epss + self.epsc)
305
- self.hu = self.height * (1 - self.xi)
306
- self.hc_i = np.linspace(self.hu, self.height, self.n_czone)
307
-
308
- for i in range(0, self.n_czone - 1, 1):
309
- self.hcm_i[i] = 0.5 * (self.hc_i[i] + self.hc_i[i + 1])
310
- self.bcm_i[i] = 0.5 * (
311
- self.Querschnittswerte(self.hc_i[i])
312
- + self.Querschnittswerte(self.hc_i[i + 1])
313
- )
314
- epsilon_ci = abs(
315
- self.epss
316
- - (self.epsc + self.epss)
317
- / self.d
318
- * (self.hcm_i[i] - self.d_s1)
319
- )
320
- sigma_ci = self.Sigma_ParabalRechteck(epsilon_ci)
321
- self.Fc_i[i] = (
322
- (self.hc_i[i + 1] - self.hc_i[i]) * self.bcm_i[i] * sigma_ci
323
- )
324
-
325
- self.Mrds += self.Fc_i[i] * (self.hcm_i[i] - self.d_s1)
326
-
327
- iter += 1
328
-
329
- if abs(self.Mrds - self.Meds) > 0.15:
330
- self.epss -= 0.1
331
- elif abs(self.Mrds - self.Meds) > 0.02:
332
- self.epss -= 0.01
333
- else:
334
- self.epss -= 0.001
335
-
336
- if abs(self.Mrds - self.Meds) > 0.15:
337
- self.epsc += 0.1
338
- elif abs(self.Mrds - self.Meds) > 0.02:
339
- self.epsc += 0.01
340
- else:
341
- self.epsc += 0.0001
342
-
343
- self.F_sd = self.Fc_i.sum() + self.NEd
344
- self.A_serf = self.F_sd / self.fyd
345
-
346
- print(
347
- "The required reinforcement for bending is ",
348
- self.A_serf * 100**2,
349
- "cm**2",
350
- )
351
-
352
- def Iter_Gebrauchslast(self):
353
- iter = 0
354
-
355
- self.bcm_i = np.zeros(self.n_czone - 1)
356
- self.hcm_i = np.zeros(self.n_czone - 1)
357
- self.zcm_i = np.zeros(self.n_czone - 1)
358
- self.eps_zwischen = np.zeros(self.n_czone - 1)
359
- self.Fc_i = np.zeros(self.n_czone - 1)
360
-
361
- self.Fc_ges = 0
362
- self.F_c_list = []
363
- self.F_s1_ges = 0
364
- self.F_s1_list = []
365
-
366
- sum_h = []
367
- sum_F_s1 = []
368
- sum_F_s2 = []
369
- sum_F_c = []
370
-
371
- xi = 1e-4
372
- result = 1
373
-
374
- print("Iteration begins")
375
- p = 0
376
- while xi < 0.70:
377
- x = xi * self.d
378
- self.hu = self.height * (1 - xi)
379
- self.hc_i = np.linspace(self.hu, self.height, self.n_czone)
380
-
381
- for i in range(0, self.n_czone - 1, 1):
382
- self.hcm_i[i] = 0.5 * (self.hc_i[i] + self.hc_i[i + 1])
383
- self.bcm_i[i] = 0.5 * (
384
- self.Querschnittswerte(self.hc_i[i])
385
- + self.Querschnittswerte(self.hc_i[i + 1])
386
- )
387
- self.zcm_i[i] = self.d -x + x/self.n_czone * (i+1)
388
-
389
- self.eps_zwischen[i] = (i+1)/(self.n_czone+1) * self.bcm_i[i] * (self.hc_i[1] - self.hc_i[0]) * self.Ecm * self.zcm_i[i]
390
-
391
-
392
- epsilon_c2 = self.MEds_GZG / (
393
- self.eps_zwischen.sum()
394
- + self.Es
395
- * (1 - self.d_s2 / x)
396
- * (self.d - self.d_s2)
397
- * self.A_svorh2
398
- * 0.01**2
399
- )
400
-
401
-
402
-
403
- epsilon_s1 = epsilon_c2 * (self.d / x - 1)
404
- epsilon_s2 = epsilon_c2 * (1 - self.d_s2 / x)
405
-
406
- self.F_ci = 0
407
- self.epc_i= np.zeros(self.n_czone - 1)
408
- for i in range(0, self.n_czone-1, 1):
409
- self.epc_i[i] = epsilon_c2 * (i+1)/self.n_czone
410
- self.F_ci -= epsilon_c2 * (i+1)/(self.n_czone+1) * self.bcm_i[i] * (self.hc_i[1] - self.hc_i[0]) * self.Ecm
411
-
412
- if self.F_ci > 0:
413
- self.F_ci = 0
414
-
415
- self.F_s1 = (self.A_svorh * 0.01**2) * epsilon_s1 * self.Es
416
- self.F_s2 = epsilon_s2 * self.Es * self.A_svorh2 * 0.01**2 * (-1)
417
-
418
- result = - self.NEd_GZG + self.F_s1 + self.F_ci + self.F_s2
419
-
420
- sum_h.append(result)
421
- sum_F_s1.append(self.F_s1)
422
- sum_F_s2.append(self.F_s2)
423
- sum_F_c.append(self.F_ci)
424
-
425
- if abs(result) < 0.0001:
426
- print("The iterated compression zone height xi is ", xi ,"and x = ", xi*self.d)
427
- self.xi = xi
428
- break
429
- if abs(result) > 0.5:
430
- xi += 0.01
431
- elif abs(result) > 0.01:
432
- xi += 0.001
433
- else:
434
- xi += 0.00001
435
-
436
-
437
- p+=1
438
-
439
- self.epsilon_c2_end = epsilon_c2
440
-
441
- plt.plot(self.epc_i)
442
- plt.show()
443
- print(xi)
444
-
445
- def Iter_Gebrauchslast_Rect(self):
446
- iter = 0
447
-
448
- self.bcm_i = np.zeros(self.n_czone - 1)
449
- self.hcm_i = np.zeros(self.n_czone - 1)
450
- self.Fc_i = np.zeros(self.n_czone - 1)
451
-
452
- self.Fc_ges = 0
453
- self.F_c_list = []
454
- self.F_s1_ges = 0
455
- self.F_s1_list = []
456
-
457
- sum_h = []
458
- sum_F_s1 = []
459
- sum_F_s2 = []
460
- sum_F_c = []
461
-
462
- resu = []
463
-
464
- Flag_One = False
465
- Flag_Two = False
466
- Flag_Three = False
467
-
468
- b = self.Querschnittswerte(self.height / 2)
469
- xi = 1e-4
470
- result = 1
471
-
472
- print("Iteration begins")
473
- p = 0
474
- while xi < 0.70:
475
- x = xi * self.d
476
-
477
- epsilon_c2 = self.MEds_GZG / (
478
- (self.d - x / 3) * (0.5 * b * x * self.Ecm)
479
- + self.Es
480
- * (1 - self.d_s2 / x)
481
- * (self.d - self.d_s2)
482
- * self.A_svorh2
483
- * 0.01**2
484
- )
485
-
486
- sigma_c2 = epsilon_c2 * self.Ecm
487
- epsilon_s1 = epsilon_c2 * (self.d / x - 1)
488
- epsilon_s2 = epsilon_c2 * (1 - self.d_s2 / x)
489
-
490
- self.F_ci = 0.5 * b * x * sigma_c2 * (-1)
491
- if self.F_ci > 0:
492
- self.F_ci = 0
493
-
494
- self.F_s1 = (self.A_svorh * 0.01**2) * epsilon_s1 * self.Es
495
- self.F_s2 = epsilon_s2 * self.Es * self.A_svorh2 * 0.01**2 * (-1)
496
-
497
- result = - self.NEd_GZG + self.F_s1 + self.F_ci + self.F_s2
498
-
499
- sum_h.append(result)
500
- sum_F_s1.append(self.F_s1)
501
- sum_F_s2.append(self.F_s2)
502
- sum_F_c.append(self.F_ci)
503
-
504
- if abs(result) < 0.0001:
505
- print("The iterated compression zone height xi is ", xi ,"and x = ", xi*self.d)
506
- self.xi = xi
507
- break
508
-
509
- if abs(result) > 0.5:
510
- xi += 0.01
511
- elif abs(result) > 0.01:
512
- xi += 0.001
513
- else:
514
- xi += 0.0001
515
-
516
-
517
- p+=1
518
- self.epsilon_c2_end = epsilon_c2
519
- print(xi)
520
-
521
- def Iter_Gebrauchslast_Spannbeton(self):
522
- iter = 0
523
-
524
- self.bcm_i = np.zeros(self.n_czone - 1)
525
- self.hcm_i = np.zeros(self.n_czone - 1)
526
- self.Fc_i = np.zeros(self.n_czone - 1)
527
-
528
- self.Fc_ges = 0
529
- self.F_c_list = []
530
- self.F_s1_ges = 0
531
- self.F_s1_list = []
532
-
533
- sum_h = []
534
- sum_F_s1 = []
535
- sum_F_s2 = []
536
- sum_F_c = []
537
- sum_F_p = []
538
-
539
- xi = 1e-5
540
-
541
- b = self.Querschnittswerte(self.height / 2)
542
- print("Iteration begins")
543
-
544
- while xi < 0.60:
545
- x = xi * self.d
546
- epsilon_c2 = self.MEds_GZG / (
547
- (self.d - x / 3) * (0.5 * b * x * self.Ecm)
548
- + self.Es
549
- * (1 - self.d_s2 / x)
550
- * (self.d - self.d_s2)
551
- * self.A_svorh2
552
- * 0.01**2
553
-
554
- )
555
-
556
- sigma_c2 = epsilon_c2 * self.Ecm
557
- epsilon_s1 = epsilon_c2 * (self.d / x - 1)
558
- epsilon_s2 = epsilon_c2 * (1 - self.d_s2 / x)
559
-
560
- epsilon_p = epsilon_c2 + (abs(epsilon_c2) + epsilon_s1)/self.d * (self.height - self.dp_1) # Additional strains in the prestressing cable
561
-
562
- self.F_ci = 0.5 * b * x * sigma_c2
563
-
564
- if self.F_ci < 0:
565
- self.F_ci = 0
566
- if (epsilon_s1 * self.Es <= self.fyk):
567
- self.F_s1 = (self.A_svorh * 0.01**2) * epsilon_s1 * self.Es
568
- else:
569
- self.F_s1 = (self.A_svorh * 0.01**2) * self.fyk
570
- if (epsilon_s2 * self.Es <= self.fyk):
571
- self.F_s2 = epsilon_s2 * self.Es * self.A_svorh2 * 0.01**2
572
- else:
573
- self.F_s2 = - self.fyk * self.A_svorh2 * 0.01**2
574
-
575
- if (abs(epsilon_p +self.epsilon_pm_inf) <= self.epsilon_yk):
576
- self.F_p = abs((epsilon_p)) * self.Ep * self.Ap
577
- else:
578
- self.F_p = 1500 * self.Ap
579
-
580
- result = -self.NEd_GZG + self.F_s1 - self.F_ci + self.F_s2 + self.F_p
581
-
582
- sum_h.append(result)
583
- sum_F_s1.append(self.F_s1)
584
- sum_F_s2.append(self.F_s2)
585
- sum_F_c.append(self.F_ci)
586
-
587
- if abs(result) < 0.0001:
588
- print("The iterated compression zone height xi is ", xi)
589
- self.xi = xi
590
- break
591
-
592
-
593
- if abs(result) > 0.7:
594
- xi += 0.0001
595
- elif abs(result) > 0.10:
596
- xi += 0.00001
597
- else:
598
- xi += 0.000001
599
-
600
- print("Ned", self.NEd_GZG)
601
- print("xi",xi)
602
- print("Sum H", result)
603
- print("MEds - GZG", self.MEds_GZG)
604
- print("NEd - GZG", self.NEd_GZG)
605
-
606
- print("Fcd", self.F_ci)
607
- print("FP", self.F_p)
608
- print("Fs1" , self.F_s1)
609
- print("Fs2", self.F_s2)
610
-
611
-
612
- Laengs = Laengsbemessung(P_m_inf=0,A_p=37.8*0.01**2,d_p1=0.19)
613
-
614
- Laengs.Calculate_All()
615
-
616
- Laengs.Iter_Gebrauchslast()
617
-
618
- print("RESULTS ITERATION")
619
- print("Fcd" ,Laengs.F_ci)
620
- print("Fs1",Laengs.F_s1)
621
- print("Fs2",Laengs.F_s2)
622
- print("NEd",Laengs.NEd_GZG)
623
-
624
- print("eps2", Laengs.epsilon_c2_end)
625
-
626
- print("z_cm_i")
627
- plt.plot(Laengs.zcm_i)
628
- plt.show()
629
-
630
- print("Sigma_s1 [MPa]", Laengs.F_s1 / (Laengs.A_svorh*0.01**2))
631
- print("Sigma_s2 [MPa]", Laengs.F_s2 / (Laengs.A_svorh2*0.01**2))
632
-
633
-
634
- Laengs.Iter_Gebrauchslast_Rect()
635
-
636
- print("RESULTS - SEMI_ANALYTICAL")
637
-
638
- print("Fcd" ,Laengs.F_ci)
639
- print("Fs1",Laengs.F_s1)
640
- print("Fs2",Laengs.F_s2)
641
- print("NEd",Laengs.NEd_GZG)
642
-
643
- print("eps2", Laengs.epsilon_c2_end)
644
-
645
- print("Sigma_s1 [MPa]", Laengs.F_s1 / (Laengs.A_svorh*0.01**2))
646
- print("Sigma_s2 [MPa]", Laengs.F_s2 / (Laengs.A_svorh2*0.01**2))
647
-
648
-