Ein Modell in Python aufbauen und rechnen
Sieben Objekte decken fast jedes Modell ab: Node, Material, Section, Member, MemberSet, NodalSupport und NodalLoad. Sie setzen sie zusammen, rufen run_analysis() auf und lesen ein nach Lastfall geordnetes Ergebnispaket aus.
Die Kernobjekte
Alles wird aus fers_core importiert. Ein Modell ist eine FERS-Instanz, die Stabgruppen hält; Lasten hängen an Lastfällen und nicht direkt am Modell, dieselbe Geometrie kann also mehrere unabhängige Lastfälle tragen.
- Node — ein X-, Y-, Z-Punkt. Y zeigt nach oben. Knoten tragen ihre Auflagerbedingung.
- Material — E-Modul, Schubmodul, Dichte, Streckgrenze. Durchgängig SI: Pascal und kg/m³.
- Section — Fläche und Flächenmomente zweiten Grades, mit Bezug auf ein Material.
- Member — ein Balkenelement mit zwei Knoten und sechs Freiheitsgraden je Knoten, mit Bezug auf einen Querschnitt.
- MemberSet — die Gruppe, die Sie dem Modell hinzufügen, und zugleich die Einheit, auf die Nachweise angewendet werden.
- NodalSupport — die einem Knoten zugewiesene Randbedingung.
- NodalLoad — eine Kraft oder ein Moment, das innerhalb eines Lastfalls auf einen Knoten wirkt.
from fers_core import (
FERS, Node, Member, Section, Material,
MemberSet, NodalSupport, NodalLoad
)Geometrie, Material und Querschnitt definieren
Koordinaten in Metern, Materialkennwerte in Pascal. Der folgende Querschnitt ist ein IPE 180 aus der FERS-Profilbibliothek.
Beachten Sie die Achsenkonvention, denn sie ist mit Abstand die häufigste Ursache für ein falsches Ergebnis: i_z ist die starke Achse, i_y die schwache. Ein Träger, der sich in seiner üblichen Ebene biegt, wird von i_z bestimmt.
# Nodes (x, y, z coordinates in metres)
node1 = Node(0, 0, 0)
node2 = Node(5, 0, 0)
# Material (Steel S235)
steel = Material(
name="Steel S235",
e_mod=210e9, # Pa
g_mod=80.769e9, # Pa
density=7850, # kg/m³
yield_stress=235e6 # Pa
)
# Cross-section (IPE 180), values from the FERS steel section library.
# Axis convention: i_z is the STRONG axis (bending in the local x-y plane),
# i_y the weak axis — see ferscloud.com/conventions
section = Section(
name="IPE 180",
material=steel,
i_y=1.009e-6, # m⁴ (weak axis)
i_z=13.17e-6, # m⁴ (strong axis)
j=0.0477e-6, # m⁴
area=0.00240 # m²
)Alle Achsen-, Vorzeichen- und Einheitenkonventionen stehen auf der Konventionsseite. Der JSON-Vertrag erwartet Winkel in Grad, nicht im Bogenmaß.
Stab erzeugen, Auflager und Last aufbringen
Ein bloßes NodalSupport() ist voll eingespannt. Für ein Gelenk- oder Rollenlager übergeben Sie displacement_conditions und rotation_conditions explizit — die Beispiele zeigen beides.
Lastrichtungen sind globale Einheitsvektoren, (0, 1, 0) mit negativem Betrag ist also eine nach unten gerichtete Kraft.
# Create beam element
beam = Member(start_node=node1, end_node=node2, section=section)
# Fixed support at node1
node1.nodal_support = NodalSupport()
# Organise members into a set and add to model
model = FERS()
model.add_member_set(MemberSet(members=[beam]))
# Load case with a −1 kN point load at node2
lc = model.create_load_case(name="Gravity")
NodalLoad(node=node2, load_case=lc, magnitude=-1000, direction=(0, 1, 0))Berechnung starten und Ergebnisse lesen
run_analysis() rechnet jeden Lastfall. Die Ergebnisse liegen unter model.resultsbundle, geordnet nach Lastfallnamen, mit Verformungen und Auflagerkräften nach Knoten-ID als Zeichenkette.
Die Kommentare zeigen die tatsächliche Ausgabe für genau diese Eingaben.
model.run_analysis()
results = model.resultsbundle.loadcases["Gravity"]
dy = results.displacement_nodes["2"].dy
Vy = results.reaction_nodes["1"].nodal_forces.fy
Mz = results.reaction_nodes["1"].nodal_forces.mz
print(f"Tip deflection : {dy*1000:.3f} mm") # -15.065 mm
print(f"Reaction Vy : {Vy:.1f} N") # 1000.0 N
print(f"Reaction Mz : {Mz:.1f} Nm") # 5000.0 NmHandrechnung: Ein 5 m langer Kragarm mit Biegung um die starke Achse liefert δ = PL³ / 3EI_z = 1000·5³ / (3 · 210×10⁹ · 13,17×10⁻⁶) = 15,07 mm, dazu aus dem Gleichgewicht eine Auflagerkraft von 1 kN und ein Einspannmoment von 5 kN·m. Der Solver gibt 15,065 mm zurück.
Über die lineare Statik hinaus
Dasselbe Modellobjekt trägt die Einstellungen der übrigen Berechnungsarten. Berechnung nach Theorie II. Ordnung (P-Delta), lineares Beulen mit kritischem Laststeigerungsfaktor, Modalanalyse und Antwortspektrum-Erdbebenberechnung werden alle über Analyseeinstellungen gesteuert, nicht über eine andere Schnittstelle.
Nachweise werden an Stabgruppen gehängt und nach der Berechnung ausgewertet. Sie liefern klauselweise Ausnutzungen samt der Zwischenwerte, aus denen sie entstanden sind — ein Nachweis liest sich also wie eine Handrechnung und nicht wie eine einzelne Zahl.
- Prüfen Sie zuerst gegen geschlossene Lösungen — siehe Genauigkeits-Benchmarks und NAFEMS.
- Für Nachweise nach EN 1993-1-1 baut, rechnet und prüft
check_beamein Einfeld in einem Aufruf — siehe die Beispiele.
Verwandte Seiten
Siehe auch
Häufige Fragen
Warum sind meine Verformungen über Zeichenketten indiziert?
displacement_nodes["2"], nicht [2].Wofür ist ein MemberSet da?
Wie modelliere ich ein Gelenk- oder Rollenlager?
NodalSupport explizite Bedingungen. Ein Gelenklager hält die drei Verschiebungen und lässt die Biegeverdrehungen frei; halten Sie zusätzlich die Torsionsverdrehung, sonst hat der Stab eine Starrkörper-Drehung und die Berechnung wird singulär. Das Einfeldträger-Beispiel zeigt beides.Welches Flächenmoment ist die starke Achse?
i_z. FERS behandelt die lokale z-Achse durchgängig als starke Biegeachse — Solver, Nachweise und Ergebnislinien sind sich darin einig. Vertauschte i_y und i_z sind der häufigste Modellierfehler.Brauche ich für die Berechnung eine Internetverbindung?
run_analysis() führt den kompilierten Solver in Ihrem eigenen Prozess aus. Netzwerkzugriff entsteht nur, wenn Sie einen Cloud-Endpunkt aufrufen.