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
@@ -0,0 +1,527 @@
1
+ import numpy as np
2
+ import pandas as pd
3
+ from tabulate import tabulate
4
+
5
+
6
+ class CrossSectionThin:
7
+ def __init__(
8
+ self,
9
+ E,
10
+ nu,
11
+ node_param_csv="Querschnittseingabe/Knoten.csv",
12
+ element_param_csv="Querschnittseingabe/Elemente.csv",
13
+ Speichername=None,
14
+ ):
15
+ self.x = 0
16
+ self.y = 0
17
+ self.node = 0
18
+
19
+ self.Node_Cords = 0
20
+ self.CrossSectionElements = 0
21
+ # Read the element and node input parameters
22
+ self.Node_Cords = pd.DataFrame(pd.read_csv(node_param_csv))
23
+ self.CrossSectionElements = pd.DataFrame(pd.read_csv(element_param_csv))
24
+
25
+ # Material parameters
26
+ self.E = E
27
+ self.nu = nu
28
+ self.G = self.E / (2 * (1 + self.nu))
29
+ # Initialize Elastic Cross Section Values
30
+
31
+ self.Speichername = Speichername
32
+
33
+ def read_node_input(self):
34
+ self.CrossSectionElements["ya"] = 0
35
+ self.CrossSectionElements["ye"] = 0
36
+ self.CrossSectionElements["ymi"] = 0
37
+ self.CrossSectionElements["za"] = 0
38
+ self.CrossSectionElements["ze"] = 0
39
+ self.CrossSectionElements["zmi"] = 0
40
+ self.CrossSectionElements["l_i"] = 0 # Längenspalte
41
+ self.CrossSectionElements["sin_bet_i"] = 0
42
+ self.CrossSectionElements["cos_bet_i"] = 0
43
+ self.CrossSectionElements["A_i"] = 0
44
+ self.CrossSectionElements["A_z_i"] = 0
45
+ self.CrossSectionElements["A_y_i"] = 0
46
+
47
+ self.CrossSectionElements["I_yy_ET"] = 0
48
+ self.CrossSectionElements["I_zz_ET"] = 0
49
+ self.CrossSectionElements["I_yz_ET"] = 0
50
+
51
+ self.CrossSectionElements["zM0"] = 0 # Schätzung für den Schubmittelpunkt
52
+ self.CrossSectionElements["yM0"] = 0
53
+ self.CrossSectionElements["rT0"] = 0
54
+
55
+ for i in range(0, len(self.CrossSectionElements["nr"]), 1):
56
+ nr_a = self.CrossSectionElements["npa"][i]
57
+ nr_e = self.CrossSectionElements["npe"][i]
58
+ # Nodal properties
59
+ ya = float(self.Node_Cords["y"][self.Node_Cords["Nr."] == nr_a])
60
+ ye = float(self.Node_Cords["y"][self.Node_Cords["Nr."] == nr_e])
61
+ za = float(self.Node_Cords["z"][self.Node_Cords["Nr."] == nr_a])
62
+ ze = float(self.Node_Cords["z"][self.Node_Cords["Nr."] == nr_e])
63
+ t = float(self.CrossSectionElements["t [m]"][i])
64
+ # Geometric properties
65
+ l = np.sqrt((ye - ya) ** 2 + (ze - za) ** 2)
66
+ sin_beta = (ze - za) / l
67
+ cos_beta = (ye - ya) / l
68
+ A = l * float(t)
69
+ # Insert in Dataframe / Dictionary
70
+ self.CrossSectionElements["A_i"][i] = A
71
+ self.CrossSectionElements["sin_bet_i"][i] = sin_beta
72
+ self.CrossSectionElements["cos_bet_i"][i] = cos_beta
73
+ self.CrossSectionElements["l_i"][i] = l
74
+
75
+ self.CrossSectionElements["ya"][i] = ya
76
+ self.CrossSectionElements["ye"][i] = ye
77
+ self.CrossSectionElements["ymi"][i] = 0.5 * (ya + ye)
78
+ self.CrossSectionElements["za"][i] = za
79
+ self.CrossSectionElements["ze"][i] = ze
80
+ self.CrossSectionElements["zmi"][i] = 0.5 * (za + ze)
81
+
82
+ self.CrossSectionElements["A_z_i"][i] = A * 0.5 * (za + ze)
83
+ self.CrossSectionElements["A_y_i"][i] = A * 0.5 * (ya + ye)
84
+
85
+ if sin_beta != 0:
86
+ self.CrossSectionElements["I_yy_ET"][i] = A / 12 * (ze - za) ** 2
87
+ else:
88
+ self.CrossSectionElements["I_yy_ET"][i] = A * t**2 / 12
89
+
90
+ if cos_beta != 0:
91
+ self.CrossSectionElements["I_zz_ET"][i] = A / 12 * (ye - ya) ** 2
92
+ else:
93
+ self.CrossSectionElements["I_zz_ET"][i] = A * t**2 / 12
94
+
95
+ self.CrossSectionElements["rT0"][i] = (
96
+ self.CrossSectionElements["ymi"][i]
97
+ - self.CrossSectionElements["yM0"][i]
98
+ ) * sin_beta - (
99
+ self.CrossSectionElements["zmi"][i]
100
+ - self.CrossSectionElements["zM0"][i]
101
+ ) * cos_beta
102
+
103
+ self.A_ges = self.CrossSectionElements["A_i"].sum()
104
+ A_z_i = self.CrossSectionElements["A_z_i"].sum()
105
+ A_y_i = self.CrossSectionElements["A_y_i"].sum()
106
+
107
+ self.ym = A_y_i / self.A_ges
108
+ self.y_re = (
109
+ max(self.CrossSectionElements["ye"].max(),self.CrossSectionElements["ya"].max())
110
+ - self.ym
111
+ )
112
+ self.y_li = (
113
+ min(self.CrossSectionElements["ye"].min(),self.CrossSectionElements["ya"].min())
114
+ - self.ym
115
+ )
116
+
117
+ self.zm = A_z_i / self.A_ges
118
+ self.z_so = (
119
+ min(self.CrossSectionElements["ze"].min(),self.CrossSectionElements["za"].min())
120
+ - self.zm
121
+ )
122
+
123
+
124
+ self.z_su = (
125
+ max(self.CrossSectionElements["ze"].max(),self.CrossSectionElements["za"].max())
126
+ -self.zm
127
+ )
128
+
129
+ self.I_yy = 0
130
+ self.I_zz = 0
131
+ self.I_yz = 0
132
+
133
+ for i in range(0, len(self.CrossSectionElements["nr"]), 1):
134
+ # I_yy
135
+ self.I_yy += self.CrossSectionElements["I_yy_ET"][i]
136
+ self.I_yy += (
137
+ self.zm - self.CrossSectionElements["zmi"][i]
138
+ ) ** 2 * self.CrossSectionElements["A_i"][i]
139
+ # I_zz
140
+ self.I_zz += self.CrossSectionElements["I_zz_ET"][i]
141
+ self.I_zz += (
142
+ self.ym - self.CrossSectionElements["ymi"][i]
143
+ ) ** 2 * self.CrossSectionElements["A_i"][i]
144
+ # I_yz
145
+
146
+
147
+ def CalculateElementStiffness(self):
148
+ K_e = np.zeros((2, 2))
149
+ f_th_e = np.zeros(2)
150
+ # Storage matrix for ther element stifness matrices
151
+ self.K_e_ges = np.zeros((len(self.CrossSectionElements["nr"]), 2, 2))
152
+ self.f_th_ges = np.zeros((len(self.CrossSectionElements["nr"]), 2, 1))
153
+ self.f_e_ges = np.zeros((len(self.CrossSectionElements["nr"]), 2, 1))
154
+
155
+ for i in range(0, len(self.CrossSectionElements["nr"]), 1):
156
+ t_el = self.CrossSectionElements["t [m]"][i]
157
+ l_el = self.CrossSectionElements["l_i"][i]
158
+
159
+ K_e[0][0] = 1 * self.G * t_el / l_el
160
+ K_e[1][1] = K_e[0][0]
161
+ K_e[1][0] = -1 * self.G * t_el / l_el
162
+ K_e[0][1] = K_e[1][0]
163
+
164
+ self.K_e_ges[i] = K_e
165
+
166
+ # Lastvektor für die Wölbordinate
167
+ r_t_el = self.CrossSectionElements["rT0"][i]
168
+ self.f_th_ges[i][0] = self.G * t_el * r_t_el * (-1)
169
+ self.f_th_ges[i][1] = self.G * t_el * r_t_el * (1)
170
+
171
+ def Calculate_GesMat(self):
172
+ no_nodes = len(self.Node_Cords["Nr."])
173
+
174
+ self.Gesmat = np.zeros((no_nodes, no_nodes))
175
+ self.GesLoadVec = np.zeros(no_nodes)
176
+
177
+ for k in range(0, len(self.CrossSectionElements["nr"]), 1):
178
+ i = int(self.CrossSectionElements["npa"][k] - 1)
179
+ j = int(self.CrossSectionElements["npe"][k] - 1)
180
+
181
+ # Stiffness matrix
182
+ self.Gesmat[i][i] += self.K_e_ges[k][0][0]
183
+ self.Gesmat[i][j] += self.K_e_ges[k][0][1]
184
+ self.Gesmat[j][i] += self.K_e_ges[k][1][0]
185
+ self.Gesmat[j][j] += self.K_e_ges[k][1][1]
186
+ # Load vector f_th
187
+ self.GesLoadVec[i] += self.f_th_ges[k][0]
188
+ self.GesLoadVec[j] += self.f_th_ges[k][1]
189
+
190
+
191
+
192
+ def SolverTorsion(self):
193
+ self.Gesmat[0][0:] = 0
194
+ self.Gesmat[1][0] = 0
195
+ self.Gesmat[0][
196
+ 0
197
+ ] = 1e30 # Einen FHG auf 1e9 setzen -> Analog zum Streichen der Zeile
198
+
199
+ self.omega_start = np.linalg.solve(self.Gesmat, self.GesLoadVec)
200
+
201
+
202
+ def CalculateAyzw(self):
203
+ num_elem = len(self.CrossSectionElements["nr"])
204
+ self.A_omega = 0
205
+ self.A_zomega = 0
206
+ self.A_yomega = 0
207
+
208
+ for k in range(0, num_elem, 1):
209
+ i = int(self.CrossSectionElements["npa"][k] - 1)
210
+ j = int(self.CrossSectionElements["npe"][k] - 1)
211
+ A_e = self.CrossSectionElements["A_i"][k]
212
+ # Omega Values
213
+ omega_a = self.omega_start[i]
214
+ omega_b = self.omega_start[j]
215
+ # y-Value Ayomega
216
+ z_a = self.CrossSectionElements["za"][k]
217
+ z_b = self.CrossSectionElements["ze"][k]
218
+ # z-Values
219
+ y_a = self.CrossSectionElements["ya"][k]
220
+ y_b = self.CrossSectionElements["ye"][k]
221
+ # Summation
222
+ self.A_omega += 0.5 * (omega_a + omega_b) * A_e
223
+ self.A_zomega += (
224
+ 1 / 6 * ((2 * z_a + z_b) * omega_a + (z_a + 2 * z_b) * omega_b) * A_e
225
+ )
226
+ self.A_yomega += (
227
+ 1 / 6 * ((2 * y_a + y_b) * omega_a + (y_a + 2 * y_b) * omega_b) * A_e
228
+ )
229
+
230
+ self.omega_k = self.A_omega / self.A_ges
231
+ self.Delta_ZM = self.A_yomega / self.I_zz * (-1) # Vorzeichen beachten!
232
+ self.Delta_YM = self.A_zomega / self.I_yy
233
+
234
+ def Update_SMP(self):
235
+ self.CrossSectionElements["zM0"] += self.Delta_ZM
236
+ self.CrossSectionElements["yM0"] += self.Delta_YM
237
+ self.CrossSectionElements["rT"] = 0
238
+ self.CrossSectionElements["omeg_a"] = 0
239
+ self.CrossSectionElements["omeg_b"] = 0
240
+
241
+ for i in range(0, len(self.CrossSectionElements["nr"]), 1):
242
+ nr_a = self.CrossSectionElements["npa"][i]
243
+ nr_e = self.CrossSectionElements["npe"][i]
244
+ # Nodal properties
245
+ ya = float(self.Node_Cords["y"][self.Node_Cords["Nr."] == nr_a])
246
+ ye = float(self.Node_Cords["y"][self.Node_Cords["Nr."] == nr_e])
247
+ za = float(self.Node_Cords["z"][self.Node_Cords["Nr."] == nr_a])
248
+ ze = float(self.Node_Cords["z"][self.Node_Cords["Nr."] == nr_e])
249
+ t = float(self.CrossSectionElements["t [m]"][i])
250
+ # Geometric properties
251
+ l = np.sqrt((ye - ya) ** 2 + (ze - za) ** 2)
252
+ sin_beta = (ze - za) / l
253
+ cos_beta = (ye - ya) / l
254
+ A = l * float(t)
255
+ self.CrossSectionElements["rT"][i] = (
256
+ self.CrossSectionElements["ymi"][i]
257
+ - self.CrossSectionElements["yM0"][i]
258
+ ) * sin_beta - (
259
+ self.CrossSectionElements["zmi"][i]
260
+ - self.CrossSectionElements["zM0"][i]
261
+ ) * cos_beta
262
+
263
+ def Calculate_IwIt(self):
264
+ ne = len(self.CrossSectionElements["nr"])
265
+ self.I_w = 0
266
+ self.I_T_OFFEN = 0
267
+ self.I_T_GESCHLOSSEN = 0
268
+ for k in range(0, ne, 1):
269
+ i = int(self.CrossSectionElements["npa"][k] - 1)
270
+ j = int(self.CrossSectionElements["npe"][k] - 1)
271
+ t = self.CrossSectionElements["t [m]"][k]
272
+ # Omega Values
273
+ y_a = self.CrossSectionElements["ya"][k]
274
+ y_e = self.CrossSectionElements["ye"][k]
275
+ z_a = self.CrossSectionElements["za"][k]
276
+ z_e = self.CrossSectionElements["ze"][k]
277
+ omega_a = (
278
+ self.omega_start[i]
279
+ - self.omega_k
280
+ + self.Delta_ZM * y_a
281
+ - self.Delta_YM * z_a
282
+ )
283
+ omega_b = (
284
+ self.omega_start[j]
285
+ - self.omega_k
286
+ + self.Delta_ZM * y_e
287
+ - self.Delta_YM * z_e
288
+ )
289
+ self.CrossSectionElements["omeg_a"][k] = omega_a
290
+ self.CrossSectionElements["omeg_b"][k] = omega_b
291
+ # I_w-Values
292
+ self.I_w += (
293
+ self.CrossSectionElements["l_i"][k]
294
+ * t
295
+ / 3
296
+ * (omega_a**2 + omega_a * omega_b + omega_b**2)
297
+ )
298
+
299
+ # Berechnung von IT_OFFEN
300
+ l = self.CrossSectionElements["l_i"][k]
301
+ t = self.CrossSectionElements["t [m]"][k]
302
+ self.I_T_OFFEN += 1 / 3 * l * t**3
303
+ # Berechnung IT_GESCHLOSSEN
304
+ l_z = z_e - z_a
305
+ l_y = y_e - y_a
306
+ yM = self.CrossSectionElements["yM0"][k]
307
+ zM = self.CrossSectionElements["zM0"][k]
308
+ r_tj = (y_a - yM) * l_z / l - (z_a - zM) * l_y / l
309
+
310
+ self.I_T_GESCHLOSSEN += r_tj * t * (r_tj * l + omega_a - omega_b)
311
+ self.I_T_GESAMT = self.I_T_GESCHLOSSEN + self.I_T_OFFEN
312
+
313
+ def Calculate_WoWu(self):
314
+ self.W_o = self.I_yy / self.z_so
315
+ self.W_u = self.I_yy / self.z_su
316
+ self.W_li = self.I_zz / self.y_li
317
+ self.W_re = self.I_zz / self.y_re
318
+
319
+ def Calculate_ShearStress_Vz(self):
320
+ # Load Vector for the Vz-Component
321
+ f_e_vz = np.zeros(2)
322
+ num_nodes = len(self.Node_Cords["Nr."])
323
+ self.f_e_vz = np.zeros(num_nodes)
324
+
325
+ num_elem = len(self.CrossSectionElements["nr"])
326
+ self.CrossSectionElements["ua_vz"] = 0
327
+ self.CrossSectionElements["ue_vz"] = 0
328
+ self.CrossSectionElements["F_a_elem"] = 0
329
+ self.CrossSectionElements["F_e_elem"] = 0
330
+
331
+ self.CrossSectionElements["tau_a_vz"] = 0
332
+ self.CrossSectionElements["tau_e_vz"] = 0
333
+
334
+ for k in range(0, num_elem, 1):
335
+ i = int(
336
+ self.CrossSectionElements["npa"][k] - 1
337
+ ) # Indices for the global load vector
338
+ j = int(self.CrossSectionElements["npe"][k] - 1)
339
+
340
+ l = self.CrossSectionElements["l_i"][k]
341
+ t = self.CrossSectionElements["t [m]"][k]
342
+
343
+ z_a = self.CrossSectionElements["za"][k] - self.zm
344
+ z_b = self.CrossSectionElements["ze"][k] - self.zm
345
+
346
+ self.f_e_vz[i] += (
347
+ (1 / 3 * z_a / self.I_yy + 1 / 6 * z_b / self.I_yy) * t * l
348
+ )
349
+ self.f_e_vz[j] += (
350
+ (1 / 6 * z_a / self.I_yy + 1 / 3 * z_b / self.I_yy) * t * l
351
+ )
352
+
353
+ self.CrossSectionElements.loc[k, "F_a_elem"] = z_a / self.I_yy
354
+ self.CrossSectionElements.loc[k, "F_e_elem"] = z_b / self.I_yy
355
+
356
+ # Solving for u_a / u_a for the vz-Component
357
+
358
+ self.u_sol = np.linalg.solve(self.Gesmat, self.f_e_vz)
359
+
360
+ # Entferne die erste Zeile und die erste Spalte der Matrix
361
+ reduced_matrix = self.Gesmat[1:, 1:]
362
+
363
+ # Entferne das erste Element des Vektors
364
+ reduced_vector = self.f_e_vz[1:]
365
+
366
+ # Löse das reduzierte Gleichungssystem
367
+ self.u_sol_red = np.linalg.solve(reduced_matrix, reduced_vector)
368
+
369
+ # Update of the nodal shear stress under a "1" load Vz
370
+ for k in range(0, num_elem, 1):
371
+ l = self.CrossSectionElements["l_i"][k]
372
+ i = int(
373
+ self.CrossSectionElements["npa"][k] - 1
374
+ ) # Indices for the global node deformation vector
375
+ j = int(self.CrossSectionElements["npe"][k] - 1)
376
+
377
+ u_a = self.u_sol[i]
378
+ u_b = self.u_sol[j]
379
+
380
+ F_a = self.CrossSectionElements["F_a_elem"][k]
381
+ F_b = self.CrossSectionElements["F_e_elem"][k]
382
+
383
+ self.CrossSectionElements["tau_a_vz"][k] = self.G / l * (
384
+ u_b - u_a
385
+ ) + l / 6 * (F_a * 2 + F_b * 1)
386
+ self.CrossSectionElements["tau_e_vz"][k] = self.G / l * (
387
+ u_b - u_a
388
+ ) - l / 6 * (F_a * 1 + F_b * 2)
389
+
390
+ def Calculate_imryrzrw(self):
391
+ """
392
+ Function to calculate the geometric lengths for \n
393
+ the calculation of geometric nonlinear problems (TH.II.Order) \n
394
+ im =
395
+ ry =
396
+ rz =
397
+ rw =
398
+ For the values im,ry,rz the different lengths are calculated relative to the elastic centrum \n
399
+ For the rw-values the length is taken from the previous calculation, which is based on the \n
400
+ shear centre. \n
401
+ """
402
+ self.CrossSectionElements["im"] = 0
403
+ self.CrossSectionElements["ry"] = 0
404
+ self.CrossSectionElements["rz"] = 0
405
+ self.CrossSectionElements["rw"] = 0
406
+ self.CrossSectionElements["Ayyy"] = 0
407
+ self.CrossSectionElements["Ayzz"] = 0
408
+ self.CrossSectionElements["Azzz"] = 0
409
+ self.CrossSectionElements["Azyy"] = 0
410
+
411
+ for k in range(0, len(self.CrossSectionElements["nr"])):
412
+ ym_t = (
413
+ self.CrossSectionElements["ymi"][k] - self.ym
414
+ ) # Transformierte Querschnittsordinaten
415
+ zm_t = self.CrossSectionElements["zmi"][k] - self.zm
416
+ dy = self.CrossSectionElements["ye"][k] - self.CrossSectionElements["ya"][k]
417
+ dz = self.CrossSectionElements["ze"][k] - self.CrossSectionElements["za"][k]
418
+ omega_m = (
419
+ self.CrossSectionElements["omeg_a"][k]
420
+ + self.CrossSectionElements["omeg_b"][k]
421
+ ) * 0.5
422
+ domega = (
423
+ self.CrossSectionElements["omeg_b"][k]
424
+ - self.CrossSectionElements["omeg_a"][k]
425
+ )
426
+
427
+ A = self.CrossSectionElements["A_i"][k]
428
+ # A_XXX Params
429
+ A_yyy = ym_t**3 * A + ym_t * dy**2 * A / 4
430
+ A_yzz = (
431
+ ym_t * zm_t**2 * A + (ym_t * dz**2 + 2 * zm_t * dy * dz) * A / 12
432
+ )
433
+ A_zzz = zm_t**3 * A + zm_t * dz**2 * A / 4
434
+ A_zyy = (
435
+ zm_t * ym_t**2 * A + (zm_t * dy**2 + 2 * ym_t * dz * dy) * A / 12
436
+ )
437
+ A_yyom = (
438
+ ym_t**2 * omega_m * A
439
+ + (omega_m * dy**2 + 2 * ym_t * dy * domega) * A / 12
440
+ )
441
+ A_zzom = (
442
+ zm_t**2 * omega_m * A
443
+ + (omega_m * dz**2 + 2 * zm_t * dz * domega) * A / 12
444
+ )
445
+
446
+ self.CrossSectionElements["Ayyy"][k] = A_yyy
447
+ self.CrossSectionElements["Azzz"][k] = A_zzz
448
+ self.CrossSectionElements["Ayzz"][k] = A_yzz
449
+ self.CrossSectionElements["Azyy"][k] = A_zyy
450
+
451
+ self.CrossSectionElements["ry"][k] = (A_yyy + A_yzz) * 1 / self.I_zz
452
+ self.CrossSectionElements["rz"][k] = (A_zzz + A_zyy) * 1 / self.I_yy
453
+ self.CrossSectionElements["rw"][k] = (A_yyom + A_zzom) * 1 / self.I_w
454
+
455
+ YM = self.CrossSectionElements["yM0"][k] - self.ym
456
+ ZM = self.CrossSectionElements["zM0"][k] - self.zm
457
+ self.y_M = YM
458
+ self.z_M = ZM
459
+
460
+ self.rz = self.CrossSectionElements["rz"].sum() - 2 * ZM
461
+ self.ry = self.CrossSectionElements["ry"].sum() - 2 * YM
462
+ self.rw = self.CrossSectionElements["rw"].sum()
463
+
464
+
465
+ def Export_Controll_Data(self):
466
+ # nr,npa,npe,t [m],ya,ye,ymi,za,ze,zmi
467
+ df_0 = pd.DataFrame(
468
+ {
469
+ "nr": self.CrossSectionElements["nr"],
470
+ "npa": self.CrossSectionElements["npa"],
471
+ "ya": self.CrossSectionElements["ya"],
472
+ "ye": self.CrossSectionElements["ye"],
473
+ }
474
+ )
475
+
476
+ def Export_Cross_Section_Data(self, _unit="cm"):
477
+ unit = _unit
478
+ if unit == "cm":
479
+ df_Data_1 = pd.DataFrame(
480
+ {
481
+ "A": [f"{self.A_ges * 100**2:.2f}"],
482
+ "Iyy": [f"{self.I_yy * 100**4:.2f}"],
483
+ "Izz": [f"{self.I_zz * 100**4:.2f}"],
484
+ "zM": [f"{self.z_M * 100:.2f}"],
485
+ "yM": [f"{self.y_M * 100:.2f}"],
486
+ }
487
+ )
488
+ df_Data_1.to_csv(
489
+ f"Checks/Data/CrossSectionProperties_1_{self.Speichername}.txt",
490
+ index=False,
491
+ )
492
+
493
+ df_Data_2 = pd.DataFrame(
494
+ {
495
+ "IT": [f"{self.I_T_GESAMT * 100**4:.2f}", 230.4],
496
+ "Iw": [f"{self.I_w * 100**6:.2f}", 960000],
497
+ "rz": [f"{self.rz*100:.2f}", 28.40],
498
+ },
499
+ index=["Berechnet", "Erwartet"],
500
+ )
501
+
502
+ df_Data_2.to_csv(
503
+ f"Checks/Data/CrossSectionProperties_2_{self.Speichername}.txt",
504
+ index=False,
505
+ )
506
+
507
+
508
+ # Class = CrossSectionThin(
509
+ # 2.1e5,
510
+ # 0.3,
511
+ # "Querschnittseingabe/Knoten_3.csv",
512
+ # "Querschnittseingabe/Elemente_3.csv",
513
+ # "Lit_Ex_1",
514
+ # )
515
+ # Class.read_node_input()
516
+ # Class.CalculateElementStiffness()
517
+ # Class.Calculate_GesMat()
518
+ # Class.SolverTorsion()
519
+ # Class.CalculateAyzw()
520
+ # Class.Update_SMP()
521
+ # Class.Calculate_IwIt()
522
+ # Class.Calculate_WoWu()
523
+ # Class.Calculate_ShearStress_Vz()
524
+ # Class.Calculate_imryrzrw()
525
+ # Class.Export_Controll_Data()
526
+ # Class.Export_Cross_Section_Data()
527
+