kib-lap 0.7__tar.gz

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