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,757 @@
1
+ import numpy as np
2
+ from Stabberechnung_Klasse import StabRitz
3
+ from tabulate import tabulate
4
+ import matplotlib.pyplot as plt
5
+ import pandas as pd
6
+
7
+
8
+ class Biegedrillknicken:
9
+ def __init__(self):
10
+ print("Klasse")
11
+ self.SG_TH_I = StabRitz(10, 0, 10, 1, 0, 0, 0, 0, 10, "-", "FE")
12
+ self.SG_TH_I.Calculate_All()
13
+ print("________Berechnung Biegedrillknicken_____________")
14
+ # Cross Section Properties
15
+ self.E = self.SG_TH_I.Querschnitt.E
16
+ self.G = self.SG_TH_I.Querschnitt.G
17
+
18
+ self.I_zz = self.SG_TH_I.Querschnitt.I_zz
19
+ self.EIzz = self.E * self.I_zz
20
+ self.I_w = self.SG_TH_I.Querschnitt.I_w
21
+ self.EIw = self.E * self.I_w
22
+ self.I_t = self.SG_TH_I.Querschnitt.I_T_GESAMT
23
+ self.GIt = self.G * self.I_t
24
+ self.z_M = self.SG_TH_I.Querschnitt.z_M # Shear midpoint
25
+ self.r = self.SG_TH_I.Querschnitt.ry
26
+
27
+ self.z_j = 0#self.z_M - self.r / 2
28
+
29
+ plt.show()
30
+
31
+ print(self.EIw)
32
+ print("IW", self.I_w)
33
+ print(self.GIt)
34
+ print("IT", self.I_t)
35
+ print(self.EIzz)
36
+ print("IZZ", self.I_zz)
37
+ print("rz", self.r)
38
+
39
+ # Inner Forces (TH.I.OG)
40
+ self.My_x = self.SG_TH_I.m_element_inter # Vektor mit Biegemoment
41
+ self.l_x = self.SG_TH_I.l_x
42
+ self.x = self.SG_TH_I.list_lx
43
+
44
+ self.ne = self.SG_TH_I.reihen
45
+
46
+ self.K_I_IW = np.zeros(
47
+ (2 * (self.ne + 1), 2 * (self.ne + 1))
48
+ ) # Steifigkeitsmatrizen mit konstanten Anteilen
49
+ self.K_I_IT = np.zeros((2 * (self.ne + 1), 2 * (self.ne + 1)))
50
+ self.K_I_q = np.zeros((2 * (self.ne + 1), 2 * (self.ne + 1)))
51
+ self.K_I_P = np.zeros((2 * (self.ne + 1), 2 * (self.ne + 1)))
52
+
53
+ self.K_I = np.zeros((2 * (self.ne + 1), 2 * (self.ne + 1)))
54
+
55
+ self.K_II_Thet = np.zeros(
56
+ (2 * (self.ne + 1), 2 * (self.ne + 1))
57
+ ) # Steifigkeitsmatrix nach TH. II.OG für quadratischen Anteil
58
+ self.K_II_Thet_s = np.zeros((2 * (self.ne + 1), 2 * (self.ne + 1)))
59
+
60
+ def Calculate_All(self):
61
+ self.Construct_IW_Mat()
62
+ self.Construct_GIT_Mat()
63
+ self.Construct_Mcr_Mat_1()
64
+ self.Construct_Mcr_Mat_2()
65
+ self.calculate_alpha_crit()
66
+
67
+ def function_1_FE(self, x, le):
68
+ return 1 - 3 * x**2 / le**2 + 2 * x**3 / le**3
69
+
70
+ def function_1_FE_x(self, x, le):
71
+ return -6 * x / le**2 + 6 * x**2 / le**3
72
+
73
+ def function_1_FE_xx(self, x, le):
74
+ return -6 / le**2 + 12 * x / le**3
75
+
76
+ def function_1_FE_xxx(self, x, le):
77
+ return 12 / le**3
78
+
79
+ def function_2_FE(self, x, le):
80
+ return x - 2 * x**2 / le + x**3 / le**2
81
+
82
+ def function_2_FE_x(self, x, le):
83
+ return 1 - 4 * x / le + 3 * x**2 / le**2
84
+
85
+ def function_2_FE_xx(self, x, le):
86
+ return -4 / le + 6 * x / le**2
87
+
88
+ def function_2_FE_xxx(self, x, le):
89
+ return 6 / le**2
90
+
91
+ def function_3_FE(self, x, le):
92
+ return 3 * x**2 / le**2 - 2 * x**3 / le**3
93
+
94
+ def function_3_FE_x(self, x, le):
95
+ return 6 * x / le**2 - 6 * x**2 / le**3
96
+
97
+ def function_3_FE_xx(self, x, le):
98
+ return 6 / le**2 - 12 * x / le**3
99
+
100
+ def function_3_FE_xxx(self, x, le):
101
+ return -12 / le**3
102
+
103
+ def function_4_FE(self, x, le):
104
+ return -(x**2) / le + x**3 / le**2
105
+
106
+ def function_4_FE_x(self, x, le):
107
+ return -2 * x / le + 3 * x**2 / le**2
108
+
109
+ def function_4_FE_xx(self, x, le):
110
+ return -2 / le + 6 * x / le**2
111
+
112
+ def function_4_FE_xxx(self, x, le):
113
+ return 6 / le**2
114
+
115
+ def Construct_IW_Mat(self):
116
+ le = self.l_x / self.ne
117
+ self.list_lxle = np.linspace(0, le, 1000)
118
+
119
+ self.K_el_IW = np.zeros((4, 4)) # Elementsteifigkeitsmatrix für IW
120
+
121
+ self.K_el_IW_store = np.zeros((self.ne, 4, 4)) #
122
+
123
+ # Start-Wert für die Index-Arrays
124
+ start_werte = np.arange(
125
+ 0, 2 * self.ne, 2
126
+ ) # Erstellt einen Array von Startwerten
127
+
128
+ # Erstelle den Index-Vektor
129
+ self.index_vector = np.array(
130
+ [np.arange(start, start + 4) for start in start_werte]
131
+ )
132
+
133
+ for i in range(0, self.ne, 1):
134
+ # Row = 0, Col = ...
135
+ self.K_el_IW[0][0] = self.EIw * np.trapz(
136
+ self.function_1_FE_xx(self.list_lxle, le)
137
+ * self.function_1_FE_xx(self.list_lxle, le),
138
+ self.list_lxle,
139
+ )
140
+
141
+ self.K_el_IW[0][1] = self.EIw * np.trapz(
142
+ self.function_1_FE_xx(self.list_lxle, le)
143
+ * self.function_2_FE_xx(self.list_lxle, le),
144
+ self.list_lxle,
145
+ )
146
+
147
+ self.K_el_IW[0][2] = self.EIw * np.trapz(
148
+ self.function_1_FE_xx(self.list_lxle, le)
149
+ * self.function_3_FE_xx(self.list_lxle, le),
150
+ self.list_lxle,
151
+ )
152
+
153
+ self.K_el_IW[0][3] = self.EIw * np.trapz(
154
+ self.function_1_FE_xx(self.list_lxle, le)
155
+ * self.function_4_FE_xx(self.list_lxle, le),
156
+ self.list_lxle,
157
+ )
158
+
159
+ # Row = 1, Col = ...
160
+
161
+ self.K_el_IW[1][0] = self.EIw * np.trapz(
162
+ self.function_2_FE_xx(self.list_lxle, le)
163
+ * self.function_1_FE_xx(self.list_lxle, le),
164
+ self.list_lxle,
165
+ )
166
+
167
+ self.K_el_IW[1][1] = self.EIw * np.trapz(
168
+ self.function_2_FE_xx(self.list_lxle, le)
169
+ * self.function_2_FE_xx(self.list_lxle, le),
170
+ self.list_lxle,
171
+ )
172
+
173
+ self.K_el_IW[1][2] = self.EIw * np.trapz(
174
+ self.function_2_FE_xx(self.list_lxle, le)
175
+ * self.function_3_FE_xx(self.list_lxle, le),
176
+ self.list_lxle,
177
+ )
178
+
179
+ self.K_el_IW[1][3] = self.EIw * np.trapz(
180
+ self.function_2_FE_xx(self.list_lxle, le)
181
+ * self.function_4_FE_xx(self.list_lxle, le),
182
+ self.list_lxle,
183
+ )
184
+
185
+ # Row = 2, Col = ...
186
+
187
+ self.K_el_IW[2][0] = self.EIw * np.trapz(
188
+ self.function_3_FE_xx(self.list_lxle, le)
189
+ * self.function_1_FE_xx(self.list_lxle, le),
190
+ self.list_lxle,
191
+ )
192
+
193
+ self.K_el_IW[2][1] = self.EIw * np.trapz(
194
+ self.function_3_FE_xx(self.list_lxle, le)
195
+ * self.function_2_FE_xx(self.list_lxle, le),
196
+ self.list_lxle,
197
+ )
198
+
199
+ self.K_el_IW[2][2] = self.EIw * np.trapz(
200
+ self.function_3_FE_xx(self.list_lxle, le)
201
+ * self.function_3_FE_xx(self.list_lxle, le),
202
+ self.list_lxle,
203
+ )
204
+
205
+ self.K_el_IW[2][3] = self.EIw * np.trapz(
206
+ self.function_3_FE_xx(self.list_lxle, le)
207
+ * self.function_4_FE_xx(self.list_lxle, le),
208
+ self.list_lxle,
209
+ )
210
+
211
+ # Row = 3, Col = ...
212
+
213
+ self.K_el_IW[3][0] = self.EIw * np.trapz(
214
+ self.function_4_FE_xx(self.list_lxle, le)
215
+ * self.function_1_FE_xx(self.list_lxle, le),
216
+ self.list_lxle,
217
+ )
218
+
219
+ self.K_el_IW[3][1] = self.EIw * np.trapz(
220
+ self.function_4_FE_xx(self.list_lxle, le)
221
+ * self.function_2_FE_xx(self.list_lxle, le),
222
+ self.list_lxle,
223
+ )
224
+
225
+ self.K_el_IW[3][2] = self.EIw * np.trapz(
226
+ self.function_4_FE_xx(self.list_lxle, le)
227
+ * self.function_3_FE_xx(self.list_lxle, le),
228
+ self.list_lxle,
229
+ )
230
+
231
+ self.K_el_IW[3][3] = self.EIw * np.trapz(
232
+ self.function_4_FE_xx(self.list_lxle, le)
233
+ * self.function_4_FE_xx(self.list_lxle, le),
234
+ self.list_lxle,
235
+ )
236
+
237
+ self.K_el_IW_store[
238
+ i, :, :
239
+ ] = self.K_el_IW # Speichert die 2D Arrays in das 3D Array ab
240
+
241
+ for n in range(0, self.ne, 1):
242
+ for row in range(0, 4, 1):
243
+ for col in range(0, 4, 1):
244
+ self.K_I[self.index_vector[n][row]][
245
+ self.index_vector[n][col]
246
+ ] += self.K_el_IW_store[n][row][col]
247
+
248
+ def Construct_GIT_Mat(self):
249
+ le = self.l_x / self.ne
250
+ self.list_lxle = np.linspace(0, le, 1000)
251
+
252
+ self.K_el_IT = np.zeros((4, 4)) # Elementsteifigkeitsmatrix für IT
253
+ self.K_el_IT_store = np.zeros((self.ne, 4, 4)) #
254
+
255
+ # Start-Wert für die Index-Arrays
256
+ start_werte = np.arange(
257
+ 0, 2 * self.ne, 2
258
+ ) # Erstellt einen Array von Startwerten
259
+
260
+ # Erstelle den Index-Vektor
261
+ self.index_vector = np.array(
262
+ [np.arange(start, start + 4) for start in start_werte]
263
+ )
264
+
265
+ for i in range(0, self.ne, 1):
266
+ # Row = 0, Col = ...
267
+ self.K_el_IT[0][0] = self.GIt * np.trapz(
268
+ self.function_1_FE_x(self.list_lxle, le)
269
+ * self.function_1_FE_x(self.list_lxle, le),
270
+ self.list_lxle,
271
+ )
272
+
273
+ self.K_el_IT[0][1] = self.GIt * np.trapz(
274
+ self.function_1_FE_x(self.list_lxle, le)
275
+ * self.function_2_FE_x(self.list_lxle, le),
276
+ self.list_lxle,
277
+ )
278
+
279
+ self.K_el_IT[0][2] = self.GIt * np.trapz(
280
+ self.function_1_FE_x(self.list_lxle, le)
281
+ * self.function_3_FE_x(self.list_lxle, le),
282
+ self.list_lxle,
283
+ )
284
+
285
+ self.K_el_IT[0][3] = self.GIt * np.trapz(
286
+ self.function_1_FE_x(self.list_lxle, le)
287
+ * self.function_4_FE_x(self.list_lxle, le),
288
+ self.list_lxle,
289
+ )
290
+
291
+ # Row = 1, Col = ...
292
+
293
+ self.K_el_IT[1][0] = self.GIt * np.trapz(
294
+ self.function_2_FE_x(self.list_lxle, le)
295
+ * self.function_1_FE_x(self.list_lxle, le),
296
+ self.list_lxle,
297
+ )
298
+
299
+ self.K_el_IT[1][1] = self.GIt * np.trapz(
300
+ self.function_2_FE_x(self.list_lxle, le)
301
+ * self.function_2_FE_x(self.list_lxle, le),
302
+ self.list_lxle,
303
+ )
304
+
305
+ self.K_el_IT[1][2] = self.GIt * np.trapz(
306
+ self.function_2_FE_x(self.list_lxle, le)
307
+ * self.function_3_FE_x(self.list_lxle, le),
308
+ self.list_lxle,
309
+ )
310
+
311
+ self.K_el_IT[1][3] = self.GIt * np.trapz(
312
+ self.function_2_FE_x(self.list_lxle, le)
313
+ * self.function_4_FE_x(self.list_lxle, le),
314
+ self.list_lxle,
315
+ )
316
+
317
+ # Row = 2, Col = ...
318
+
319
+ self.K_el_IT[2][0] = self.GIt * np.trapz(
320
+ self.function_3_FE_x(self.list_lxle, le)
321
+ * self.function_1_FE_x(self.list_lxle, le),
322
+ self.list_lxle,
323
+ )
324
+
325
+ self.K_el_IT[2][1] = self.GIt * np.trapz(
326
+ self.function_3_FE_x(self.list_lxle, le)
327
+ * self.function_2_FE_x(self.list_lxle, le),
328
+ self.list_lxle,
329
+ )
330
+
331
+ self.K_el_IT[2][2] = self.GIt * np.trapz(
332
+ self.function_3_FE_x(self.list_lxle, le)
333
+ * self.function_3_FE_x(self.list_lxle, le),
334
+ self.list_lxle,
335
+ )
336
+
337
+ self.K_el_IT[2][3] = self.GIt * np.trapz(
338
+ self.function_3_FE_x(self.list_lxle, le)
339
+ * self.function_4_FE_x(self.list_lxle, le),
340
+ self.list_lxle,
341
+ )
342
+
343
+ # Row = 3, Col = ...
344
+
345
+ self.K_el_IT[3][0] = self.GIt * np.trapz(
346
+ self.function_4_FE_x(self.list_lxle, le)
347
+ * self.function_1_FE_x(self.list_lxle, le),
348
+ self.list_lxle,
349
+ )
350
+
351
+ self.K_el_IT[3][1] = self.GIt * np.trapz(
352
+ self.function_4_FE_x(self.list_lxle, le)
353
+ * self.function_2_FE_x(self.list_lxle, le),
354
+ self.list_lxle,
355
+ )
356
+
357
+ self.K_el_IT[3][2] = self.GIt * np.trapz(
358
+ self.function_4_FE_x(self.list_lxle, le)
359
+ * self.function_3_FE_x(self.list_lxle, le),
360
+ self.list_lxle,
361
+ )
362
+
363
+ self.K_el_IT[3][3] = self.GIt * np.trapz(
364
+ self.function_4_FE_x(self.list_lxle, le)
365
+ * self.function_4_FE_x(self.list_lxle, le),
366
+ self.list_lxle,
367
+ )
368
+
369
+ self.K_el_IT_store[
370
+ i, :, :
371
+ ] = self.K_el_IT # Speichert die 2D Arrays in das 3D Array ab
372
+
373
+ for n in range(0, self.ne, 1):
374
+ for row in range(0, 4, 1):
375
+ for col in range(0, 4, 1):
376
+ self.K_I[self.index_vector[n][row]][
377
+ self.index_vector[n][col]
378
+ ] += self.K_el_IT_store[n][row][col]
379
+
380
+ def Construct_Mcr_Mat_1(self):
381
+ le = self.l_x / self.ne
382
+ self.list_lxle = np.linspace(0, le, 5) # Muss der Nummer der Interpolationsstellen entsprechen! Aus My-Berechnung
383
+
384
+ self.K_el_EIZ = np.zeros(
385
+ (4, 4)
386
+ ) # Geometrische Steifigkeitsmatrix quadratischen Lastanteil
387
+
388
+ self.K_el_EIZ_store = np.zeros((self.ne, 4, 4)) #
389
+
390
+ # Start-Wert für die Index-Arrays
391
+ start_werte = np.arange(
392
+ 0, 2 * self.ne, 2
393
+ ) # Erstellt einen Array von Startwerten
394
+
395
+ # Erstelle den Index-Vektor
396
+ self.index_vector = np.array(
397
+ [np.arange(start, start + 4) for start in start_werte]
398
+ )
399
+
400
+ for i in range(0, self.ne, 1):
401
+ # Row = 0, Col = ...
402
+
403
+ self.K_el_EIZ[0][0] = self.EIzz * np.trapz(
404
+ self.My_x[i]**2 *
405
+ self.function_1_FE(self.list_lxle, le)
406
+ * self.function_1_FE(self.list_lxle, le),
407
+ self.list_lxle
408
+ )
409
+
410
+ self.K_el_EIZ[0][1] = self.EIzz* np.trapz(
411
+ self.My_x[i]**2 *
412
+ self.function_1_FE(self.list_lxle, le)
413
+ * self.function_2_FE(self.list_lxle, le),
414
+ self.list_lxle,
415
+ )
416
+
417
+ self.K_el_EIZ[0][2] = self.EIzz * np.trapz(
418
+ self.My_x[i]**2 *
419
+ self.function_1_FE(self.list_lxle, le)
420
+ * self.function_3_FE(self.list_lxle, le),
421
+ self.list_lxle,
422
+ )
423
+
424
+ self.K_el_EIZ[0][3] = self.EIzz * np.trapz(
425
+ self.My_x[i]**2 *
426
+ self.function_1_FE(self.list_lxle, le)
427
+ * self.function_4_FE(self.list_lxle, le),
428
+ self.list_lxle,
429
+ )
430
+
431
+ # Row = 1, Col = ...
432
+
433
+ self.K_el_EIZ[1][0] = self.EIzz * np.trapz(
434
+ self.My_x[i]**2 *
435
+ self.function_2_FE(self.list_lxle, le)
436
+ * self.function_1_FE(self.list_lxle, le),
437
+ self.list_lxle,
438
+ )
439
+
440
+ self.K_el_EIZ[1][1] = self.EIzz* np.trapz(
441
+ self.My_x[i]**2 *
442
+ self.function_2_FE(self.list_lxle, le)
443
+ * self.function_2_FE(self.list_lxle, le),
444
+ self.list_lxle,
445
+ )
446
+
447
+ self.K_el_EIZ[1][2] = self.EIzz * np.trapz(
448
+ self.My_x[i]**2 *
449
+ self.function_2_FE(self.list_lxle, le)
450
+ * self.function_3_FE(self.list_lxle, le),
451
+ self.list_lxle,
452
+ )
453
+
454
+ self.K_el_EIZ[1][3] = self.EIzz * np.trapz(
455
+ self.My_x[i]**2 *
456
+ self.function_2_FE(self.list_lxle, le)
457
+ * self.function_4_FE(self.list_lxle, le),
458
+ self.list_lxle,
459
+ )
460
+
461
+ # Row = 2, Col = ...
462
+
463
+ self.K_el_EIZ[2][0] = self.EIzz * np.trapz(
464
+ self.My_x[i]**2 *
465
+ self.function_3_FE(self.list_lxle, le)
466
+ * self.function_1_FE(self.list_lxle, le),
467
+ self.list_lxle,
468
+ )
469
+
470
+ self.K_el_EIZ[2][1] = self.EIzz* np.trapz(
471
+ self.My_x[i]**2 *
472
+ self.function_3_FE(self.list_lxle, le)
473
+ * self.function_2_FE(self.list_lxle, le),
474
+ self.list_lxle,
475
+ )
476
+
477
+ self.K_el_EIZ[2][2] = self.EIzz * np.trapz(
478
+ self.My_x[i]**2 *
479
+ self.function_3_FE(self.list_lxle, le)
480
+ * self.function_3_FE(self.list_lxle, le),
481
+ self.list_lxle,
482
+ )
483
+
484
+ self.K_el_EIZ[2][3] = self.EIzz * np.trapz(
485
+ self.My_x[i]**2 *
486
+ self.function_3_FE(self.list_lxle, le)
487
+ * self.function_4_FE(self.list_lxle, le),
488
+ self.list_lxle,
489
+ )
490
+
491
+ # Row = 3, Col = ...
492
+
493
+ self.K_el_EIZ[3][0] = self.EIzz * np.trapz(
494
+ self.My_x[i]**2 *
495
+ self.function_4_FE(self.list_lxle, le)
496
+ * self.function_1_FE(self.list_lxle, le),
497
+ self.list_lxle,
498
+ )
499
+
500
+ self.K_el_EIZ[3][1] = self.EIzz * np.trapz(
501
+ self.My_x[i]**2 *
502
+ self.function_4_FE(self.list_lxle, le)
503
+ * self.function_2_FE(self.list_lxle, le),
504
+ self.list_lxle,
505
+ )
506
+
507
+ self.K_el_EIZ[3][2] = self.EIzz * np.trapz(
508
+ self.My_x[i]**2 *
509
+ self.function_4_FE(self.list_lxle, le)
510
+ * self.function_3_FE(self.list_lxle, le),
511
+ self.list_lxle,
512
+ )
513
+
514
+ self.K_el_EIZ[3][3] = self.EIzz * np.trapz(
515
+ self.My_x[i]**2 *
516
+ self.function_4_FE(self.list_lxle, le)
517
+ * self.function_4_FE(self.list_lxle, le),
518
+ self.list_lxle,
519
+ )
520
+
521
+ self.K_el_EIZ_store[
522
+ i, :, :
523
+ ] = self.K_el_EIZ # Speichert die 2D Arrays in das 3D Array ab
524
+
525
+ for n in range(0, self.ne, 1):
526
+ for row in range(0, 4, 1):
527
+ for col in range(0, 4, 1):
528
+ self.K_II_Thet[self.index_vector[n][row]][
529
+ self.index_vector[n][col]
530
+ ] += self.K_el_EIZ_store[n][row][col]
531
+
532
+ def Construct_Mcr_Mat_2(self):
533
+ le = self.l_x / self.ne
534
+ self.list_lxle = np.linspace(0, le, 5) # Muss der Nummer der Interpolationsstellen entsprechen! Aus My-Berechnung
535
+
536
+ self.K_el_thet_II = np.zeros(
537
+ (4, 4)
538
+ ) # Geometrische Steifigkeitsmatrix quadratischen Lastanteil
539
+
540
+ self.K_el_thet_II_store = np.zeros((self.ne, 4, 4)) #
541
+
542
+ # Start-Wert für die Index-Arrays
543
+ start_werte = np.arange(
544
+ 0, 2 * self.ne, 2
545
+ ) # Erstellt einen Array von Startwerten
546
+
547
+ # Erstelle den Index-Vektor
548
+ self.index_vector = np.array(
549
+ [np.arange(start, start + 4) for start in start_werte]
550
+ )
551
+
552
+ for i in range(0, self.ne, 1):
553
+ # Row = 0, Col = ...
554
+
555
+ self.K_el_thet_II[0][0] = np.trapz(
556
+ self.My_x[i]* self.r *
557
+ self.function_1_FE_x(self.list_lxle, le)
558
+ * self.function_1_FE_x(self.list_lxle, le),
559
+ self.list_lxle
560
+ )
561
+
562
+ self.K_el_thet_II[0][1] = np.trapz(
563
+ self.My_x[i]* self.r *
564
+ self.function_1_FE_x(self.list_lxle, le)
565
+ * self.function_2_FE_x(self.list_lxle, le),
566
+ self.list_lxle
567
+ )
568
+
569
+ self.K_el_thet_II[0][2] = np.trapz(
570
+ self.My_x[i]* self.r *
571
+ self.function_1_FE_x(self.list_lxle, le)
572
+ * self.function_3_FE_x(self.list_lxle, le),
573
+ self.list_lxle
574
+ )
575
+
576
+ self.K_el_thet_II[0][3] = np.trapz(
577
+ self.My_x[i]* self.r *
578
+ self.function_1_FE_x(self.list_lxle, le)
579
+ * self.function_4_FE_x(self.list_lxle, le),
580
+ self.list_lxle
581
+ )
582
+
583
+ # Row = 1, Col = ...
584
+
585
+ self.K_el_thet_II[1][0] = np.trapz(
586
+ self.My_x[i]* self.r *
587
+ self.function_2_FE_x(self.list_lxle, le)
588
+ * self.function_1_FE_x(self.list_lxle, le),
589
+ self.list_lxle,
590
+ )
591
+
592
+ self.K_el_thet_II[1][1] = np.trapz(
593
+ self.My_x[i] * self.r *
594
+ self.function_2_FE_x(self.list_lxle, le)
595
+ * self.function_2_FE_x(self.list_lxle, le),
596
+ self.list_lxle,
597
+ )
598
+
599
+ self.K_el_thet_II[1][2] = np.trapz(
600
+ self.My_x[i]* self.r *
601
+ self.function_2_FE_x(self.list_lxle, le)
602
+ * self.function_3_FE_x(self.list_lxle, le),
603
+ self.list_lxle,
604
+ )
605
+
606
+ self.K_el_thet_II[1][3] = np.trapz(
607
+ self.My_x[i]* self.r *
608
+ self.function_2_FE_x(self.list_lxle, le)
609
+ * self.function_4_FE_x(self.list_lxle, le),
610
+ self.list_lxle,
611
+ )
612
+
613
+ # Row = 2, Col = ...
614
+
615
+ self.K_el_thet_II[2][0] = np.trapz(
616
+ self.My_x[i]* self.r *
617
+ self.function_3_FE_x(self.list_lxle, le)
618
+ * self.function_1_FE_x(self.list_lxle, le),
619
+ self.list_lxle,
620
+ )
621
+
622
+ self.K_el_thet_II[2][1] = np.trapz(
623
+ self.My_x[i]* self.r *
624
+ self.function_3_FE_x(self.list_lxle, le)
625
+ * self.function_2_FE_x(self.list_lxle, le),
626
+ self.list_lxle
627
+ )
628
+
629
+ self.K_el_thet_II[2][2] = np.trapz(
630
+ self.My_x[i]* self.r *
631
+ self.function_3_FE_x(self.list_lxle, le)
632
+ * self.function_3_FE_x(self.list_lxle, le),
633
+ self.list_lxle
634
+ )
635
+
636
+ self.K_el_thet_II[2][3] = np.trapz(
637
+ self.My_x[i]* self.r *
638
+ self.function_3_FE_x(self.list_lxle, le)
639
+ * self.function_4_FE_x(self.list_lxle, le),
640
+ self.list_lxle
641
+ )
642
+
643
+ # Row = 3, Col = ...
644
+
645
+ self.K_el_thet_II[3][0] = np.trapz(
646
+ self.My_x[i]* self.r *
647
+ self.function_4_FE_x(self.list_lxle, le)
648
+ * self.function_1_FE_x(self.list_lxle, le),
649
+ self.list_lxle,
650
+ )
651
+
652
+ self.K_el_thet_II[3][1] = np.trapz(
653
+ self.My_x[i]* self.r *
654
+ self.function_4_FE_x(self.list_lxle, le)
655
+ * self.function_2_FE_x(self.list_lxle, le),
656
+ self.list_lxle,
657
+ )
658
+
659
+ self.K_el_thet_II[3][2] = np.trapz(
660
+ self.My_x[i]* self.r *
661
+ self.function_4_FE_x(self.list_lxle, le)
662
+ * self.function_3_FE_x(self.list_lxle, le),
663
+ self.list_lxle,
664
+ )
665
+
666
+ self.K_el_thet_II[3][3] = np.trapz(
667
+ self.My_x[i]* self.r *
668
+ self.function_4_FE_x(self.list_lxle, le)
669
+ * self.function_4_FE_x(self.list_lxle, le),
670
+ self.list_lxle,
671
+ )
672
+
673
+ self.K_el_thet_II_store[
674
+ i, :, :
675
+ ] = self.K_el_thet_II # Speichert die 2D Arrays in das 3D Array ab
676
+
677
+ for n in range(0, self.ne, 1):
678
+ for row in range(0, 4, 1):
679
+ for col in range(0, 4, 1):
680
+ self.K_II_Thet_s[self.index_vector[n][row]][
681
+ self.index_vector[n][col]
682
+ ] += self.K_el_thet_II_store[n][row][col]
683
+
684
+
685
+
686
+ def Export_ElementStiffness_IW(self, n_elem, name):
687
+ Matrix = self.K_el_IW_store[n_elem].round(2)
688
+ df = pd.DataFrame(Matrix, index=[1, 2, 3, 4])
689
+ df.to_csv(
690
+ f"Checks/Data/ElementStiffness_{name}_{n_elem}_IW.csv",
691
+ header=False,
692
+ index=[1, 2, 3, 4],
693
+ )
694
+
695
+ Matrix = self.K_el_IT_store[n_elem].round(2)
696
+ df = pd.DataFrame(Matrix)
697
+ df.to_csv(
698
+ f"Checks/Data/ElementStiffness_{name}_{n_elem}_IT.csv",
699
+ header=False,
700
+ index=[1, 2, 3, 4],
701
+ )
702
+
703
+ Matrix = self.K_el_EIZ_store[n_elem].round(2)
704
+ df = pd.DataFrame(Matrix)
705
+ df.to_csv(
706
+ f"Checks/Data/ElementStiffness_{name}_{n_elem}_KIITHET.csv",
707
+ header=False,
708
+ index=[1, 2, 3, 4],
709
+ )
710
+
711
+ Matrix = self.K_el_thet_II_store[n_elem].round(2)
712
+ df = pd.DataFrame(Matrix)
713
+ df.to_csv(
714
+ f"Checks/Data/ElementStiffness_{name}_{n_elem}_KIITHET_s.csv",
715
+ header=False,
716
+ index=[1, 2, 3, 4],
717
+ )
718
+
719
+
720
+ def calculate_alpha_crit(self):
721
+ alpha_min = 0
722
+ alpha_max = 10
723
+ precision = 1e-3
724
+ initial_delta_alpha = 0.1
725
+ critical_alphas = []
726
+ self._recursive_search(alpha_min, alpha_max, initial_delta_alpha, precision, critical_alphas)
727
+ return critical_alphas
728
+
729
+ def _recursive_search(self, alpha_min, alpha_max, delta_alpha, precision, critical_alphas):
730
+ alpha_0 = alpha_min
731
+ det0 = np.linalg.det(self.K_I - alpha_0**2 * self.K_II_Thet + alpha_0 * self.K_II_Thet_s) #
732
+ for i in range(1, int((alpha_max - alpha_min) / delta_alpha) + 1):
733
+ alpha_0 = alpha_min + i * delta_alpha
734
+ det1 = np.linalg.det(self.K_I - alpha_0**2 * self.K_II_Thet + alpha_0 * self.K_II_Thet_s)#
735
+ try:
736
+ val = det0 * det1
737
+ except:
738
+ val = det0 * det1 / 1e50
739
+ if val < 0: # Vorzeichenwechsel erkannt
740
+ if delta_alpha <= precision:
741
+ # Eigenwert gefunden, Mittelpunkt des Intervalls speichern
742
+ alpha_crit = (alpha_0 - delta_alpha / 2)
743
+ critical_alphas.append(alpha_crit)
744
+ print(f"Eigenwert gefunden: alpha_crit = {alpha_crit}, Mcrit = {alpha_crit * self.My_x.max()}")
745
+ else:
746
+ # Weitere Suche in diesem Intervall mit feinerer Schrittweite
747
+ self._recursive_search(alpha_0 - delta_alpha, alpha_0, delta_alpha / 10, precision, critical_alphas)
748
+ det0 = det1
749
+
750
+ BDK = Biegedrillknicken()
751
+ BDK.Calculate_All()
752
+ BDK.Export_ElementStiffness_IW(1, "Unittest")
753
+
754
+
755
+ print(tabulate(BDK.K_el_IW))
756
+ print(tabulate(BDK.K_el_IT))
757
+ print(BDK.r)