Projektarbeit zur Veranstaltung „Programmieren in Fortran 90/95“ Matrizenmethode Aufgabenstellung Ziel ist es, die Verformung beliebiger, räumlicher Stabfachwerke zu berechnen Gegeben sind Randbedingungen und Belastungen Statisch bestimmte oder überbestimmte Strukturen Einschränkungen Alle Stäbe des Fachwerkes besitzen die gleiche Querschnittsfläche A und den gleichen E-Modul Verschiebungsrandbedingungen sind vom Typ „Verschiebung = 0“ Berechnet werden die Verschiebungen der einzelnen Knoten d A Das Hauptprogramm I Das Hauptprogramm II Das Hauptprogramm III Das Hauptprogramm IV Das Hauptprogramm V Das Modul Enthält alle Arrays variabler Länge Dynamische Speicherverwaltung Verwendung von Haupt- und Unterprogrammen Allokierung in einer Subroutine möglich Deallokierung in einer Subroutine möglich Format der Eingabedatei Datei eingabe.txt im gleichen Verz.! 328 1 0 70.71067812 0 2 35.35533906 35.35533906 0 3000 112 223 110 120 130 230 2 5 -300 310 320 330 Leseroutinen I lesen1 holt die zur Speicherallokierung benötigten Daten speicher nimmt die Allokierung vor lesen2 liest die eigentlich benötigten Daten ein Leseroutinen II Leseroutinen III Leseroutinen IV Elementsteifigkeitsmatrix I Elementsteifigkeitsmatrix beschreibt Zusammenhang zwischen Kräften und Verschiebungen eines Stabelementes Hookesches Gesetz für den Stab: F l EA E E l F A l l (1) Führt man eine Koordinate s im 1-dim. Raum ein, so ist dies für beide Knoten ausgeschrieben: FS 2 FS 1 u S1 u S1 ~ EA K : l ~ ~ K K uS1 FS1 ~ ~ K K u S 2 FS 2 (2) (3) [Rieg, Hackenschmidt: „Finite Elemente Analyse für Ingenieure“] Elementsteifigkeitsmatrix II Im 3-dim. Raum sind die Projektionen der Verschiebungen auf die Stabachse relevant: u1 u X 1 eX uY 1 eY uZ 1 eZ uS1 eS u1 e (4) uS1 u X 1 eX 1 eS1 uY 1 eY 1 eS1 uZ 1 eZ 1 eS1 ! (5) u S1 u1 s uZ1 uX1 x2 x1 l y y z z uY 1 2 1 u Z 1 2 1 l l (6) uS1 u X 1 uY 1 [Dankert, Dankert: „Technische Mechanik computerunterstützt“] Elementsteifigkeitsmatrix III Die Resultierende der Knotenkräfte muss in Stabachse fallen, da der Stab nur Zug-/Druckkräfte aufnehmen kann: FS1 eS FX 1 eX FY 1 eY FZ 1 eZ FS 1 l FX 1 x2 x1 (7) FS 1 l FY 1 y2 y1 (8) l FS 1 FZ 1 z 2 z1 (9) Die Gleichungen (6) bis (9) erhält man analog für den zweiten Knoten Damit ergibt sich die Elementsteifigkeitsmatrix Stabes im 3-dim. Raum zu: Elementsteifigkeitsmatrix IV ( x2 x1 ) 2 ( x2 x1 ) ( y2 y1 ) (x x ) (z z ) Ke K 2 1 2 2 1 ( x2 x1 ) ( x2 x1 ) ( y2 y1 ) (x x ) (z z ) 2 1 2 1 mit ( x2 x1 ) ( z2 z1 ) ( x2 x1 ) ( x2 x1 ) ( x2 x1 ) ( y2 y1 ) ( x2 x1 ) ( z2 z1 ) ( y2 y1 ) 2 ( y2 y1 ) ( z2 z1 ) ( x2 x1 ) ( y2 y1 ) ( y2 y1 ) 2 ( y2 y1 ) ( z2 z1 ) ( y2 y1 ) ( z2 z1 ) ( z2 z1 ) 2 ( x2 x1 ) ( z2 z1 ) ( y2 y1 ) ( z2 z1 ) ( z2 z1 ) 2 ( x2 x1 ) ( y2 y1 ) ( x2 x1 ) ( z2 z1 ) ( x2 x1 ) 2 ( x2 x1 ) ( y2 y1 ) ( x2 x1 ) ( z2 z1 ) ( y2 y1 ) 2 ( y2 y1 ) ( z2 z1 ) ( x2 x1 ) ( y2 y1 ) ( y2 y1 ) 2 ( y2 y1 ) ( z2 z1 ) ( y2 y1 ) ( z2 z1 ) ( z2 z1 ) 2 ( x2 x1 ) ( z2 z1 ) ( y2 y1 ) ( z2 z1 ) ( z2 z1 ) 2 ( x2 x1 ) ( y2 y1 ) ~ K EA K : 2 3 l l (11) Damit ist der Zusammenhang zwischen Verschiebungen und Kräften: Ke u F (12) mit: u u X 1 uY 1 u Z 1 u X 2 F FX 1 FY 1 FZ 1 FX 2 uY 2 FY 2 uZ 2 T FZ 2 T Elementsteifigkeitsmatrix IV Gesamtsteifigkeitsmatrix I Zusammenbauen der einzelnen Elementst.matrizen entspricht dem Addieren von Gleichungen Die Position der Summanden ergibt sich aus den Knoten des jew. Stabes Die Summe der inneren Kräfte ergibt null, d.h. der Lastvektor F ist zunächst ein Nullvektor Gesamtsteifigkeitsmatrix II Gesamtsteifigkeitsmatrix III Randbedingungen Äußere Kräfte werden an der jew. Stelle in den Lastvektor F eingetragen Verschiebungsrandbedingungen werden gemäß [Rieg, Hackenschmidt: „Finite Elemente Analyse für Ingenieure“] in die Ges.st.matrix eingebaut: [Rieg, Hackenschmidt: „Finite Elemente Analyse für Ingenieure“] Lösen des LGS K ges u F Das LGS ist regulär, wenn die Struktur statisch bestimmt oder überbestimmt ist Die Lösung wird hier mit einer CholeskyZerlegung berechnet Ausschreiben der Ergebnisse In die Ausgabedatei aus.txt werden die Verschiebungen der einzelnen Knoten geschrieben Eine Zeile pro Knoten Anschließend übernimmt die Subroutine speicher_freigeben die Deallokation Ein kleines Beispiel I Ein kleines Beispiel II