Durchgerechnete Beispiele
Vier Skripte zum Einfügen und Ausführen. Jedes nennt die erwartete Ausgabe für genau seine Eingaben und die geschlossene Lösung, gegen die es geprüft wurde — Sie können also bestätigen, dass Ihre Installation sie reproduziert, bevor Sie einem eigenen Modell vertrauen.
1. Kragarm mit Einzellast am Ende
Ein 5 m langer Kragarm IPE 180, an einem Ende voll eingespannt, mit einer nach unten gerichteten Einzellast von 1 kN an der Spitze. Das ist das einfachste Modell, das die gesamte Kette durchläuft: Geometrie, Material, Querschnitt, Auflager, Lastfall und Berechnung.
from fers_core import FERS, Node, Member, Section, Material, MemberSet, NodalSupport, NodalLoad
model = FERS()
node1 = Node(0, 0, 0) # fixed end
node2 = Node(5, 0, 0) # free end (5 m span)
steel = Material(name="Steel S235", e_mod=210e9, g_mod=80.769e9, density=7850, yield_stress=235e6)
# IPE 180 from the FERS section library: i_z = strong axis (in play here), i_y = weak axis
section = Section(name="IPE 180", material=steel, i_y=1.009e-6, i_z=13.17e-6, j=0.0477e-6, area=0.00240)
beam = Member(start_node=node1, end_node=node2, section=section)
node1.nodal_support = NodalSupport() # fully fixed
model.add_member_set(MemberSet(members=[beam]))
lc = model.create_load_case(name="End Load")
NodalLoad(node=node2, load_case=lc, magnitude=-1000, direction=(0, 1, 0))
model.run_analysis()
dy = model.resultsbundle.loadcases["End Load"].displacement_nodes["2"].dy
print(f"Tip deflection: {dy*1000:.3f} mm")
# Expected output: Tip deflection: -15.065 mm
# Hand check: δ = PL³/3EI_z = 1000·5³ / (3 · 210e9 · 13.17e-6) = 15.07 mm ✓Handrechnung: δ = PL³ / 3EI_z = 1000·5³ / (3 · 210×10⁹ · 13,17×10⁻⁶) = 15,07 mm. Der Solver gibt 15,065 mm zurück.
2. Einfeldträger mit Einzellast in Feldmitte
Ein 10 m langer IPE 300 aus zwei Stäben à 5 m, damit in Feldmitte ein Knoten zum Belasten und Ablesen liegt. Gelenklager an einem Ende, Rollenlager am anderen.
Beachten Sie die expliziten Auflagerbedingungen. Das Gelenklager hält die drei Verschiebungen und die Torsionsverdrehung, lässt aber die Biegeverdrehungen frei — halten Sie die Torsion nicht, hat der Träger eine Starrkörper-Drehung und die Steifigkeitsmatrix wird singulär. Das Rollenlager gibt zusätzlich die Längsverschiebung frei, damit sich der Träger frei dehnen kann.
from fers_core import FERS, Node, Member, Section, Material, MemberSet, NodalSupport, NodalLoad
model = FERS()
node1 = Node(0, 0, 0)
node2 = Node(5, 0, 0) # mid-span
node3 = Node(10, 0, 0) # right support
steel = Material(name="Steel S235", e_mod=210e9, g_mod=80.769e9, density=7850, yield_stress=235e6)
section = Section(name="IPE 300", material=steel, i_y=6.038e-6, i_z=83.58e-6, j=0.199e-6, area=0.00538)
beam1 = Member(start_node=node1, end_node=node2, section=section)
beam2 = Member(start_node=node2, end_node=node3, section=section)
# Pin at node1 — bending rotations free, torsion (RX) held so the beam
# has no rigid-body twist mode. Roller at node3 — X translation free too.
pin = NodalSupport(
displacement_conditions={"X": "Fixed", "Y": "Fixed", "Z": "Fixed"},
rotation_conditions={"X": "Fixed", "Y": "Free", "Z": "Free"},
)
roller = NodalSupport(
displacement_conditions={"X": "Free", "Y": "Fixed", "Z": "Fixed"},
rotation_conditions={"X": "Free", "Y": "Free", "Z": "Free"},
)
node1.nodal_support = pin
node3.nodal_support = roller
model.add_member_set(MemberSet(members=[beam1, beam2]))
lc = model.create_load_case(name="Centre Load")
NodalLoad(node=node2, load_case=lc, magnitude=-10000, direction=(0, 1, 0))
model.run_analysis()
dy_mid = model.resultsbundle.loadcases["Centre Load"].displacement_nodes["2"].dy
print(f"Mid-span deflection: {dy_mid*1000:.3f} mm")
# Expected output: Mid-span deflection: -11.870 mm
# Hand check: δ = PL³/48EI_z = 10000·10³ / (48 · 210e9 · 83.58e-6) = 11.87 mm ✓Handrechnung: δ = PL³ / 48EI_z = 10000·10³ / (48 · 210×10⁹ · 83,58×10⁻⁶) = 11,87 mm. Der Solver gibt 11,870 mm zurück.
3. Rahmen unter Horizontallast
Zwei 4 m hohe Stützen HEA 200 mit eingespannten Fußpunkten und ein 6 m langer Riegel IPE 300, belastet durch eine horizontale Kraft von 5 kN am Kopf der linken Stütze. Das ist das kleinste Modell, bei dem die Rahmenwirkung — und nicht ein einzelner Stab — das Ergebnis bestimmt.
from fers_core import FERS, Node, Member, Section, Material, MemberSet, NodalSupport, NodalLoad
model = FERS()
# Portal frame: two columns (h=4 m) + one beam (L=6 m)
n1 = Node(0, 0, 0) # left base
n2 = Node(0, 4, 0) # left top
n3 = Node(6, 4, 0) # right top
n4 = Node(6, 0, 0) # right base
steel = Material(name="Steel S235", e_mod=210e9, g_mod=80.769e9, density=7850, yield_stress=235e6)
col_sec = Section(name="HEA 200", material=steel, i_y=13.36e-6, i_z=36.93e-6, j=0.206e-6, area=0.00538)
beam_sec = Section(name="IPE 300", material=steel, i_y=6.038e-6, i_z=83.58e-6, j=0.199e-6, area=0.00538)
col_left = Member(start_node=n1, end_node=n2, section=col_sec)
col_right = Member(start_node=n4, end_node=n3, section=col_sec)
rafter = Member(start_node=n2, end_node=n3, section=beam_sec)
n1.nodal_support = NodalSupport() # fixed base
n4.nodal_support = NodalSupport() # fixed base
model.add_member_set(MemberSet(members=[col_left, col_right, rafter]))
lc = model.create_load_case(name="Wind")
# Horizontal wind load on left column top
NodalLoad(node=n2, load_case=lc, magnitude=5000, direction=(1, 0, 0))
model.run_analysis()
dx = model.resultsbundle.loadcases["Wind"].displacement_nodes["2"].dx
print(f"Sway at left top: {dx*1000:.3f} mm")
# Expected output: Sway at left top: 5.310 mm
# Hand check (slope-deflection, axial deformation neglected): 5.30 mm ✓Handrechnung nach dem Drehwinkelverfahren unter Vernachlässigung der Längsverformung: 5,30 mm. Der Solver gibt 5,310 mm zurück. Eine ausführlichere Behandlung mit Ergebnislinien steht im Rahmen-Beispiel.
4. Stahlnachweis nach Eurocode 3
check_beam baut ein Einfeld, rechnet es und führt die Bauteilnachweise nach EN 1993-1-1 in einem Aufruf durch. Hier: ein 10 m … genauer, ein 7,5 m langer Einfeldträger IPE 400 aus S355 unter einer charakteristischen Gleichstreckenlast von 13 kN/m, mit 1,35 beaufschlagt, Druckgurt über die volle Länge nicht gehalten.
Das Ergebnis enthält eine klauselweise Nachvollziehung statt einer einzelnen Zahl, jede Ausnutzung liest sich also wie eine Handrechnung — die Zwischenwerte, aus denen sie entstand, sind alle vorhanden.
from fers_core import check_beam
# 7.5 m simply supported IPE 400 in S355, 13 kN/m characteristic UDL,
# ULS factor 1.35, compression flange unrestrained over the full span
model = check_beam(
span=7.5,
section="IPE400",
material="S355",
udl=13_000, # N/m characteristic (13 kN/m)
uls_factor=1.35,
)
model.run_analysis()
check = model.unity_check_results()[0]
print(f"Governing UC: {check['max_utilization']:.2f}")
for step in check["governing"]["trace"]:
print(f" {step['label']:22s} {step['value']:.2f}")
# Expected output (solver-computed, matches the published worked example):
# Governing UC: 0.82
# Bending y (6.2.5) 0.00
# Bending z (6.2.5) 0.27
# Shear z (6.2.6) 0.00
# Shear y (6.2.6) 0.07
# Combined N+M (6.2.1) 0.27
# LTB (6.3.2) 0.82
# Governing 0.82Das reproduziert das veröffentlichte Eurocode-3-Beispiel, in dem derselbe Fall klauselweise dargestellt ist. Maßgebend wird das Biegedrillknicken mit einer Ausnutzung von 0,82.
Prüfen, bevor Sie vertrauen
Jedes Beispiel oben nennt einen Zahlenwert neben der geschlossenen Lösung, die es reproduzieren soll. Das ist Absicht, und es ist die Gewohnheit, die man übernehmen sollte: Rechnen Sie einen Fall, dessen Antwort Sie kennen, bevor Sie auf einen skalieren, dessen Antwort Sie nicht kennen.
Die Genauigkeits-Benchmarks tun das über eine breitere Menge geschlossener Lösungen, und die NAFEMS-Seite rechnet die üblichen Finite-Elemente-Benchmarks live in Ihrem Browser, jeweils mit der Abweichung zwischen Sollwert und FERS.
Verwandte Seiten
Ein Modell in Python aufbauen und rechnen
Die Python-Kernobjekte, wie sie zusammenspielen, und wie Sie Verformungen, Schnittgrößen und Auflagerkräfte auslesen.
REST-API-Referenz
Jeder SDK-Endpunkt mit Anfrage und Antwort — Anmeldung, Schlüssel, Berechnung, Validierung, Trägernachweis und Modellverwaltung.
Siehe auch
Häufige Fragen
Warum braucht das Einfeldträger-Beispiel zwei Stäbe?
Warum hält das Gelenklager die Torsionsverdrehung?
Meine Werte weichen in der letzten Stelle ab — ist etwas falsch?
i_y / i_z oder einen Einheitenfehler hin.