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,27 @@
1
+ from Iteration import IterationClass
2
+ from Plotting import PlottingStructure
3
+
4
+
5
+ Iteration = IterationClass()
6
+ try:
7
+ Iteration.Summarize()
8
+ except:
9
+ Iteration.SummarizeLinear()
10
+
11
+ plotter = PlottingStructure(
12
+ Iteration.UG_FINAL,
13
+ Iteration.FI_FINAL,
14
+ Iteration.EXTFORCES,
15
+ Iteration.MBRFORCES,
16
+ Iteration.Inp.nodes,
17
+ Iteration.Inp.members,
18
+ Iteration.Mat.P0,
19
+ Iteration.Inp.restrainedIndex,
20
+ _reactionsFlag=True,
21
+ )
22
+
23
+ plotter.Kspring_diag = Iteration.Kspring_diag # (nDoF,)
24
+ # optional (noch besser, damit nur echte Federn geplottet werden)
25
+ # plotter.spring_dofs = Iteration.spring_dofs
26
+
27
+ plotter.create_structure_plot()
@@ -33,10 +33,10 @@ class PlateBendingKirchhoffClass:
33
33
  loading="Regular",
34
34
  support="hhhh",
35
35
  reihen=8,
36
- x_s_positions = [],
37
- I_s_values= [],
38
- y_s_positions = [],
39
- I_t_values = []
36
+ x_s_positions=[],
37
+ I_s_values=[],
38
+ y_s_positions=[],
39
+ I_t_values=[],
40
40
  ):
41
41
  """
42
42
  Initialisierung der Klasse PlateBendingKirchhoff.
@@ -97,15 +97,12 @@ class PlateBendingKirchhoffClass:
97
97
 
98
98
  self.load = np.zeros((self.reihen**2))
99
99
 
100
-
101
100
  self.x_s_array = np.array(x_s_positions, dtype=np.float64)
102
101
  self.I_s_array = np.array(I_s_values, dtype=np.float64)
103
102
 
104
-
105
103
  self.y_s_array = np.array(y_s_positions, dtype=np.float64)
106
104
  self.I_t_array = np.array(I_t_values, dtype=np.float64)
107
105
 
108
-
109
106
  def CalculateAll(self):
110
107
  """
111
108
  Führt alle Berechnungsschritte aus.
@@ -142,7 +139,7 @@ class PlateBendingKirchhoffClass:
142
139
  self.x_s_array,
143
140
  self.I_s_array,
144
141
  self.y_s_array,
145
- self.I_t_array
142
+ self.I_t_array,
146
143
  )
147
144
 
148
145
  self.mat = np.array(self.mat) # Konvertierung in ein NumPy-Array
@@ -779,49 +776,59 @@ class PlateBendingKirchhoffClass:
779
776
  plt.close()
780
777
 
781
778
 
782
-
783
779
  a = 15
784
780
  b = 6
785
781
 
786
782
  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)
783
+ 35000,
784
+ 0.30,
785
+ a,
786
+ b,
787
+ 1,
788
+ 0.5,
789
+ 0.5,
790
+ 0.5,
791
+ 0.5,
792
+ 0.0,
793
+ 0,
794
+ 0,
795
+ n_inte=50,
796
+ loading="Liste",
797
+ support="hhhh",
798
+ reihen=8,
799
+ )
788
800
 
789
801
 
790
802
  btire = 0.37
791
- p_tire = 120/(4*btire**2) / 1000
803
+ p_tire = 120 / (4 * btire**2) / 1000
792
804
 
793
805
  print("tire pressure [MN/m²]: ", p_tire)
794
806
 
795
807
  # Daten als Liste von Listen
796
808
  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
-
809
+ ["No.", "x0[m]", "x1[m]", "y0[m]", "y1[m]", "p0[MN/m**2]"],
810
+ [1, 3 + 2 - btire, 3 + 2 + btire, 0.5, 0.5 + 2 * btire, p_tire * 1.5],
811
+ [2, 3 + 3.2 - btire, 3 + 3.2 + btire, 0.5, 0.5 + 2 * btire, p_tire * 1.5],
812
+ [3, 3 + 3.2 - btire, 3 + 3.2 + btire, 2.5, 2.5 + 2 * btire, p_tire * 1.5],
813
+ [4, 3 + 2 - btire, 3 + 2 + btire, 2.5, 2.5 + 2 * btire, p_tire * 1.5],
814
+ [5, 0, 15, 0, 3, 6.5 / 1000 * 1.5],
815
+ [6, 0, 15, 0, 6, 2.5 / 1000 * 1.5],
816
+ [7, 0, 15, 0, 6, 0.35 * 25 / 1000 * 1.35],
808
817
  # [6,2-0.2,2+0.2,3.5,3.9,100/0.4**2/1000],
809
818
  # [7,3.2-0.2,3.2+0.2,3.5,3.9,100/0.4**2/1000],
810
819
  # [8,3.2-0.2,3.2+0.2,5.5,5.9,100/0.4**2/1000],
811
820
  # [9,2-0.2,2+0.2,5.5,5.9,100/0.4**2/1000],
812
-
813
821
  # [10,2-0.2,2+0.2,6.5,6.9,100/0.4**2/1000],
814
822
  # [11,3.2-0.2,3.2+0.2,6.5,6.9,100/0.4**2/1000],
815
823
  # [12,3.2-0.2,3.2+0.2,8.5,8.9,100/0.4**2/1000],
816
824
  # [13,2-0.2,2+0.2,8.5,8.9,100/0.4**2/1000]
817
-
818
825
  ]
819
826
 
820
827
  # Konvertiere die Daten in ein DataFrame
821
828
  df = pd.DataFrame(new_data[1:], columns=new_data[0])
822
829
 
823
830
  # Dateipfad zur CSV-Datei
824
- file_path = 'Loading/Constant_Loading.csv'
831
+ file_path = "Loading/Constant_Loading.csv"
825
832
 
826
833
  # Schreibe das DataFrame in eine CSV-Datei
827
834
  df.to_csv(file_path, index=False)
@@ -829,9 +836,9 @@ df.to_csv(file_path, index=False)
829
836
 
830
837
  Plate.CalculateAll()
831
838
 
832
- Plate.SolutionPointDisp(0.5,0.5)
833
- Plate.SolutionPointMomentx(0.5,0.5)
834
- Plate.SolutionPointMomenty(0.5,0.5)
839
+ Plate.SolutionPointDisp(0.5, 0.5)
840
+ Plate.SolutionPointMomentx(0.5, 0.5)
841
+ Plate.SolutionPointMomenty(0.5, 0.5)
835
842
 
836
843
 
837
844
  Plate.PlotLoad()
@@ -840,4 +847,4 @@ Plate.PlotMomentGrid()
840
847
  print("SHEAR FORCES")
841
848
  Plate.PlotShearForceGrid()
842
849
  print("DRILL MOMENTS")
843
- Plate.PlotTorsionalMomentGrid()
850
+ Plate.PlotTorsionalMomentGrid()
@@ -20,6 +20,7 @@ class Input:
20
20
  self.ElementLoads()
21
21
  self.MaterialData()
22
22
  self.CrossSectionData()
23
+ self.Springs()
23
24
 
24
25
  def MaterialData(self):
25
26
  try:
@@ -47,7 +48,7 @@ class Input:
47
48
  df_numeric = df[numeric_columns]
48
49
 
49
50
  self.nodes = df_numeric
50
-
51
+ self.nDoF = (len(self.nodes))*7
51
52
  print("1. 🟢 Vertices.csv imported")
52
53
  else:
53
54
  self.forceLocationData = []
@@ -60,7 +61,7 @@ class Input:
60
61
  numeric_columns = ['na', 'ne',"cs"]
61
62
  df_numeric = df[numeric_columns]
62
63
  self.members = df_numeric
63
- self.nDoF = (len(self.members)+1)*7
64
+
64
65
  print("2. 🟢 Edges.csv imported")
65
66
  else:
66
67
  print("2. 🛑 STOP: Edges.csv not found")
@@ -72,6 +73,16 @@ class Input:
72
73
  df_numeric = df[numeric_columns]
73
74
  self.RestraintData = df_numeric
74
75
 
76
+ def Springs(self):
77
+ if not glob("data/Springs.csv"):
78
+ self.SpringsData = pd.DataFrame(columns=["node_a","node_e","dof","cp[MN]"])
79
+ print("⚠️ Springs.csv not found (optional)")
80
+ return
81
+
82
+ df = pd.read_csv("data/Springs.csv")
83
+ self.SpringsData = df[["node_a","node_e","dof","cp[MN]"]].copy()
84
+ print("🟢 Springs.csv imported")
85
+
75
86
  def NodalForces(self):
76
87
  df = pd.read_csv("data/NodalForces.csv")
77
88
  self.NodalForces = df
@@ -0,0 +1,61 @@
1
+ import pandas as pd
2
+ import numpy as np
3
+
4
+
5
+ class OutputData:
6
+ def __init__(self):
7
+ print("Init OutputData")
8
+
9
+ def support_reactions_from_springs_table(self, res, u0_default=0.0):
10
+ # --- robuster Typ-/Attribut-Check ---
11
+ needed = ("Inp", "GesMat", "u_ges", "FGes")
12
+ missing = [a for a in needed if not hasattr(res, a)]
13
+ if missing:
14
+ raise TypeError(
15
+ "Du musst ein AnalysisResults-Objekt übergeben (res = mainloop().run()). "
16
+ f"Übergeben wurde: {type(res)}; fehlende Attribute: {missing}"
17
+ )
18
+
19
+ dfR = res.Inp.RestraintData.copy()
20
+
21
+ # u als 1D
22
+ u = np.asarray(res.u_ges, dtype=float).reshape(-1)
23
+
24
+ # DOF Mapping (7 dof/node)
25
+ dof_name = {
26
+ 0: ("Fx", "MN"),
27
+ 1: ("Fy", "MN"),
28
+ 2: ("Mz", "MNm"),
29
+ 3: ("Fz", "MN"),
30
+ 4: ("My", "MNm"),
31
+ 5: ("Mx", "MNm"),
32
+ 6: ("W", "-"),
33
+ }
34
+
35
+ rows = []
36
+ for _, row in dfR.iterrows():
37
+ node = int(row["Node"])
38
+ dof = int(row["Dof"])
39
+ k = float(row["Cp[MN/m]/[MNm/m]"])
40
+
41
+ gdof = 7 * (node - 1) + dof
42
+ ui = float(u[gdof])
43
+ u0 = float(u0_default)
44
+
45
+ Ri = k * (ui - u0)
46
+
47
+ name, unit = dof_name.get(dof, (f"DOF{dof}", ""))
48
+
49
+ rows.append(
50
+ {
51
+ "Node": node,
52
+ "DOF": dof,
53
+ "Type": name,
54
+ "k": k,
55
+ "u": ui,
56
+ "R_spring": Ri,
57
+ "Unit": unit,
58
+ }
59
+ )
60
+
61
+ return pd.DataFrame(rows).sort_values(["Node", "DOF"]).reset_index(drop=True)