kib-lap 0.5__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.
- Examples/Cross_Section_Thin.py +61 -0
- Examples/__init__.py +0 -0
- KIB_LAP/Betonbau/Bemessung_Polygon.py +667 -0
- KIB_LAP/Betonbau/Bemessung_Zust_II.py +648 -0
- KIB_LAP/Betonbau/Cross_Section_Kappa.py +925 -0
- KIB_LAP/Betonbau/Druckglied_KGV.py +179 -0
- KIB_LAP/Betonbau/Iterative_Design.py +723 -0
- KIB_LAP/Betonbau/Materialkennwerte_Beton.py +196 -0
- KIB_LAP/Betonbau/Querschnittsbreite.py +194 -0
- KIB_LAP/Betonbau/Querschnittsbreite_Kreis.py +63 -0
- KIB_LAP/Betonbau/__init__.py +2 -0
- KIB_LAP/Betonbau/beam_plate_T.py +921 -0
- KIB_LAP/Betonbau/beam_plate_T_reverse.py +915 -0
- KIB_LAP/Betonbau/beam_rectangular.py +635 -0
- KIB_LAP/Betonbau/beam_sub_section.py +9 -0
- KIB_LAP/Dynamik/Cross_Section_Properties.py +155 -0
- KIB_LAP/Dynamik/Deformation_Method.py +587 -0
- KIB_LAP/Dynamik/Duhamel_SDOF.py +221 -0
- KIB_LAP/Dynamik/FFT.py +87 -0
- KIB_LAP/Dynamik/Kontinuum_Eigenmodes.py +418 -0
- KIB_LAP/Dynamik/Kontinuum_Schwingung.py +757 -0
- KIB_LAP/Dynamik/Pendulum_Spring_Linearized.py +91 -0
- KIB_LAP/Dynamik/Pendulum_Spring_Problem.py +94 -0
- KIB_LAP/Dynamik/__init__.py +0 -0
- KIB_LAP/Examples/Cross_Section_Thin.py +61 -0
- KIB_LAP/Examples/Cross_Section_Thin_2.py +14 -0
- KIB_LAP/Examples/Plattentragwerke.py +39 -0
- KIB_LAP/Examples/Plattentragwerke_2.py +60 -0
- KIB_LAP/Examples/ShearDesign.py +28 -0
- KIB_LAP/Examples/__init__.py +0 -0
- KIB_LAP/Plattenbeulen/Plate_Design.py +276 -0
- KIB_LAP/Plattenbeulen/Ritz_Optimiert.py +658 -0
- KIB_LAP/Plattenbeulen/__init__.py +2 -0
- KIB_LAP/Plattenbeulen/dist/__init__.py +0 -0
- KIB_LAP/Plattenbeulen/plate_buckling.cpp +561 -0
- KIB_LAP/Plattenbeulen/plate_buckling_cpp.cp313-win_amd64.pyd +0 -0
- KIB_LAP/Plattenbeulen/plate_buckling_cpp.cpp +561 -0
- KIB_LAP/Plattenbeulen/setup.py +35 -0
- KIB_LAP/Plattentragwerke/Functions.cpp +326 -0
- KIB_LAP/Plattentragwerke/Functions.h +41 -0
- KIB_LAP/Plattentragwerke/NumInte.cpp +23 -0
- KIB_LAP/Plattentragwerke/NumericalIntegration.cpp +23 -0
- KIB_LAP/Plattentragwerke/PlateBendingKirchhoff.py +843 -0
- KIB_LAP/Plattentragwerke/__init__.py +1 -0
- KIB_LAP/Plattentragwerke/plate_bending.cpp +341 -0
- KIB_LAP/Plattentragwerke/plate_bending_cpp.cp313-win_amd64.pyd +0 -0
- KIB_LAP/Plattentragwerke/setup.py +39 -0
- KIB_LAP/Querschnittswerte/Querschnitt_Duenn.py +526 -0
- KIB_LAP/Querschnittswerte/__init__.py +1 -0
- KIB_LAP/STABRAUM/InputData.py +92 -0
- KIB_LAP/STABRAUM/Programm.py +1403 -0
- KIB_LAP/STABRAUM/Steifigkeitsmatrix.py +275 -0
- KIB_LAP/STABRAUM/__init__.py +3 -0
- KIB_LAP/Stahlbau/__init__.py +0 -0
- KIB_LAP/Verbundbau/Verbundtraeger_Bemessung.py +766 -0
- KIB_LAP/Verbundbau/__init__.py +0 -0
- KIB_LAP/__init__.py +4 -0
- KIB_LAP/main.py +2 -0
- KIB_LAP/plate_bending_cpp.cp313-win_amd64.pyd +0 -0
- KIB_LAP/plate_buckling_cpp.cp313-win_amd64.pyd +0 -0
- kib_lap-0.5.dist-info/METADATA +25 -0
- kib_lap-0.5.dist-info/RECORD +64 -0
- kib_lap-0.5.dist-info/WHEEL +5 -0
- kib_lap-0.5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,843 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import matplotlib.pyplot as plt
|
|
3
|
+
from matplotlib import cm
|
|
4
|
+
import pandas as pd
|
|
5
|
+
import time
|
|
6
|
+
import os
|
|
7
|
+
from scipy import optimize
|
|
8
|
+
from scipy.integrate import simpson
|
|
9
|
+
import math
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
import plate_bending_cpp
|
|
13
|
+
except:
|
|
14
|
+
from KIB_LAP.Plattentragwerke import plate_bending_cpp
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PlateBendingKirchhoffClass:
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
E,
|
|
21
|
+
t,
|
|
22
|
+
a,
|
|
23
|
+
b,
|
|
24
|
+
p0,
|
|
25
|
+
x0,
|
|
26
|
+
u,
|
|
27
|
+
y0,
|
|
28
|
+
v,
|
|
29
|
+
nu=0.0,
|
|
30
|
+
kappa_s=5 / 6,
|
|
31
|
+
K=0,
|
|
32
|
+
n_inte=50,
|
|
33
|
+
loading="Regular",
|
|
34
|
+
support="hhhh",
|
|
35
|
+
reihen=8,
|
|
36
|
+
x_s_positions = [],
|
|
37
|
+
I_s_values= [],
|
|
38
|
+
y_s_positions = [],
|
|
39
|
+
I_t_values = []
|
|
40
|
+
):
|
|
41
|
+
"""
|
|
42
|
+
Initialisierung der Klasse PlateBendingKirchhoff.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
E (float): Elastizitätsmodul.
|
|
46
|
+
t (float): Dicke der Platte.
|
|
47
|
+
a (float): Länge der Platte in x-Richtung.
|
|
48
|
+
b (float): Länge der Platte in y-Richtung.
|
|
49
|
+
p0 (float): Maximale Last.
|
|
50
|
+
x0 (float): Startpunkt der Last in x-Richtung.
|
|
51
|
+
u (float): Breite der Last in x-Richtung.
|
|
52
|
+
y0 (float): Startpunkt der Last in y-Richtung.
|
|
53
|
+
v (float): Breite der Last in y-Richtung.
|
|
54
|
+
nu (float, optional): Querdehnzahl. Standardmäßig 0.0.
|
|
55
|
+
kappa_s (float, optional): Schubkorrekturfaktor. Standardmäßig 5/6.
|
|
56
|
+
K (int, optional): Torsionssteifigkeit. Standardmäßig 0.
|
|
57
|
+
n_inte (int, optional): Anzahl der Integrationspunkte. Standardmäßig 50.
|
|
58
|
+
loading (str, optional): Art der Belastung. Standardmäßig "Regular". Andere Eingabewerte Liste
|
|
59
|
+
support (str, optional): Lagerungsbedingungen. Standardmäßig "hhhh".
|
|
60
|
+
reihen (int, optional): Anzahl der Reihen für die Reihenentwicklung. Standardmäßig 8.
|
|
61
|
+
"""
|
|
62
|
+
# Materialien
|
|
63
|
+
self.E = E
|
|
64
|
+
self.nu = nu
|
|
65
|
+
self.kappa_s = kappa_s
|
|
66
|
+
self.K = K
|
|
67
|
+
# Plattenabmessungen in [m]
|
|
68
|
+
self.t = t
|
|
69
|
+
self.a = a
|
|
70
|
+
self.b = b
|
|
71
|
+
|
|
72
|
+
self.n_inte = n_inte
|
|
73
|
+
|
|
74
|
+
self.list_a = np.linspace(0, self.a, self.n_inte)
|
|
75
|
+
self.list_b = np.linspace(0, self.b, self.n_inte)
|
|
76
|
+
|
|
77
|
+
# Belastung
|
|
78
|
+
self.p0 = p0
|
|
79
|
+
self.x0 = x0
|
|
80
|
+
self.u = u
|
|
81
|
+
self.y0 = y0
|
|
82
|
+
self.v = v
|
|
83
|
+
|
|
84
|
+
self.loading = loading
|
|
85
|
+
|
|
86
|
+
# Steifigkeitsmatrix-Komponenten
|
|
87
|
+
self.D_11 = E * t**3 / (12 * (1 - nu**2))
|
|
88
|
+
self.D_22 = self.D_11
|
|
89
|
+
self.D_12 = self.D_11 * nu
|
|
90
|
+
self.D_66 = (1 - nu) / 2 * self.D_11
|
|
91
|
+
|
|
92
|
+
self.support = support
|
|
93
|
+
|
|
94
|
+
self.reihen = reihen
|
|
95
|
+
|
|
96
|
+
self.mat = np.zeros((self.reihen**2, self.reihen**2))
|
|
97
|
+
|
|
98
|
+
self.load = np.zeros((self.reihen**2))
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
self.x_s_array = np.array(x_s_positions, dtype=np.float64)
|
|
102
|
+
self.I_s_array = np.array(I_s_values, dtype=np.float64)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
self.y_s_array = np.array(y_s_positions, dtype=np.float64)
|
|
106
|
+
self.I_t_array = np.array(I_t_values, dtype=np.float64)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def CalculateAll(self):
|
|
110
|
+
"""
|
|
111
|
+
Führt alle Berechnungsschritte aus.
|
|
112
|
+
"""
|
|
113
|
+
self.AssembleStiffnessMatrix()
|
|
114
|
+
self.Construct_Loadvector()
|
|
115
|
+
self.ReduceMatrix()
|
|
116
|
+
self.SolveSystem()
|
|
117
|
+
self.TransformSolutionMatrix()
|
|
118
|
+
|
|
119
|
+
def AssembleStiffnessMatrix(self):
|
|
120
|
+
"""
|
|
121
|
+
Berechnung der Steifigkeitsmatrix für die Plattenstruktur mit dem C++-Modul via pybind11.
|
|
122
|
+
"""
|
|
123
|
+
# Sicherstellen, dass das C++-Modul importiert werden kann
|
|
124
|
+
try:
|
|
125
|
+
pass
|
|
126
|
+
except ImportError as e:
|
|
127
|
+
print("Fehler beim Import des C++-Moduls:", e)
|
|
128
|
+
raise
|
|
129
|
+
print(self.support)
|
|
130
|
+
# Aufruf der assemble_stiffness_matrix-Funktion aus dem C++-Modul
|
|
131
|
+
self.mat = plate_bending_cpp.assemble_stiffness_matrix(
|
|
132
|
+
self.D_11,
|
|
133
|
+
self.D_22,
|
|
134
|
+
self.D_12,
|
|
135
|
+
self.D_66,
|
|
136
|
+
self.reihen,
|
|
137
|
+
self.n_inte,
|
|
138
|
+
self.a,
|
|
139
|
+
self.b,
|
|
140
|
+
self.support,
|
|
141
|
+
self.E,
|
|
142
|
+
self.x_s_array,
|
|
143
|
+
self.I_s_array,
|
|
144
|
+
self.y_s_array,
|
|
145
|
+
self.I_t_array
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
self.mat = np.array(self.mat) # Konvertierung in ein NumPy-Array
|
|
149
|
+
|
|
150
|
+
def Construct_Loadvector(self):
|
|
151
|
+
"""
|
|
152
|
+
Konstruktion des Lastvektors basierend auf der aufgebrachten Belastung.
|
|
153
|
+
"""
|
|
154
|
+
if self.loading == "Regular":
|
|
155
|
+
rectangular_loads = [
|
|
156
|
+
# [x0, x1, y0, y1, p0]
|
|
157
|
+
[self.x0, self.x0 + self.u, self.y0, self.y0 + self.v, self.p0]
|
|
158
|
+
]
|
|
159
|
+
|
|
160
|
+
for load in rectangular_loads:
|
|
161
|
+
x0, x1, y0, y1, p0 = load
|
|
162
|
+
|
|
163
|
+
# Sicherstellen, dass die Last innerhalb der Plattenabmessungen liegt
|
|
164
|
+
x0 = max(0, min(self.a, x0))
|
|
165
|
+
x1 = max(0, min(self.a, x1))
|
|
166
|
+
y0 = max(0, min(self.b, y0))
|
|
167
|
+
y1 = max(0, min(self.b, y1))
|
|
168
|
+
|
|
169
|
+
list_load_inte_x = np.linspace(x0, x1, 100)
|
|
170
|
+
list_load_inte_y = np.linspace(y0, y1, 100)
|
|
171
|
+
for m in range(1, self.reihen + 1):
|
|
172
|
+
for n in range(1, self.reihen + 1):
|
|
173
|
+
# Integration über die Lastfläche
|
|
174
|
+
|
|
175
|
+
y_values_1 = self.function_1(list_load_inte_x, m)
|
|
176
|
+
omega_1m = simpson(y_values_1, x=list_load_inte_x)
|
|
177
|
+
|
|
178
|
+
y_values_2 = self.function_2(list_load_inte_y, n)
|
|
179
|
+
omega_1n = simpson(y_values_2, x=list_load_inte_y)
|
|
180
|
+
|
|
181
|
+
self.load[n - 1 + self.reihen * (m - 1)] += (
|
|
182
|
+
p0 * omega_1m * omega_1n
|
|
183
|
+
)
|
|
184
|
+
else:
|
|
185
|
+
self.RectangularLoad = pd.DataFrame(
|
|
186
|
+
pd.read_csv("Loading/Constant_Loading.csv")
|
|
187
|
+
)
|
|
188
|
+
for i in range(0, len(self.RectangularLoad["x0[m]"]), 1):
|
|
189
|
+
x0 = float(self.RectangularLoad["x0[m]"][i])
|
|
190
|
+
if (x0 < 0) or (x0 > self.a):
|
|
191
|
+
x0 = 0
|
|
192
|
+
x1 = float(self.RectangularLoad["x1[m]"][i])
|
|
193
|
+
if x1 > self.a or x1 < 0:
|
|
194
|
+
x1 = self.a
|
|
195
|
+
y0 = float(self.RectangularLoad["y0[m]"][i])
|
|
196
|
+
if y0 < 0 or y0 > self.b:
|
|
197
|
+
y0 = 0
|
|
198
|
+
y1 = float(self.RectangularLoad["y1[m]"][i])
|
|
199
|
+
if y1 < 0 or y1 > self.b:
|
|
200
|
+
y1 = self.b
|
|
201
|
+
|
|
202
|
+
p0 = float(self.RectangularLoad["p0[MN/m**2]"][i])
|
|
203
|
+
|
|
204
|
+
list_load_inte_x = np.linspace(x0, x1, 100)
|
|
205
|
+
list_load_inte_y = np.linspace(y0, y1, 100)
|
|
206
|
+
for m in range(1, self.reihen + 1, 1):
|
|
207
|
+
for n in range(1, self.reihen + 1, 1):
|
|
208
|
+
|
|
209
|
+
y_values_1 = self.function_1(list_load_inte_x, m)
|
|
210
|
+
omega_1m = simpson(y_values_1, x=list_load_inte_x)
|
|
211
|
+
|
|
212
|
+
y_values_2 = self.function_2(list_load_inte_y, n)
|
|
213
|
+
omega_1n = simpson(y_values_2, x=list_load_inte_y)
|
|
214
|
+
|
|
215
|
+
self.load[n - 1 + self.reihen * (m - 1)] += (
|
|
216
|
+
p0 * omega_1m * omega_1n
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
def ReduceMatrix(self):
|
|
220
|
+
"""
|
|
221
|
+
Reduziert die Matrix und den Lastvektor, um Nullzeilen und -spalten zu entfernen.
|
|
222
|
+
"""
|
|
223
|
+
# Prüfen, welche Zeilen und Spalten nur Nullen enthalten
|
|
224
|
+
non_zero_rows = ~np.all(self.mat == 0, axis=1)
|
|
225
|
+
non_zero_cols = ~np.all(self.mat == 0, axis=0)
|
|
226
|
+
|
|
227
|
+
# Reduziere die Matrix und den Vektor, um nur Nicht-Null Zeilen und Spalten zu behalten
|
|
228
|
+
self.reduced_mat = self.mat[non_zero_rows, :][:, non_zero_cols]
|
|
229
|
+
self.reduced_load = self.load[non_zero_rows]
|
|
230
|
+
|
|
231
|
+
def SolveSystem(self):
|
|
232
|
+
"""
|
|
233
|
+
Löst das reduzierte Gleichungssystem.
|
|
234
|
+
"""
|
|
235
|
+
if self.reduced_mat.size > 0:
|
|
236
|
+
self.x_reduced = np.linalg.solve(self.reduced_mat, self.reduced_load)
|
|
237
|
+
else:
|
|
238
|
+
print("Keine Lösung möglich, da das Gleichungssystem nur Nullen enthält.")
|
|
239
|
+
|
|
240
|
+
def TransformSolutionMatrix(self):
|
|
241
|
+
"""
|
|
242
|
+
Transformiert die Lösungsvektoren in eine Matrixform.
|
|
243
|
+
"""
|
|
244
|
+
# Berechnen der Dimension der quadratischen Matrix
|
|
245
|
+
n = int(np.sqrt(len(self.x_reduced)))
|
|
246
|
+
|
|
247
|
+
if n**2 != len(self.x_reduced):
|
|
248
|
+
raise ValueError(
|
|
249
|
+
"Die Länge von x_reduced ist nicht das Quadrat einer ganzen Zahl"
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
# Umstrukturieren des Vektors x_reduced in eine quadratische n x n Matrix
|
|
253
|
+
self.matrix = self.x_reduced.reshape(n, n)
|
|
254
|
+
|
|
255
|
+
def SolutionPointDisp(self, a_sol, b_sol):
|
|
256
|
+
"""
|
|
257
|
+
Berechnet die Durchbiegung an einem bestimmten Punkt (a_sol, b_sol).
|
|
258
|
+
"""
|
|
259
|
+
x_disp = 0.0
|
|
260
|
+
|
|
261
|
+
for m in range(1, self.reihen + 1):
|
|
262
|
+
for n in range(1, self.reihen + 1):
|
|
263
|
+
x_disp += (
|
|
264
|
+
self.matrix[m - 1][n - 1]
|
|
265
|
+
* self.function_1(a_sol, m)
|
|
266
|
+
* self.function_2(b_sol, n)
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
return x_disp
|
|
270
|
+
|
|
271
|
+
def SolutionPointMomentx(self, a_sol, b_sol):
|
|
272
|
+
"""
|
|
273
|
+
Berechnet den Biegemoment mxx an einem bestimmten Punkt (a_sol, b_sol).
|
|
274
|
+
"""
|
|
275
|
+
mxx = 0.0
|
|
276
|
+
|
|
277
|
+
for m in range(1, self.reihen + 1):
|
|
278
|
+
for n in range(1, self.reihen + 1):
|
|
279
|
+
mxx += self.matrix[m - 1][n - 1] * (
|
|
280
|
+
-self.D_11 * self.function_1xx(a_sol, m) * self.function_2(b_sol, n)
|
|
281
|
+
- self.D_12
|
|
282
|
+
* self.function_2yy(b_sol, n)
|
|
283
|
+
* self.function_1(a_sol, m)
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
return mxx
|
|
287
|
+
|
|
288
|
+
def SolutionPointMomenty(self, a_sol, b_sol):
|
|
289
|
+
"""
|
|
290
|
+
Berechnet den Biegemoment myy an einem bestimmten Punkt (a_sol, b_sol).
|
|
291
|
+
"""
|
|
292
|
+
myy = 0.0
|
|
293
|
+
|
|
294
|
+
for m in range(1, self.reihen + 1):
|
|
295
|
+
for n in range(1, self.reihen + 1):
|
|
296
|
+
myy += self.matrix[m - 1][n - 1] * (
|
|
297
|
+
-self.D_12 * self.function_1xx(a_sol, m) * self.function_2(b_sol, n)
|
|
298
|
+
- self.D_22
|
|
299
|
+
* self.function_2yy(b_sol, n)
|
|
300
|
+
* self.function_1(a_sol, m)
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
return myy
|
|
304
|
+
|
|
305
|
+
def SolutionPointMomentxy(self, a_sol, b_sol):
|
|
306
|
+
"""
|
|
307
|
+
Berechnet das Drillmoment Mxy an einem bestimmten Punkt (a_sol, b_sol).
|
|
308
|
+
"""
|
|
309
|
+
mxy = 0.0
|
|
310
|
+
|
|
311
|
+
for m in range(1, self.reihen + 1):
|
|
312
|
+
for n in range(1, self.reihen + 1):
|
|
313
|
+
mxy += (
|
|
314
|
+
-self.D_66
|
|
315
|
+
* self.matrix[m - 1][n - 1]
|
|
316
|
+
* (self.function_1x(a_sol, m) * self.function_2y(b_sol, n))
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
return mxy
|
|
320
|
+
|
|
321
|
+
def SolutionPointShearForceX(self, a_sol, b_sol):
|
|
322
|
+
"""
|
|
323
|
+
Berechnet die Querkraft Qx an einem bestimmten Punkt (a_sol, b_sol).
|
|
324
|
+
"""
|
|
325
|
+
Qx = 0.0
|
|
326
|
+
|
|
327
|
+
for m in range(1, self.reihen + 1):
|
|
328
|
+
for n in range(1, self.reihen + 1):
|
|
329
|
+
term1 = (
|
|
330
|
+
self.D_11 * self.function_1xxx(a_sol, m) * self.function_2(b_sol, n)
|
|
331
|
+
)
|
|
332
|
+
term2 = (
|
|
333
|
+
(self.D_12 + self.D_66)
|
|
334
|
+
* self.function_1x(a_sol, m)
|
|
335
|
+
* self.function_2yy(b_sol, n)
|
|
336
|
+
)
|
|
337
|
+
Qx += self.matrix[m - 1][n - 1] * (term1 + term2)
|
|
338
|
+
|
|
339
|
+
return Qx
|
|
340
|
+
|
|
341
|
+
def SolutionPointShearForceY(self, a_sol, b_sol):
|
|
342
|
+
"""
|
|
343
|
+
Berechnet die Querkraft Qy an einem bestimmten Punkt (a_sol, b_sol).
|
|
344
|
+
"""
|
|
345
|
+
Qy = 0.0
|
|
346
|
+
|
|
347
|
+
for m in range(1, self.reihen + 1):
|
|
348
|
+
for n in range(1, self.reihen + 1):
|
|
349
|
+
term1 = (
|
|
350
|
+
self.D_22 * self.function_1(a_sol, m) * self.function_2yyy(b_sol, n)
|
|
351
|
+
)
|
|
352
|
+
term2 = (
|
|
353
|
+
(self.D_12 + self.D_66)
|
|
354
|
+
* self.function_1xx(a_sol, m)
|
|
355
|
+
* self.function_2y(b_sol, n)
|
|
356
|
+
)
|
|
357
|
+
Qy += self.matrix[m - 1][n - 1] * (term1 + term2)
|
|
358
|
+
|
|
359
|
+
return Qy
|
|
360
|
+
|
|
361
|
+
def function_1(self, x, m):
|
|
362
|
+
if self.support == "hhhh":
|
|
363
|
+
return np.sin(x * np.pi / self.a * m)
|
|
364
|
+
elif self.support == "cccc":
|
|
365
|
+
return 1 - np.cos(2 * m * np.pi * x / self.a)
|
|
366
|
+
elif self.support == "hhff":
|
|
367
|
+
|
|
368
|
+
lambda_m = (0.50 + m - 1) * np.pi
|
|
369
|
+
if m == 2:
|
|
370
|
+
lambda_m = 4.730041
|
|
371
|
+
elif m == 3:
|
|
372
|
+
lambda_m = 7.853205
|
|
373
|
+
elif m == 4:
|
|
374
|
+
lambda_m = 10.99561
|
|
375
|
+
|
|
376
|
+
alpha = lambda_m / self.a
|
|
377
|
+
|
|
378
|
+
a_j = (np.sinh(lambda_m) - np.sin(lambda_m)) / (
|
|
379
|
+
np.cosh(lambda_m) - np.cos(lambda_m)
|
|
380
|
+
)
|
|
381
|
+
if m > 1:
|
|
382
|
+
return (np.sin(alpha * x) + np.sinh(alpha * x)) / (
|
|
383
|
+
np.sin(lambda_m) - np.sinh(lambda_m)
|
|
384
|
+
) - a_j * (np.cosh(alpha * x) + np.cos(alpha * x)) / (
|
|
385
|
+
np.cos(lambda_m) - np.cosh(lambda_m)
|
|
386
|
+
)
|
|
387
|
+
else:
|
|
388
|
+
return np.ones_like(x)
|
|
389
|
+
elif self.support == "hhhf":
|
|
390
|
+
lambda_m = (0.25 + m - 1) * np.pi
|
|
391
|
+
if m == 2:
|
|
392
|
+
lambda_m = 3.926602
|
|
393
|
+
elif m == 3:
|
|
394
|
+
lambda_m = 7.068582
|
|
395
|
+
elif m == 4:
|
|
396
|
+
lambda_m = 10.21018
|
|
397
|
+
|
|
398
|
+
alpha = lambda_m / self.a
|
|
399
|
+
if m > 1:
|
|
400
|
+
return np.sin(alpha * x) + np.sinh(alpha * x) * np.sin(
|
|
401
|
+
lambda_m
|
|
402
|
+
) / np.sinh(lambda_m)
|
|
403
|
+
else:
|
|
404
|
+
return x / self.a
|
|
405
|
+
else:
|
|
406
|
+
return np.zeros_like(x)
|
|
407
|
+
|
|
408
|
+
def function_2(self, y, n):
|
|
409
|
+
if self.support == "hhhh":
|
|
410
|
+
return np.sin(y * np.pi / self.b * n)
|
|
411
|
+
elif self.support == "cccc":
|
|
412
|
+
return 1 - np.cos(2 * n * np.pi * y / self.b)
|
|
413
|
+
elif self.support == "hhff":
|
|
414
|
+
return np.sin(y * np.pi / self.b * n)
|
|
415
|
+
elif self.support == "hhhf":
|
|
416
|
+
return np.sin(y * np.pi / self.b * n)
|
|
417
|
+
else:
|
|
418
|
+
return np.zeros_like(y)
|
|
419
|
+
|
|
420
|
+
def function_1x(self, x, m):
|
|
421
|
+
if self.support == "hhhh":
|
|
422
|
+
return np.cos(x * np.pi / self.a * m) * np.pi / self.a * m
|
|
423
|
+
elif self.support == "cccc":
|
|
424
|
+
return 2 * np.pi * m * np.sin(2 * np.pi * m * x / self.a) / self.a
|
|
425
|
+
elif self.support == "hhff":
|
|
426
|
+
lambda_m = (0.50 + m) * np.pi
|
|
427
|
+
if m == 2:
|
|
428
|
+
lambda_m = 4.730041
|
|
429
|
+
elif m == 3:
|
|
430
|
+
lambda_m = 7.853205
|
|
431
|
+
elif m == 4:
|
|
432
|
+
lambda_m = 10.99561
|
|
433
|
+
|
|
434
|
+
alpha = lambda_m / self.a
|
|
435
|
+
a_j = (np.sinh(lambda_m) - np.sin(lambda_m)) / (
|
|
436
|
+
np.cosh(lambda_m) - np.cos(lambda_m)
|
|
437
|
+
)
|
|
438
|
+
if m > 1:
|
|
439
|
+
return alpha * (
|
|
440
|
+
(np.cos(alpha * x) + np.cosh(alpha * x))
|
|
441
|
+
/ (np.sin(lambda_m) - np.sinh(lambda_m))
|
|
442
|
+
- a_j
|
|
443
|
+
* (np.sinh(alpha * x) - np.sin(alpha * x))
|
|
444
|
+
/ (np.cos(lambda_m) - np.cosh(lambda_m))
|
|
445
|
+
)
|
|
446
|
+
else:
|
|
447
|
+
return np.zeros_like(x)
|
|
448
|
+
|
|
449
|
+
elif self.support == "hhhf":
|
|
450
|
+
lambda_m = (0.25 + m - 1) * np.pi
|
|
451
|
+
if m == 2:
|
|
452
|
+
lambda_m = 3.926602
|
|
453
|
+
elif m == 3:
|
|
454
|
+
lambda_m = 7.068582
|
|
455
|
+
elif m == 4:
|
|
456
|
+
lambda_m = 10.21018
|
|
457
|
+
|
|
458
|
+
alpha = lambda_m / self.a
|
|
459
|
+
if m > 1:
|
|
460
|
+
return alpha * (
|
|
461
|
+
np.cos(alpha * x)
|
|
462
|
+
+ np.cosh(alpha * x) * np.sin(lambda_m) / np.sinh(lambda_m)
|
|
463
|
+
)
|
|
464
|
+
else:
|
|
465
|
+
return 1 / self.a
|
|
466
|
+
else:
|
|
467
|
+
return np.zeros_like(x)
|
|
468
|
+
|
|
469
|
+
def function_1xx(self, x, m):
|
|
470
|
+
if self.support == "hhhh":
|
|
471
|
+
return -np.sin(x * np.pi / self.a * m) * (np.pi / self.a * m) ** 2
|
|
472
|
+
elif self.support == "cccc":
|
|
473
|
+
return 4 * np.pi**2 * m**2 * np.cos(2 * np.pi * m * x / self.a) / self.a**2
|
|
474
|
+
elif self.support == "hhff":
|
|
475
|
+
lambda_m = (0.50 + m - 1) * np.pi
|
|
476
|
+
if m == 2:
|
|
477
|
+
lambda_m = 4.730041
|
|
478
|
+
elif m == 3:
|
|
479
|
+
lambda_m = 7.853205
|
|
480
|
+
elif m == 4:
|
|
481
|
+
lambda_m = 10.99561
|
|
482
|
+
|
|
483
|
+
alpha = lambda_m / self.a
|
|
484
|
+
a_j = (np.sinh(lambda_m) - np.sin(lambda_m)) / (
|
|
485
|
+
np.cosh(lambda_m) - np.cos(lambda_m)
|
|
486
|
+
)
|
|
487
|
+
if m > 1:
|
|
488
|
+
return (alpha**2) * (
|
|
489
|
+
(-np.sin(alpha * x) + np.sinh(alpha * x))
|
|
490
|
+
/ (np.sin(lambda_m) - np.sinh(lambda_m))
|
|
491
|
+
- a_j
|
|
492
|
+
* (np.cosh(alpha * x) - np.cos(alpha * x))
|
|
493
|
+
/ ((np.cos(lambda_m) - np.cosh(lambda_m)))
|
|
494
|
+
)
|
|
495
|
+
else:
|
|
496
|
+
return np.zeros_like(x)
|
|
497
|
+
|
|
498
|
+
elif self.support == "hhhf":
|
|
499
|
+
lambda_m = (0.25 + m - 1) * np.pi
|
|
500
|
+
if m == 2:
|
|
501
|
+
lambda_m = 3.926602
|
|
502
|
+
elif m == 3:
|
|
503
|
+
lambda_m = 7.068582
|
|
504
|
+
elif m == 4:
|
|
505
|
+
lambda_m = 10.21018
|
|
506
|
+
|
|
507
|
+
alpha = lambda_m / self.a
|
|
508
|
+
if m > 1:
|
|
509
|
+
return alpha**2 * (
|
|
510
|
+
-np.sin(alpha * x)
|
|
511
|
+
+ np.sinh(alpha * x) * np.sin(lambda_m) / np.sinh(lambda_m)
|
|
512
|
+
)
|
|
513
|
+
else:
|
|
514
|
+
return 0
|
|
515
|
+
|
|
516
|
+
else:
|
|
517
|
+
return np.zeros_like(x)
|
|
518
|
+
|
|
519
|
+
def function_1xxx(self, x, m):
|
|
520
|
+
if self.support == "hhhh":
|
|
521
|
+
return np.cos(x * np.pi / self.a * m) * (np.pi / self.a * m) ** 3 * (-1)
|
|
522
|
+
|
|
523
|
+
elif self.support == "cccc":
|
|
524
|
+
return -8 * np.pi**3 * m**3 * np.sin(2 * np.pi * m * x / self.a) / self.a**3
|
|
525
|
+
|
|
526
|
+
elif self.support == "hhff":
|
|
527
|
+
lambda_m = (0.50 + m - 1) * np.pi
|
|
528
|
+
if m == 2:
|
|
529
|
+
lambda_m = 4.730041
|
|
530
|
+
elif m == 3:
|
|
531
|
+
lambda_m = 7.853205
|
|
532
|
+
elif m == 4:
|
|
533
|
+
lambda_m = 10.99561
|
|
534
|
+
|
|
535
|
+
alpha = lambda_m / self.a
|
|
536
|
+
a_j = (np.sinh(lambda_m) - np.sin(lambda_m)) / (
|
|
537
|
+
np.cosh(lambda_m) - np.cos(lambda_m)
|
|
538
|
+
)
|
|
539
|
+
if m > 1:
|
|
540
|
+
return (alpha**3) * (
|
|
541
|
+
(-np.cos(alpha * x) + np.cosh(alpha * x))
|
|
542
|
+
/ (np.sin(lambda_m) - np.sinh(lambda_m))
|
|
543
|
+
- a_j
|
|
544
|
+
* (np.sinh(alpha * x) + np.sin(alpha * x))
|
|
545
|
+
/ (np.cos(lambda_m) - np.cosh(lambda_m))
|
|
546
|
+
)
|
|
547
|
+
else:
|
|
548
|
+
return np.zeros_like(x) # Starrkörperverschiebung
|
|
549
|
+
|
|
550
|
+
elif self.support == "hhhf":
|
|
551
|
+
lambda_m = (0.25 + m - 1) * np.pi
|
|
552
|
+
if m == 2:
|
|
553
|
+
lambda_m = 3.926602
|
|
554
|
+
elif m == 3:
|
|
555
|
+
lambda_m = 7.068582
|
|
556
|
+
elif m == 4:
|
|
557
|
+
lambda_m = 10.21018
|
|
558
|
+
|
|
559
|
+
alpha = lambda_m / self.a
|
|
560
|
+
if m > 1:
|
|
561
|
+
return alpha**3 * (
|
|
562
|
+
-np.cos(alpha * x)
|
|
563
|
+
+ np.cosh(alpha * x) * np.sin(lambda_m) / np.sinh(lambda_m)
|
|
564
|
+
)
|
|
565
|
+
else:
|
|
566
|
+
return 0
|
|
567
|
+
else:
|
|
568
|
+
return np.zeros_like(x)
|
|
569
|
+
|
|
570
|
+
def function_2y(self, y, n):
|
|
571
|
+
if self.support == "hhhh":
|
|
572
|
+
return np.cos(y * np.pi / self.b * n) * np.pi / self.b * n
|
|
573
|
+
elif self.support == "cccc":
|
|
574
|
+
return 2 * np.pi * n * np.sin(2 * np.pi * n * y / self.b) / self.b
|
|
575
|
+
elif self.support == "hhff":
|
|
576
|
+
return 2 * np.pi * n * np.sin(2 * np.pi * n * y / self.b) / self.b
|
|
577
|
+
elif self.support == "hhhf":
|
|
578
|
+
return 2 * np.pi * n * np.sin(2 * np.pi * n * y / self.b) / self.b
|
|
579
|
+
else:
|
|
580
|
+
return np.zeros_like(x)
|
|
581
|
+
|
|
582
|
+
def function_2yy(self, y, n):
|
|
583
|
+
if self.support == "hhhh":
|
|
584
|
+
return -np.sin(y * np.pi / self.b * n) * (np.pi / self.b * n) ** 2
|
|
585
|
+
elif self.support == "cccc":
|
|
586
|
+
return 4 * np.pi**2 * n**2 * np.cos(2 * np.pi * n * y / self.b) / self.b**2
|
|
587
|
+
elif self.support == "hhff":
|
|
588
|
+
return -np.sin(y * np.pi / self.b * n) * (np.pi / self.b * n) ** 2
|
|
589
|
+
elif self.support == "hhhf":
|
|
590
|
+
return -np.sin(y * np.pi / self.b * n) * (np.pi / self.b * n) ** 2
|
|
591
|
+
else:
|
|
592
|
+
return np.zeros_like(y)
|
|
593
|
+
|
|
594
|
+
def function_2yyy(self, y, n):
|
|
595
|
+
if self.support == "hhhh":
|
|
596
|
+
return np.cos(y * np.pi / self.b * n) * (np.pi / self.b * n) ** 3 * (-1)
|
|
597
|
+
elif self.support == "cccc":
|
|
598
|
+
return -8 * np.pi**3 * n**3 * np.sin(2 * np.pi * n * y / self.b) / self.b**3
|
|
599
|
+
elif self.support == "hhff":
|
|
600
|
+
return np.cos(y * np.pi / self.b * n) * (np.pi / self.b * n) ** 3 * (-1)
|
|
601
|
+
elif self.support == "hhhf":
|
|
602
|
+
return np.cos(y * np.pi / self.b * n) * (np.pi / self.b * n) ** 3 * (-1)
|
|
603
|
+
else:
|
|
604
|
+
return np.zeros_like(y)
|
|
605
|
+
|
|
606
|
+
def PlotLoad(self):
|
|
607
|
+
"""
|
|
608
|
+
Plottet die aufgebrachte Belastung auf der Platte.
|
|
609
|
+
"""
|
|
610
|
+
x_values = [0, self.a, self.a, 0, 0]
|
|
611
|
+
y_values = [0, 0, self.b, self.b, 0]
|
|
612
|
+
|
|
613
|
+
if self.loading == "Regular":
|
|
614
|
+
rectangular_loads = [
|
|
615
|
+
# [x0, x1, y0, y1]
|
|
616
|
+
[self.x0, self.x0 + self.u, self.y0, self.y0 + self.v]
|
|
617
|
+
]
|
|
618
|
+
|
|
619
|
+
for load in rectangular_loads:
|
|
620
|
+
x0, x1, y0, y1 = load
|
|
621
|
+
x = [x0, x1, x1, x0, x0]
|
|
622
|
+
y = [y0, y0, y1, y1, y0]
|
|
623
|
+
plt.plot(x, y)
|
|
624
|
+
else:
|
|
625
|
+
print("Else")
|
|
626
|
+
for i in range(0, len(self.RectangularLoad["x0[m]"]), 1):
|
|
627
|
+
x = [
|
|
628
|
+
self.RectangularLoad["x0[m]"][i],
|
|
629
|
+
self.RectangularLoad["x1[m]"][i],
|
|
630
|
+
self.RectangularLoad["x1[m]"][i],
|
|
631
|
+
self.RectangularLoad["x0[m]"][i],
|
|
632
|
+
self.RectangularLoad["x0[m]"][i],
|
|
633
|
+
]
|
|
634
|
+
y = [
|
|
635
|
+
self.RectangularLoad["y0[m]"][i],
|
|
636
|
+
self.RectangularLoad["y0[m]"][i],
|
|
637
|
+
self.RectangularLoad["y1[m]"][i],
|
|
638
|
+
self.RectangularLoad["y1[m]"][i],
|
|
639
|
+
self.RectangularLoad["y0[m]"][i],
|
|
640
|
+
]
|
|
641
|
+
|
|
642
|
+
plt.plot(x, y)
|
|
643
|
+
|
|
644
|
+
plt.plot(x_values, y_values)
|
|
645
|
+
plt.gca().set_aspect("equal", adjustable="box")
|
|
646
|
+
plt.show(block=False)
|
|
647
|
+
plt.pause(2)
|
|
648
|
+
plt.close()
|
|
649
|
+
|
|
650
|
+
def PlotDeflectionGrid(self, grid_size=20):
|
|
651
|
+
"""
|
|
652
|
+
Berechnet und plottet ein Raster der Momentenverläufe.
|
|
653
|
+
|
|
654
|
+
Args:
|
|
655
|
+
grid_size (int): Anzahl der Unterteilungen in x- und y-Richtung. Standardmäßig 20.
|
|
656
|
+
"""
|
|
657
|
+
x_values = np.linspace(0, self.a, grid_size)
|
|
658
|
+
y_values = np.linspace(0, self.b, grid_size)
|
|
659
|
+
self.w_values = np.zeros((grid_size, grid_size))
|
|
660
|
+
|
|
661
|
+
for i, x in enumerate(x_values):
|
|
662
|
+
for j, y in enumerate(y_values):
|
|
663
|
+
self.w_values[i][j] = self.SolutionPointDisp(x, y)
|
|
664
|
+
|
|
665
|
+
print("Max. Deflection", self.w_values.max())
|
|
666
|
+
|
|
667
|
+
X, Y = np.meshgrid(x_values, y_values)
|
|
668
|
+
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
|
|
669
|
+
surf = ax.plot_surface(
|
|
670
|
+
X, Y, self.w_values, cmap=cm.coolwarm, linewidth=0, antialiased=False
|
|
671
|
+
)
|
|
672
|
+
ax.set_title("Deflections w in [mm]")
|
|
673
|
+
plt.show(block=False)
|
|
674
|
+
plt.pause(6)
|
|
675
|
+
plt.close()
|
|
676
|
+
|
|
677
|
+
def PlotMomentGrid(self, grid_size=20):
|
|
678
|
+
"""
|
|
679
|
+
Berechnet und plottet ein Raster der Momentenverläufe.
|
|
680
|
+
|
|
681
|
+
Args:
|
|
682
|
+
grid_size (int): Anzahl der Unterteilungen in x- und y-Richtung. Standardmäßig 20.
|
|
683
|
+
"""
|
|
684
|
+
x_values = np.linspace(0, self.a, grid_size)
|
|
685
|
+
y_values = np.linspace(0, self.b, grid_size)
|
|
686
|
+
self.mx_values = np.zeros((grid_size, grid_size))
|
|
687
|
+
self.my_values = np.zeros((grid_size, grid_size))
|
|
688
|
+
|
|
689
|
+
for i, x in enumerate(x_values):
|
|
690
|
+
for j, y in enumerate(y_values):
|
|
691
|
+
self.mx_values[i][j] = self.SolutionPointMomentx(x, y)
|
|
692
|
+
self.my_values[i][j] = self.SolutionPointMomenty(x, y)
|
|
693
|
+
|
|
694
|
+
print("Max-Moment x in [kNm]", self.mx_values.max() * 1000)
|
|
695
|
+
print("Min-Moment x in [kNm]", self.mx_values.min() * 1000)
|
|
696
|
+
print("Max-Moment y in [kNm]", self.my_values.max() * 1000)
|
|
697
|
+
print("Min-Moment y in [kNm]", self.my_values.min() * 1000)
|
|
698
|
+
|
|
699
|
+
X, Y = np.meshgrid(x_values, y_values)
|
|
700
|
+
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
|
|
701
|
+
surf = ax.plot_surface(
|
|
702
|
+
X, Y, self.mx_values, cmap=cm.coolwarm, linewidth=0, antialiased=False
|
|
703
|
+
)
|
|
704
|
+
ax.set_title("Moment Mx")
|
|
705
|
+
plt.show(block=False)
|
|
706
|
+
plt.pause(6)
|
|
707
|
+
plt.close()
|
|
708
|
+
|
|
709
|
+
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
|
|
710
|
+
surf = ax.plot_surface(
|
|
711
|
+
X, Y, self.my_values, cmap=cm.coolwarm, linewidth=0, antialiased=False
|
|
712
|
+
)
|
|
713
|
+
ax.set_title("Moment My")
|
|
714
|
+
plt.show(block=False)
|
|
715
|
+
plt.pause(6)
|
|
716
|
+
plt.close()
|
|
717
|
+
|
|
718
|
+
def PlotShearForceGrid(self, grid_size=20):
|
|
719
|
+
"""
|
|
720
|
+
Berechnet und plottet ein Raster der Querkräfte.
|
|
721
|
+
"""
|
|
722
|
+
x_values = np.linspace(0, self.a, grid_size)
|
|
723
|
+
y_values = np.linspace(0, self.b, grid_size)
|
|
724
|
+
self.qx_values = np.zeros((grid_size, grid_size))
|
|
725
|
+
self.qy_values = np.zeros((grid_size, grid_size))
|
|
726
|
+
|
|
727
|
+
for i, x in enumerate(x_values):
|
|
728
|
+
for j, y in enumerate(y_values):
|
|
729
|
+
self.qx_values[i][j] = self.SolutionPointShearForceX(x, y)
|
|
730
|
+
self.qy_values[i][j] = self.SolutionPointShearForceY(x, y)
|
|
731
|
+
|
|
732
|
+
print("Max Qx in [kN/m]", self.qx_values.max() * 1000)
|
|
733
|
+
print("Min Qx in [kN/m]", self.qx_values.min() * 1000)
|
|
734
|
+
print("Max Qy in [kN/m]", self.qy_values.max() * 1000)
|
|
735
|
+
print("Min Qy in [kN/m]", self.qy_values.min() * 1000)
|
|
736
|
+
|
|
737
|
+
X, Y = np.meshgrid(x_values, y_values)
|
|
738
|
+
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
|
|
739
|
+
surf = ax.plot_surface(
|
|
740
|
+
X, Y, self.qx_values, cmap=cm.coolwarm, linewidth=0, antialiased=False
|
|
741
|
+
)
|
|
742
|
+
ax.set_title("Querkraft Qx")
|
|
743
|
+
plt.show(block=False)
|
|
744
|
+
plt.pause(6)
|
|
745
|
+
plt.close()
|
|
746
|
+
|
|
747
|
+
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
|
|
748
|
+
surf = ax.plot_surface(
|
|
749
|
+
X, Y, self.qy_values, cmap=cm.coolwarm, linewidth=0, antialiased=False
|
|
750
|
+
)
|
|
751
|
+
ax.set_title("Querkraft Qy")
|
|
752
|
+
plt.show(block=False)
|
|
753
|
+
plt.pause(6)
|
|
754
|
+
plt.close()
|
|
755
|
+
|
|
756
|
+
def PlotTorsionalMomentGrid(self, grid_size=20):
|
|
757
|
+
"""
|
|
758
|
+
Berechnet und plottet ein Raster der Drillmomente.
|
|
759
|
+
"""
|
|
760
|
+
x_values = np.linspace(0, self.a, grid_size)
|
|
761
|
+
y_values = np.linspace(0, self.b, grid_size)
|
|
762
|
+
self.mxy_values = np.zeros((grid_size, grid_size))
|
|
763
|
+
|
|
764
|
+
for i, x in enumerate(x_values):
|
|
765
|
+
for j, y in enumerate(y_values):
|
|
766
|
+
self.mxy_values[i][j] = self.SolutionPointMomentxy(x, y)
|
|
767
|
+
|
|
768
|
+
print("Max Mxy in [kNm/m]", self.mxy_values.max() * 1000)
|
|
769
|
+
print("Min Mxy in [kNm/m]", self.mxy_values.min() * 1000)
|
|
770
|
+
|
|
771
|
+
X, Y = np.meshgrid(x_values, y_values)
|
|
772
|
+
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
|
|
773
|
+
surf = ax.plot_surface(
|
|
774
|
+
X, Y, self.mxy_values, cmap=cm.coolwarm, linewidth=0, antialiased=False
|
|
775
|
+
)
|
|
776
|
+
ax.set_title("Drillmoment Mxy")
|
|
777
|
+
plt.show(block=False)
|
|
778
|
+
plt.pause(6)
|
|
779
|
+
plt.close()
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
|
|
783
|
+
a = 15
|
|
784
|
+
b = 6
|
|
785
|
+
|
|
786
|
+
Plate = PlateBendingKirchhoffClass(
|
|
787
|
+
35000, 0.30, a, b, 1, 0.5, 0.5, 0.5, 0.5, 0.0, 0, 0, n_inte=50, loading="Liste", support = "hhhh",reihen = 8)
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
btire = 0.37
|
|
791
|
+
p_tire = 120/(4*btire**2) / 1000
|
|
792
|
+
|
|
793
|
+
print("tire pressure [MN/m²]: ", p_tire)
|
|
794
|
+
|
|
795
|
+
# Daten als Liste von Listen
|
|
796
|
+
new_data = [
|
|
797
|
+
["No.","x0[m]","x1[m]","y0[m]","y1[m]","p0[MN/m**2]"],
|
|
798
|
+
[1,3+2-btire,3+2+btire,0.5,0.5+2*btire,p_tire *1.5],
|
|
799
|
+
[2,3+3.2-btire,3+3.2+btire,0.5,0.5+2*btire,p_tire *1.5],
|
|
800
|
+
[3,3+3.2-btire,3+3.2+btire,2.5,2.5+2*btire,p_tire *1.5],
|
|
801
|
+
[4,3+2-btire,3+2+btire,2.5,2.5+2*btire,p_tire *1.5],
|
|
802
|
+
|
|
803
|
+
[5,0,15,0,3,6.5/1000*1.5],
|
|
804
|
+
|
|
805
|
+
[6,0,15,0,6,2.5/1000*1.5],
|
|
806
|
+
[7,0,15,0,6,0.35*25/1000*1.35],
|
|
807
|
+
|
|
808
|
+
# [6,2-0.2,2+0.2,3.5,3.9,100/0.4**2/1000],
|
|
809
|
+
# [7,3.2-0.2,3.2+0.2,3.5,3.9,100/0.4**2/1000],
|
|
810
|
+
# [8,3.2-0.2,3.2+0.2,5.5,5.9,100/0.4**2/1000],
|
|
811
|
+
# [9,2-0.2,2+0.2,5.5,5.9,100/0.4**2/1000],
|
|
812
|
+
|
|
813
|
+
# [10,2-0.2,2+0.2,6.5,6.9,100/0.4**2/1000],
|
|
814
|
+
# [11,3.2-0.2,3.2+0.2,6.5,6.9,100/0.4**2/1000],
|
|
815
|
+
# [12,3.2-0.2,3.2+0.2,8.5,8.9,100/0.4**2/1000],
|
|
816
|
+
# [13,2-0.2,2+0.2,8.5,8.9,100/0.4**2/1000]
|
|
817
|
+
|
|
818
|
+
]
|
|
819
|
+
|
|
820
|
+
# Konvertiere die Daten in ein DataFrame
|
|
821
|
+
df = pd.DataFrame(new_data[1:], columns=new_data[0])
|
|
822
|
+
|
|
823
|
+
# Dateipfad zur CSV-Datei
|
|
824
|
+
file_path = 'Loading/Constant_Loading.csv'
|
|
825
|
+
|
|
826
|
+
# Schreibe das DataFrame in eine CSV-Datei
|
|
827
|
+
df.to_csv(file_path, index=False)
|
|
828
|
+
|
|
829
|
+
|
|
830
|
+
Plate.CalculateAll()
|
|
831
|
+
|
|
832
|
+
Plate.SolutionPointDisp(0.5,0.5)
|
|
833
|
+
Plate.SolutionPointMomentx(0.5,0.5)
|
|
834
|
+
Plate.SolutionPointMomenty(0.5,0.5)
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
Plate.PlotLoad()
|
|
838
|
+
print("BENDING MOMENTS")
|
|
839
|
+
Plate.PlotMomentGrid()
|
|
840
|
+
print("SHEAR FORCES")
|
|
841
|
+
Plate.PlotShearForceGrid()
|
|
842
|
+
print("DRILL MOMENTS")
|
|
843
|
+
Plate.PlotTorsionalMomentGrid()
|