Methoden der Topologieoptimierung im Fachwerk Studienarbeit von Somchai Somsakul Prüfer: Prof. Dr. sc. math. habil. Joachim Gwinner Betreuer: Dipl.-Math. Daniel Mohr Instituts für Mathematik und Rechneranwendung Fakultät für Luft- und Raumfahrttechnik Universität der Bundeswehr München 2 Erklärung Hiermit versichere ich, daß ich diese Arbeit selbständig und nur mit den angegebenen Hilfstmitteln angefertigt habe. Neubiberg, 18. Mai 2010 Somchai Somsakul 3 4 Inhaltsverzeichnis Inhaltsverzeichnis 6 1 Einleitung 7 2 Fachwerk 9 2.1 Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.1 Elastizitätsmodul E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.2 Exakte Grundstrukturen und Fachwerke . . . . . . . . . . . . . . . . . . . . . 19 3 Fachwerksoptimierung: Sizing, Geometry, Topology 3.1 3.2 Topologieoptimierung beim Fachwerk als Volumensminimierung . . . . . . . . . . . . 28 3.1.1 Elastizitätstheorie für ebene Stabwerke . . . . . . . . . . . . . . . . . . . . . . 28 3.1.2 Optimierungsmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Topologieoptimierung beim Fachwerk mit Steifigkeitsmatrix . . . . . . . . . . . . . . 35 4 Optimierung mit Matlab 4.1 4.1.1 Definition des Bauraum (Zeile 5 bis 6) . . . . . . . . . . . . . . . . . . . . . . 40 4.1.2 Definition des Gitters (Zeile 7 bis 15) 4.1.3 Angreifende Kräfte an der Konstruktion(Zeile 20 bis 22) . . . . . . . . . . . . 43 4.1.4 Festlegung von Lagern im Bauraum (Zeile 27 bis 32) . . . . . . . . . . . . . . 43 Vergleich der Vernetzung 45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.1.1 jeder Knoten mit jedem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.1.2 Geometriematrix, nur Nachbarknoten . . . . . . . . . . . . . . . . . . . . . . 47 5.1.3 Geometriematrix, nur Nachbarknoten kreuzungsfrei . . . . . . . . . . . . . . 48 5.1.4 Vergleich der Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Vergleich von Stop und Sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.2.1 Vergleich der Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Literaturverzeichnis Abbildungsverzeichnis Tabellenverzeichnis Anhang . . . . . . . . . . . . . . . . . . . . . . 40 Ausgabe der Lösung ( Zeile 37 bis 41) . . . . . . . . . . . . . . . . . 44 5 Vergleich der Methoden 5.2 39 Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.1.4.1 5.1 23 I III V VII 5 6 Inhaltsverzeichnis sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VII stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIII stäbeknotenaufgitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVIII bilderzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXIII 1 Einleitung Die Erforschung mechanischer Grundprinzipien ist so alt wie die physikalische Wissenschaft überhaupt. Anfang des 16. Jahrhunderts war Kopernikus wohl einer der ersten, der moderne analytische Denkweise einsetzte, um die Planetenbewegung zu erklären. Im Jahr 1679 postulierte Hooke das nach ihm benannte Federgesetz, und legte damit den Grundstein für die Elastizitätstheorie. Über die Infinitesimalrechnung nach Leibniz und die bahnberechnenden Ergebnisse von Newton begannen drei Jahrhunderte der Entdeckungen, die die Physik zu einer der wesentlichen Wissenschaften der Menschheit gemacht haben. Die Mathematik spielte dabei stets zwei unterschiedliche Rollen: Auf der einen Seite dient sie zur Verifikation und Modellbildung, auf der anderen Seite jedoch auch immer wieder als Impulsgeber für neue physikalische Ansätze. Das Weltbild von Leibniz (1646-116) Die Welt ist die beste aller möglichen wird in der Theorie von Darwin (1809-1882) noch verstärkt: Die Evolution dient als ewiger Anpassungs- und Optimierungsprozeß. In diesem Zusammenhang kann man für das Streben des Wissenschaftlers nach besserem Verständnis der Natur über das rein wissenschaftliche Interesse hinaus eine weitere Motivation angeben: Durch bessere Einsicht in die Funktionsweise der naturgegebenen Möglichkeiten kann der Mensch die seit Millionen von Jahren währende Evolution nutzen, um selbst besser von der Natur zu profitieren. Dies führte im Laufe der Geschichte immer wieder zu der Fragestellung nach gut funktionierenden Konstruktionen für mancherlei Anwendungen, indem man die Natur betrachtete. Ein klassisches Beispiel dafür ist der Beginn der Fliegerei, als man sich Federn an die Arme band. Natürlich mußten erst Wege gefunden werden, eine Struktur genügend genau zu beschreiben. Dies geschah stets im Rahmen von Physik und Mathematik, die damals noch nicht getrennt werden konnten. Betrachten wir die Konstruktion von Teilen, die einer gegebenen Belastung standhalten sollen: Erst Ende des letzten Jahrhunderts gelang es eine analytische Theorie zu formulieren, die das elastoplastische Verhalten von Körpern mit Hilfe von Energie- und Spannungszuständen beschreibt. Daran anschließend konnte man sich die Frage nach guten Strukturen stellen. Was dabei als Gütekriterium anzusehen ist, bleibt bis heute umstritten. Die ersten theoretischen Arbeiten zu diesem Thema betrachten das minimale Gewicht. Die entwickelten Modelle waren jedoch zu kompliziert, als daß man eine effektive Optimierung damals hätte durchführen können. Erst die Entwicklung numerischer Verfahren gestattete es, einfache Optimierungsprobleme zu lösen. Dies gelang ab den fünfziger Jahren mit dem Beginn der mathematischen Optimierung. Die parallel einsetzende Entwicklung von elektronischen Rechnern gestattete die Anwendung immer aufwendigerer Algorithmen auf immer komplexere Probleme. Dabei wurde das eigentliche Ziel, die automatische Generierung einer sehr guten Struktur, nie aus den Augen verloren. Eine eigene Wissenschaftsrichtung, die sich genau mit dieser Frage beschäftigt, hat sich gegründet, die Strukturoptimierung. Sie ist in dem Dreieck bestehend aus Ingenieurwesen, Physik und angewandter Mathematik angesiedelt. 7 8 Kapitel 1. Einleitung Die letzten 40 Jahren haben aus den erwähnten Gründen (Weiterentwicklung der klassischen physikalischen Theorie, Entwicklung von nummerischen Optimierungsmethoden und von Digitalrechnern) zu einem Boom in der Strukturoptimierung geführt. Die Entwicklung sehr komplexer Bauteile und Konstruktionen ist dabei nicht mehr nur auf Erfahrungswerte angewiesen, sondern kann neue wissenschaftliche Erkenntnisse ebenso einbeziehen wie die Verbesserung älterer auf Erfahrung basierender Prinzipien. Das wachsende Interesse gerade in den letzten 10 Jahren ist sicher nicht nur auf neue Berechnungsmöglichkeiten durch größere Rechenanlagen zurückzuführen, sondern auch auf die phänomenalen Ergebnisse, die der Entwicklung - z.B. im Flugzeugbau - zugute kamen. So können heute Strukturen signifikant verbessert werden, die noch vor 10 Jahren praktisch als optimal angesehen wurden. Nicht zuletzt unter diesem Aspekt wird der Strukturoptimierung eine wachsende Bedeutung zugemessen. Dabei ist man sich jedoch im klaren, daß es nicht genügt, lediglich neue und bessere Berechnungsmethoden für bekannte Probleme zu entwickeln. Es müssen vielmehr auch neue theoretische Modelle aufgestellt und auf ihre Brauchbarkeit hin untersucht werden. Dies macht die Strukturoptimierung zu einer multidisziplinären Wissenschaft, die trotz ihres klassischen Ursprungs stets nach vielen Richtungen hin offen ist. In dieser Arbeit soll untersucht werden, wie man die Konstruktion durch unterschiedliche Optimierungsmethoden finden kann. Dabei sollen die Ergebnisse miteinander vergleicht werden. 2 Fachwerk Es wird zunächst der hier verwendete Fachwerksbegriff sowie das Optimierungsproblem der Gewichtsminimierung ebener Fachwerke definiert. Nach der Darstellung des zugrundeliegenden physikalischen Modells des elastischen Verhaltens eines Stabes wird das Analyseverfahren zur Tragfähigkeitsuntersuchung angegeben. Die Definitionen und Formalisierungen dieses Kapitels sind im Sinne des Optimierungsproblems minimales Gewicht zu verstehen und erheben keinen Anspruch auf Anwendbarkeit in einem anderen Kontext. Geltende, physikalische Zusammenhänge sind teilweise vereinfacht, mögliche Problemstellungen sind eingeschränkt. Im einzelnen berührt dies folgende Punkte: • Es wird nur der ebene Fall betrachtet, d. h. alle Knoten und Stäbe des Fachwerks sowie alle Kraft- und Verschiebungsvektoren liegen in einer Ebene. Der betreffende Ausschnitt der Ebene wird als Konstruktionsraum R bezeichnet (R ⊆ R2 ). Eine Verallgemeinerung der Definitionen dieses Kapitels auf den räumlichen Fall (R ⊆ R3 ) ist problemlos möglich. • Alle Kraft- und Verschiebungsvektoren sind parallel zu einer der Achsen eines für R vorgegebenen x-y-Koordinatensystems. Kraft- und Verschiebungsanteile für unterschiedliche Koordinatenrichtungen eines Knotens sind – abgesehen vom elastischen Verhalten des Fachwerks – nicht korreliert. Dies schließt z. B. schräg liegende Freilager aus. • Ein Stab befindet sich in seiner gesamten Länge innerhalb von R, wenn sich seine beiden Endpunkte in R befinden. • Alle Stäbe sind aus demselben Material hergestellt und haben einheitliche, physikalische Eigenschaften, insbesondere denselben Elastizitätsmodul E. • Es werden ideale Stäbe mit linearem, elastischem Verhalten angenommen, d. h. die Verlängerung u eines Stabes ist proportional (u ∼ f mit Proportionalitätskonstante k) zur in Stablängsrichtung wirkenden Kraft f (Hookesches Materialgesetz): ku = f • Vorspannungen von Stäben, thermische Einflüsse u. ä. bleiben bei der Belastungsanalyse unberücksichtigt. • Anstelle einer Unterscheidung verschiedener Versagensformen von Stäben wie Stabilitäts- und Festigkeitsversagen wird Versagen hier als Überschreitung der Stabspannung σ einer maximalen Stabspannung σmax definiert, der Wert σ wird zwischen σmin ≤ σ ≤ σmax angenommen. Mit σmin = −σmax wird der maximale Druck auf den selben Zahlenwert wie der maximale Zug gesetzt. • Bei der Überprüfung der Tragfähigkeit wird das Eigengewicht des Fachwerks vernachlässigt. Dieses Vorgehen verfälscht das Ergebnis der Tragfähigkeitsuntersuchung nur wenig, wenn die 9 10 Kapitel 2. Fachwerk Abbildung 2.1: Beispiel eines Fachwerks durch die Belastungen hervorgerufenen Kräfte deutlich größer sind als die durch die Belastungen hervorgerufenen Kräfte deutlich größer sind als die durch die Eigenmasse des Fachwerks auftretenden Gewichtskräfte. 2.1 Definitionen Brückenträger, Dachbinder, Kräne, Gerüste u. a. m. sind in der Regel technische Anwendungen von Tragwerken, die aus einer endlichen Zahl von Stäben zusammengesetzt sind (vgl. Abb. 2.1). Dabei sind die Stäbe nur an ihren Enden miteinander verbunden. Diese Verbindungsstellen nennt man Knoten. Nimmt man nun idealisierend an, daß 1. die Knoten reibungsfreie Gelenke sind, so daß keine Momente von einem Stab auf die anschließend Stäbe übertragen werden und 2. die äußeren Kräfte (Belastungen und Bedingungen) nur in den Knoten angreifen. dann ist das Tragwerkssystem ein Fachwerk. Liegen sämtliche Stäbe dabei in einer Ebene, die auch Lastebene ist, so ist das Tragwerk ein ebenes Fachwerk. Diese vorläufige Definition wird im weiteren für die Zwecke der rechnergestützten Optimierung noch formaler gefasst. Die Aufgabe, ein Fachwerk minimalen oder möglichst minimalen Gewichtes zu finden, läßt sich zunächst wie folgt formulieren: Finde für ein gegebenes Material und gegebene Belastungen ein Fachwerk, so daß keiner der Stäbe des Fachwerks unter einer der Belastungen versagt. Das Fachwerk soll ein möglichst kleines Kapitel 2. Fachwerk 11 Gewicht haben. Das Optimierungsziel möglichst kleines Gewicht ist dem Ziel einer möglichst hohen Tragfähigkeit eines Tragwerks gegensätzlich, weil sich das Tragwerksgewicht nicht beliebig reduzieren läßt, ohne an Tragfähigkeit zu verlieren. Betrachtet man z. B. den Extremfall eines Fachwerks ganz ohne Stäbe, so hat dieses sicherlich das kleinstmögliche Gewicht, aber überhaupt keine Tragfähigkeit. Dies bedeutet allerdings nicht, daß ein schweres Tragwerk grundsätzlich tragfähiger ist als ein leichtes. Das Material, aus dem die Stäbe eines Fachwerks aufgebaut sind, wird durch seine physikalischen, für die Optimierungsaufgabe bedeutsamen Eigenschaften beschrieben. Die im Rahmen der Gewichtsberechnung und Tragfähigkeitsuntersuchung relevanten Größen sind: Spezifische Dichte ρ. Der Quotient aus Masse m und Volumen V eines Körpers. • Ein Stab des Volumens V besitzt die Masse m = ρV . Bei einer im Konstruktionsraum R gültigen Massenbeschleunigung g ergibt sich daraus das Stabgewicht G = gm = gρV . Da hier g an jeder Stelle des Konstruktionsraums und für alle Belastungsfälle als gleich angenommen wird, ist G proportional zu m (G ∼ m). Unter dieser Voraussetzung ist minimales Gewicht gleichbedeutend mit minimaler Masse b.z.w. minimales Volumen und der Wert von g spielt für die Optimierung keine Rolle. 2.1.1 Elastizitätsmodul E Das Elastizitätsmodul E beschreibt den mechanischen Zusammenhang zwischen Dehnung und Spannung σ eines Fachwerksstabes. Wir betrachten einen einzelnen Stab mit der Querschnittsfläche a und wollen Fakten auflisten, wie sich dieser Stab unter Belastung verhält. Wie allgemein üblich setzen wir für das Material, aus dem der Stab besteht, voraus, daß es homogen und isotrop ist, d.h. die Materialeigenschaften sind in jedem Punkt gleich (homogen), und die elastischen Eigenschaften sind in jedem Punkt unabhängig von der Richtung einer angelegten Kraft (isotrop). Wirkt auf den Stab eine äußere Kraft, die nach Voraussetzung nur an den Enden angreift, dann entsteht (actio = reactio) eine (gedachte) innere Kraft f , die durch die Verformung des Stabes hervorgerufen wird. Die Beanspruchung des Materials drückt sich dann durch den Quotienten von der Kraft f und Stabquerschnitt a aus, σ= f a der angibt, wieviel Kraft pro Flächeneinheit wirkt. Dieser Quotient wird Spannung genannt und besitzt üblicherweise die Einheit N/mm2 . Die Richtung der Kraft drückt sich dabei in der Spannung aus: Positive Spannungen sind als Zug, negative als Druck zu interpretieren. Viel interessanter als die Materialbeanspruchung selbst ist der Zusammenhang zwischen der Spannung σ und der Verformung des Stabes. Da sich eine solche Verformung lediglich in Längsachse des Stabes äußert (Kräfte wirken nach Voraussetzung lediglich in Längsrichtung!), kann sie einfach als Längenänderung ∆l der ursprünglichen Länge l des Stabes gemessen werden. Man arbeitet mit dem Begriff der Dehnung 12 Kapitel 2. Fachwerk welche die relative Längenänderung des Stabes beschreibt, = ∆l l Die Dehnung ist ein dimensionsloser Faktor. Der Zusammenhang zwischen Dehnung und Spannung wurde von dem englischen Physiker Robert Hooke (1635-1703) untersucht, der für nicht zu große Spannungen einen linearen Zusammenhang feststellte. Das bekannte und nach ihm benannte Hookesche Gesetz lautet σ = E für σp− ≤ σ ≤ σp+ (2.1) dabei bezeichnen σp± Grenzen für die maximale Zug-bzw. Druckspannung, für die das lineare Verhalten gilt(s.u.). Die Konstante E ist dabei materialabhängig und hat wie die Spannung die Einheit N/mm2 . Sie ist nur experimentell zu ermitteln, und wird Elastizitätsmodul oder Youngscher Modulus genannt. Für Stahl ergibt sich beispielsweise N EStahl = 21000 mm 2 Typische Elastizität Zahlenwerte Hinweise zur Einheitenumrechnung: N • 1 mm 2 = 1M P a (Ein Newton pro Quadratmillimeter ist ein Mega-Pascal) kN • 1 mm 2 = 1GP a (Ein Kilo-Newton pro Quadratmillimeter ist ein Giga-Pascal) Material E-modul in kN/mm2 Metallische Werkstoffe bei 20◦ C Ferritischer Stahl 210 Austenitischer Stahl 195 Sphäroguss 170. . . 185 Grauguss 80. . . 185 Messing 78. . . 123 Kupfer 100. . . 130 Titan 105 Aluminium 70 Magnesium 42 Blei 16 Invar 130. . . 150 Nickel 200 Wolfram 411 Material E-Modul in kN/mm2 Werkstoffe (nicht isotrop) bei 20◦ C CFK parallel zur Faser 150 Glas 50. . . 90 Glasfaser 55. . . 87 Beton 22. . . 45 Knochen 18. . . 21 Holz parallel zur Faser 7. . . 20 CFK quer zur Faser 13 Epoxyd ≈ 25 Polyamid 2. . . 4 Polyester 1. . . 5 Polypropylen 1. . . 2 Holz quer zu Faser 0,23. . . 1,33 Silikonkautschuk 0,01. . . 0,1 Tabelle 2.1: Materialeigenschaft Der im Hookeschen Gesetz beschriebene lineare Zusammenhang gilt nur für Spannung, die betragsmäßig klein genug sind. Dabei können die Grenzen σp− und σp+ für Druck- und Zugspannungen verschieden sein. Diese Grenzen heißen Proportionalitätsgrenzen. Im folgenden betrachten wir zunächst den Fall der Formveränderung unter Zug. Kapitel 2. Fachwerk 13 Für die Praxis ist interessant, bis zu welcher angelegten Spannung ein Stab wieder seine Ausgangslänge annimmt, wenn man die angelegte Kraft entfernt. (Man stelle sich die fatale Situation vor, daß ein einmal belastetes Teil einer Maschine bleibend verformt wird.) Dieser Bereich der Spannungen wird elastischer Bereich genannt. Experimentell ermittelt man die maximale Spannung σE im elastischen Bereich, die Elastizitätsgrenze oder Fließgrenze genannt wird, und für die stets σE ≥ σP gilt. Schließlich kann man die Spannung weiter Erhöhen, so daß man die sog. Streckgrenze σS erreicht. In ihr ist die angelegte äußere Kraft so groß, daß die inneren Bindekräfte zwischen den einzelnen Molekülen nicht mehr in der Lage sind mit einer haltbaren Verformung zu reagieren. Das Material beginnt zu fließen; bei weiterer Erhöhung der Dehnung geschehen unterschiedliche materialabhängige Phänomene, die nicht mehr linear beschrieben werden können. Der Stab ist zudem dauerhaft verformt, wenn man die angelegte Kraft entfernt. Dieser Bereich wird daher plastischer Bereich genannt. Der theoretische Zusammenhang zwischen σ und eines sog. idealisierten elasto-plastischen Materials ist in Figur. 2.2 , einem sog. Spannungs-Dehnungs-Diagramm dargestellt. Außer den oben schon genannten Größen ist Abbildung 2.2: Spannungs-Dehnungs-Diagramm für idealisiertes Material σzu eingezeichnet, die zulässige Spannung, die die Ingenieure für eine sog. ruhende Belastung mit der Faustregel σzu = 0.6σS berechnen. Sie gibt an, mit welcher Spannung ein Stab in einem Fachwerk aus Sicherheitsgründen maximal belastet werden darf. Das Diagramm ist dahingehend idealisiert, als daß eine Dehnungsvergrößerung über den kritischen Punkt hinaus keine Änderung der Spannung mehr zur Folge hat. 14 Kapitel 2. Fachwerk Abbildung 2.3: Spannungs-Dehunngs-Diagramm für weichen Stahl In der Realität sieht ein Spannungs-Dehnungs-Diagramm, etwa für weichen Stahl, aus, wie Abb. 2.3 zeigt. Die Spannung steigt an bis zur Zugfestigkeit σz , sinkt jedoch bei weiterer Längenänderung völlig zusammen; das Material bricht bei einer Bruchdehnung B . Wir werden uns später nur für den elastischen Bereich interessieren, so daß nichtlineares Verhalten keine Rolle spielt. Dies ist natürlich eine ganz entscheidende Vereinfachung und eine Schwäche des betrachteten Modells. Beschäftigen wir uns noch kurz mit dem Verhalten unter Druck. Bis zur Proportionalitätsgrenze σP− gelten analoge Aussagen wie oben, jedoch kann es passieren, daß bereits bei einer Spannung, die betragsmäßig kleiner als die Proportionalitätsgrenze ist, ein Knicken des Stabes auftritt. Man spricht von der elastischen Knickung. Sie hängt nicht nur von der Spannung, sondern u.a. auch von der Länge des Stabes ab. Bereits Euler (1707-1783) entwickelte eine Formel, mit deren Hilfe man für diesen Fall die maximale Druckkraft errechnen kann, die man auf einen Stab entlang seiner Längsachse ausüben darf. Da wir später im Optimierungsmodell keine Anti-Knick-Nebenbedingungen berücksichtigen, wird nicht näher auf dieses schwierige und für die Praxis nicht unwichtige Problem eingegangen. Schon für einen Stab erhält man Nichtdifferenzierbarkeiten in den interessierenden Funktionen. Modelliert man mehrere Stäbe als System in einem Fachwerk und will Anti-Knick-Nebenbedingungen berücksichtigen, dann sind genauere Modelle meist nicht mehr zu beherrschen (Unstetigkeiten, Nichtdifferenzierbarkeiten, ganzzahlige Restriktionen). Maximale Spannung σmax . die Grenze für die Belastbarkeit eines aus dem Material gefertigten Stabes. • Für jedes Material gibt es bezogen auf eine bestimmte Querschnittsfläche eine maximale Kraft, die versagensfrei übertragen werden kann. Der Quotient aus dieser maximalen Kraft und der Querschnittsfläche ist die materialabhängige Konstante σmax . Kapitel 2. Fachwerk 15 Formal wird ein Material hier wie folgt definiert: Definition 1. 4-Tupel M := (ρ, E, σmax , σmin ) mit ρ Spezifische Dichte E Elastizitätsmodul σmax Maximale Spannung ohne Versagen σmin minimale Spannung heißt Material. Das Material des gesuchten Fachwerks ist in dieser Arbeit für das Optimierungsproblem vorgegeben. Die variablen Größen einer Fachwerksbeschreibung lassen sich den folgenden Gruppen zuordnen: Topologie: Die Topologie beschreibt die Knotenmenge K des Fachwerks sowie Stäbe S als Verbindungen der Knoten. Das Tupel (K, S) ist somit ein ungerichteter Graph mit Knotenmenge K und Kantenmenge S ⊆ {{k, k 0 } |k, k 0 ∈ K, k 6= k 0 }. In dem Fachwerk in Abb. 2.1 sind die Knoten mit arabischen und die Stäbe mit römischen Ziffern beschriftet. Es ist K = {1, ..., 9} und S = {sI , ..., sXII } mit sI = {1, 2} sII = {2, 3} sIII = {3, 6} sIV = {2, 5} sV = {1, 4} sV I = {5, 6} sV II = {4, 5} sV III = {6, 9} sIX = {5, 8} sX = {4, 7} sXI = {8, 9} sXII = {7, 8} Es wird von einem konvexen Konstruktionsraum R ausgegangen, so daß sich auch die Stäbe in ihrer gesamten Länge innerhalb von R befinden. Legt man den Ursprung des x-y- Koordinatensystems von Abb. 2.1 in den Knoten 1, so ergibt sich mit den Variablen a für die Positionen der Knoten 16 Kapitel 2. Fachwerk P (1) = (0, 0) P (2) = (0, a) P (3) = (0, 2a) P (4) = (a, 0) P (5) = (a, a) P (6) = (a, 2a) P (7) = (2a, 0) P (8) = (2a, a) P (9) = (2a, 2a) Bemessung: Durch eine Bemessungsfunktion werden den Stäben s ∈ S Attribute zugewiesen, die benötigt werden, um Aussagen über das Versagen eines Stabes machen zu können. Für die hier betrachtete Versagensform genügt die Angabe der Stabquerschnittsfläche A(s), aus der zusammen mit einer sich aus der Belastung ergebenden Stabkraft die Stabspannung berechnet wird. Wenn der Betrag dieser Spannung die zulässige Maximalspannung σmax überschreitet, versagt der Stab. Zusammenfassend läßt sich ein Fachwerk im Sinne des Gewichtsoptimierungsproblems wie folgt formal definieren: Definition 2. Ein 5- Tupel F := (M, K, S, P, A) mit M = (ρ, E, σmax ) Material K = {k1 , ..., kn } S⊆ {{k, k 0 } ⊆ K|k 6= endliche Knotenmenge k0 } Stabmenge P :K→R Knotenpositionen A : S → R+ Stabquerschnittsflächen und der zusätzlichen Eigenschaft (Eindeutigkeit der Knotenpositionen) P (k) = P (k 0 ) ⇒ k = k 0 für alle k, k 0 ∈ K (2.2) heißt (hier) Fachwerk im Konstruktionsraum R. Für ein festes x-y-Koordinatensystem eines Konstruktionsraums R ⊆ R2 bezeichne xk die x− und yk die y- Koordinate eines Knotens k ∈ K , also P (k) = (xk , yk ). Aus der Geometrie eines Fachwerks ergibt sich die Definition für die Länge l eines Stabes. Definition 3. Länge Kapitel 2. Fachwerk 17 Die Länge l : S → R+ eines Stabes s = {k, k 0 } ∈ S in einem unbelasteten Fachwerk F ist der euklidische Abstand seiner Endknoten k, k 0 im Konstruktionsraum R ⊆ R2 : l(s) := q (xk − xk0 )2 + (yk − yk0 )2 (2.3) Hier sind die Längen aller Stäbe von sI bis sXII des Fachwerks aus Abb. 2.1 gleich a. Die Stablänge wird sowohl bei der Berechnung der Stabreaktionskraft aufgrund einer Belastung als auch bei der Berechnung des Fachwerksgewichts benötigt. f u a) b) Abbildung 2.4: Belastung eines Knotens,gegeben (a) durch angreifende Kraft f oder (b) durch vorgegebene Verschiebung U Definition 4. Volumen Das Volumen V : S → R+ 0 eines Stabes s ∈ S in einem Fachwerk F ist. V (s) := A(s)l(s) (2.4) Definition 5. gesamte Volumen Das gesamte Volumen V : S → R+ 0 eines Fachwerks F ist die Summe der Gewichte seiner Stäbe V (F ) := X A(s)l(s) (2.5) s∈S Damit ist die Zielfunktion V des Optimierungsproblems formal definiert. Nimmt man an, daß F die Menge aller Fachwerke F ist, die alle Restriktionen - insbesondere hinsichtlich der Tragfähigkeit erfüllen, so ist ein Fachwerk F ∗ ∈ F gesucht mit V (F ∗ ) ≤ V (F ) für alle F ∈ F (2.6) 18 Kapitel 2. Fachwerk Eine Belastung eines Fachwerks ist durch die Belastung seiner Knoten definiert. Eine Belastung eines Knotenpunkts kann entweder durch eine im Knoten angreifende Kraft f oder durch eine Verschiebung u des Knotens innerhalb des Konstruktionsraums gegeben sein (vgl. Abb.2.4). Für eine Kraft kann eine äquivalente Belastung durch eine Verschiebung und umgekehrt für eine Verschiebung eine äquivalente Belastung durch eine Kraft berechnet werden. Bei Vorgabe einer Kraft f am Knoten k kann die äquivalente Verschiebung durch Anwendung der Vorschrift: Verschiebe k gerade soweit in Richtung von f , bis die vom Fachwerk erzeugte Gegenkraft gleich −f ist. Abbildung 2.5: Beispiel für Festlager und Freilager bzgl. x und y Richtung ermittelt werden. Umgekehrt kann bei Vorgabe einer Verschiebung u am Knoten k die äquivalente Kraft mittels der Vorschrift: Wende gerade soviel Kraft auf, daß der Knoten um die vorgegebene Verschiebung u nachgibt. bestimmt werden. Der mechanische Zusammenhang zwischen f und u ist von den elastischen Eigenschaften des gesamten Fachwerks abhängig. Beispiele für Knoten, für die eine Verschiebung vorgegeben ist, sind die Lagerknoten eines Fachwerks. Lagerknoten sind Knoten k ∈ K, an denen ein Fachwerk im Konstruktionsraum festgemacht ist und deren Verschiebung bezüglich einer oder mehrerer Richtungen ausgeschlossen wird (u = 0). Ist eine Verschiebung eines Lagers gänzlich ausgeschlossen, so spricht man von einem Festlager; kann ein Lagerknoten in einem ebenen Konstruktionsraum nur bezüglich einer Richtung verschoben werden, während er bezüglich der anderen Richtung verschieblich ist, spricht man von einem Freilager. Kapitel 2. Fachwerk 19 Abb. 2.5 zeigt für ein Fachwerk in einem ebenen Konstruktionsraum ein Festlager sowie je ein Freilager bezüglich x und y Richtung. Dabei bedeutet Freilager bezüglich x-Richtung, daß sich der Knoten bezüglich der x-Richtung wie ein Lager verhält und bezüglich der y-Richtung frei verschoben werden kann. Analog ist Freilager bezüglich y-Richtung zu verstehen. Das Symbol für Freilager unterscheidet sich vom Symbol für Festlager durch zwei Rollen, die andeuten sollen, daß das Freilager entlang der Kante der schraffierten Fläche verschoben werden kann. Schräge Freilager, bei denen die Verschieberichtung nicht parallel zu einer der Achsen des Koordinatensystems ist, werden hier nicht betrachtet. 2.1.2 Exakte Grundstrukturen und Fachwerke Wir wollen nun den Begriff des Fachwerks etwas mathematischer fassen, da dieses Voraussetzung für exakte Aussagen und Begriffsbildungen ist. Wir unterscheiden zunächst den Begriff des Fachwerks und den der Grundstruktur (eines Fachwerks). Unter einer Grundstruktur wollen wir dabei im wesentlichen die Geometrie eines Fachwerks verstehen, ohne auf Dicken von Stäben einzugehen. Ein Fachwerk hingegen soll zusätzlich Information über Materialeigenschaften und -verteilung enthalten. Man spricht von potentiellen Stäben, denen nach Lösung einer Optimierungsaufgabe ein gewisses Volumen gegeben wird. Dieses kann jedoch auch Null sein, so daß der betreffende Stab nicht im resultierenden Fachwerk vorkommt. Auch lassen sich Eigenschaften von Fachwerken allein aus der Position der Knoten und der potentiellen Stäbe ableiten, ohne daß die Volumina der Stäbe bekannt sein müssen. Dies motiviert ebenfalls die Unterscheidung. Die Grundstruktur eines Fachwerks kann beschrieben werden, indem man seine Knotenpositionen, die Stabverbindungen zwischen den Knoten und die Auflagerbedingungen angibt. Wir betrachten nur ebene Fachwerke. Die Dimension des Raumes wird stets mit d=2 bezeichnet. Ausgehend von einem kartesischen Koordinatensystem des Rd betrachten wir ein Fachwerk mit N ≥2 Knoten, indem wir die Knotenkoordinaten v1 , . . . , vN ∈ Rd in einer Menge ν zusammenfassen, ν = {v1 , . . . , vN } ⊂ Rd Zur Vereinfachung nehmen wir an, daß vorhandene Auflagerbedingungen stets Fixierung von Knoten in Koordinatenrichtungen des gewählten Koordinatensystems von Rd entsprechen. Diese Annahme vereinfacht die Berechnung sämtlicher zur Beschreibung des Problems notwendiger Matrizen wesentlich, und das Modell ist beträchtlich einfacher zu handhaben. Schwierigere Auflagerbedingungen können durch diffizilere Definitionen der Steifigkeitsmatrizen aufgefangen werden (Multiplikation mit Rotationsmatrizen etc.), und werden hier nicht betrachtet. Die Auflagerbedingungen können aufgrund dieser Annahme durch eine binäre Funktion 20 Kapitel 2. Fachwerk r : ν → {0, 1}d notiert werden: 0, falls keine Verschiebung von Knoten v in Koordinatenrichtung j erlaubt ist [r(v)]j := 1, falls Verschiebung von Knoten v für j = 1, . . . , d. (2.7) in Koordinatenrichtung j erlaubt ist Schließlich müssen noch die zugelassenen Stabverbindungen, d.h. die potentiellen Stäbe, definiert werden. Diese werden im folgenden auch Kanten genannt. Wir bezeichnen stets mit m>0 die Zahl der Kanten im Stabwerk. Jeder dieser potentiellen Stäbe ist eindeutig durch seine beiden Endknoten v, v 0 ∈ ν gegeben. In den meisten Fällen muß kein Anfangs- und Endknoten ausgezeichnet werden. Daher können wir jede Kante e als 2–elementige Teilmenge von ν interpretieren, e∈ v, v 0 |v, v 0 ∈ ν; v 6= v 0 An einer Stelle ist es später jedoch notwendig zwischen Anfangs- und Endknoten zu unterscheiden. Dann sehen wir eine Kante e als Zweitupel in ν × ν an. Welcher der beiden Knoten zum Anfangsoder Endknoten gemacht wird, ist dabei unerheblich. Die Menge aller Stäbe wird mit bezeichnet, = {e1 , . . . , em } Für eine feste Dimension d = 2 halten wir die mathematische Definition einer Grundstruktur fest: Definition 6. Eine Grundstruktur (eines Fachwerks) G ist ein Tripel G = (ν, , r), wobei ν ⊂ Rd eine endliche Menge von Knotenkoordinaten ist (|ν| > 2) , ⊂ v, v 0 |v, v 0 ∈ ν; v 6= v 0 eine nicht leere endliche Menge von (potentiellen, d. h. möglichen) Stabverbindungen zwischen den Knoten beschreibt, und r : ν → {0, 1}d gemäß (2.7) die Auflagerbedingungen angibt. Die Zahl der Knoten wird mit N , die Zahl der Stäbe mit m bezeichnet, N := |ν|, m := || Zeichnerische Dastellung 7. In der Literatur hat sich ein gewisser Standard ergeben, um ebene Fachwerke darzustellen. Die im folgenden erklärten Zeichen sind in der Tabelle 2.2 darstellt Die Knoten einer Grundstruktur oder eines Fachwerks stellen wir durch Punkte dar. Potentielle Stäbe zwischen zwei Knoten werden durch eine Linie angedeutet. Die Auflagerbedingungen werden, wie in den Ingenieurwissenschaften üblich, als Dreieck gezeichnet, auf dem der fixierte Knoten ruht. Um anzudeuten, daß dieser keine Freiheit in eine der beiden Koordinatenrichtungen besitzt, wird Kapitel 2. Fachwerk 21 Potentiell Stab(mit zwei Endknoten) In beiden Richtungen fixierter Knoten(keine Richtung frei) In vertikaler Richtung fixierter Knoten(horizontale Richtung ist frei) In horizontaler Richtung fixierter Knoten(vertikale Richtung ist frei) Knoten, an dem vertikal gerichtete Kraft angreift Tabelle 2.2: Zeichenerklärung für die Darstellung von Stabwerken das Dreieck auf seiner ruhenden Seite mit einem zusätzliche Strich versehen. Ist ein Knoten nur in einer Richtung fixiert, dann bekommt das Dreieck zwei kleine Kreise, die eine mögliche Bewegung (Rollen) in der freien Richtung andeuten siehe Tabelle. 2.2 Beispiel 1. In Abb. 2.6 ist eine erste (ebene) Grundstruktur gezeigt. Sie stellt das 2-dimensionale Seitenteil einer Brückenkonstruktion dar, das aus N = 12 Knoten und m = 29 potentiellen Stäben besteht. Der linke untere Knoten ist in beiden Richtungen fixiert, während der rechte Freiheit in horizontaler Richtung genießt. (Dies entspricht genau der Konstruktion einer Brücke in der Realität, da man ein Ende der Brücke horizontal beweglich lagert, um minimale Längenänderungen, die durch Belastung oder Außentemperatur entstehen, ausgleichen zu können). Bezeichnen wir den linken Abbildung 2.6: Grundstruktur einer Bogenbrücke(Seitenteil) unteren Knoten mit vl und den rechten mit vr dann ist r nach 2.7 also definiert durch ( [r(v)]j = 0, falls(v = vl ∨ (v = vr ∧ j = 2)) 1, sonst. Aus den Auflagerbedingungen ergibt sich recht einfach ein Maß für die Beweglichkeit eines Stabwerkes in den Knoten : Alle freien Knotenkoordinaten erlauben eine entsprechende Verschiebung des Stabwerkes. Die Anzahl dieser Koordinaten gibt also Aufschluß über die Möglichkeiten der Struktur, durch Verformung des Stabwerks eine angelegte äußere Kraft zu kompensieren und dadurch im Gleichgewicht zu bleiben. Diese Anzahl wird Freiheitsgrad genannt. 22 Kapitel 2. Fachwerk Definition 8. Sei G = (ν, , r) eine Grundstruktur. Dann bezeichnen wir mit n stets den „Freiheitsgrad von G“, der gegeben ist durch n := d X X [r(v)]j j=1 v∈ν Wie man sieht, ist diese Definition unabhängig von der Kantenmenge . Da wir im Raum der Verschiebungsvektoren rechnen werden, spielt n eine wichtige Rolle. Wegen N ·d= d X X 1 j=1 v∈ν gilt n=N ·d− d X X 1 j=1 v∈ν:[r(v)]j =0 d. h. n ist die Zahl aller prinzipiell möglichen Knoten- Verschiebungsrichtungen N · d abzüglich der fixierten Richtungen. In praktischen Anwendungen ist die Zahl der durch Auflagerbedingungen fixierten Richtungen weitaus kleiner als N · d, so daß meist n≈N ·d gilt. Beispiel 2. Für das obige Beispiel 1 sind 3 Knoten-Koordinatenrichtungen fixiert, also gilt n = N · d − 3 = 12 · 2 − 3 = 21. (2.8) 3 Fachwerksoptimierung: Sizing, Geometry, Topology Bei der Optimierung von Bauteilen und Konstruktionen, kurz Strukturen genannt, sind verschiedene Philosophien und Problemstellungen möglich, die zum Teil ineinander übergehen oder auch kombiniert werden können. Es haben sich drei Kategorien von Problemstellungen bzw. Sichtweisen eingebürgert, die mit Sizing , Geometry (Geometrieoptimierung) und Topology (Topologieoptimierung) betitelt sind. Anhand von Stabwerken sollen diese Begriffe im folgenden erläutert werden. Da sie Standard in der Strukturoptimierung sind, werden sie nicht übersetzt. Als illustratives Beispiel dient das Seitenteil einer Bogenbrücke, das im linken unteren Knoten fixiert und im rechten unteren Knoten aufliegt, dort jedoch horizontale Freiheit für Verschiebungen besitzt. In den unteren Knoten soll jeweils eine vertikal nach unten wirkende Kraft angreifen, die in allen diesen Knoten den gleichen Betrag hat. • Sizing-Problem (Dimensionierung) Man betrachtet eine Grundstruktur, deren Stäben Material zugewiesen werden soll, so daß ein Zielfunktional unter gegebenen Nebenbedingungen minimal wird. Dabei sollen (im Prinzip) genau die Stäbe benutzt werden, die in der Grundstruktur vorgegeben sind. Meist ist daher eine positive, kleine Untergrenze für die Stabvolumina gesetzt. Außerdem besteht die verwendete Grundstruktur aus wenig potentiellen Stäben, da sämtliche Stäbe in der berechneten Struktur vorkommen sollen. Abb. 3.1 zeigt eine Grundstruktur mit N = 12 Knoten und m = 21 Stäben. Abb. 3.2 zeigt das optimierte Fachewerk, in dem das Volumen jedes Stabs berechnet wurde. In der Zeichnung wird dies durch entsprechende Rechtecke angedeutet. Abbildung 3.1: Beispiel einer Grundstruktur für das Sizing-Problem • Geometry-Problem (Gestaltsbestimmung) Man geht aus von einer (Start-)Grundstruktur, die bereits alle Informationen über die Konfiguration der Stäbe (Zuordnung der Endknoten, d.h. Kenntnis der Verbindungen der Stäbe) und über die Auflagerbedingungen enthält. Es werden die optimalen Positionen der Knoten gesucht, so daß - nach einer Volumenbestimmung der einzelnen Stäbe - eine möglichst gute Struktur entsteht. Automatisch ändern sich die axialen Richtungen der Stäbe. Die Unterschei- 23 24 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology Abbildung 3.2: Als sizing-Problem optimierte Struktur dung zwischen der Variation der Knotenpositionen (Geometry) und der parallel durchgeführten Optimierung der Stabvolumina (Sizing) ist rein formal und wird mitunter (und von uns auch) fallen lassen. Der Grund ist, daß zur Unterscheidung, welche Knotenpositionen besser sind, parallel Sizing-Schritte zur Analyse des Systems unternommen werden müssen. Abb. 3.3 zeigt eine gegebene Grundstruktur mit N = 12 Knoten und m = 25 Stäben. Nach einem Optimierungsschritt erhält man eine in den Knotenpositionen veränderte Grundstruktur, die in Abb. 3.4 zu sehen ist. Die simultan berechnete Materialverteilung deutet Abb. 3.5 an. Bei dieser parallel durchgeführten Optimierung der Stabvolumina haben manche der Stäbe das Volumen Null erhalten. Sie sind deshalb im Geometrie-optimierten Fachwerk nicht vorhanden. Der Freiheitsgrad der Grundstruktur wie auch die Konfiguration der Stäbe und deren Anzahl wird bei der Geometrie-Optimierung also nicht verändert, wohl aber die Länge der Stäbe und die Positionen der Knoten. Dies schlägt sich in den Einträgen und ν von damit in einer Änderung der Geometriematrix C nieder (siehe Gl. 3.3) Abbildung 3.3: Start-Grundstruktur für das Geometry-Problem Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 25 Abbildung 3.4: Als Geometry-Problem optimierte Grundstruktur Abbildung 3.5: Als Geometry-Problem optimiertes Fachwerk • Topology-Problem(Elementanordnung) Unter der Topologie einer Struktur versteht man die Positionierung der einzelnen Teile einer Struktur in der Gesamtkonstruktion, d. h. deren Anordnung als System. Dies drückt sich genau in dem Begriff der Grundstruktur (siehe Abb. 3.2) aus. Man betrachtet eine Grundstruktur, die sehr viele Knoten und sehr viele potentielle Stäbe enthält. Die Gestalt der zu optimierenden Struktur sollte damit möglichst frei sein. Die Optimierung wählt aus allen potentiellen Stäben die beste Teilmenge aus, so daß eine optimale Materialverteilung auf dieser Unter-Grundstruktur ein möglichst gutes Fachwerk ergibt. Im Topology-Problem bleiben sowohl die Knotenpositionen als auch die Auflagerbedingungen und die Stabverbindungen (Stäbe) zwischen den fest vorgegebenen Knoten ausgewählt, denen dann Material zugewiesen wird. Die Begriffe können bei der Fachwerksoptimierung nicht klar voneinander abgegrenzt werden. Der Unterschied zwischen dem Sizing- und Topology-Problem liegt in der Philosophie: Während beim Sizing-Problem wenige Stäbe in der Grundstruktur sind, deren optimale Volumina positiv sind, werden im Topology-Problem äußerst viele potentielle Stäbe betrachtet, von denen die meisten das Volumen Null bekommen, d.h. nicht in der optimalen Struktur enthalten sind. Das GeometryProblem enthält ebenfalls einen Topology-Aspekt: Durch die Optimierung der Knotenpositionen werden eventuell manche Stäbe unnötig, und sind in der Berechneten Struktur nicht mehr vorhanden (s. Abb. 3.4 im Gegensatz zu Abb. 3.5). Folgende Tabelle gibt einen zusammenfassenden Überblick: 26 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology Wünschenswert ist eine simultane Bearbeitung aller drei Optimierungskategorien: Ausgehend von gegebene Grundstruktur Knotenpositionen potentielle Stäbe S G T fest variabel fest wenige wenige viele optimiertes Fachwerk (Resultat) Knotenpositionen Stabvolumina tatsächliche Verbindung gegeben gesucht bekannt gesucht gegeben bekannt gegeben gesucht gesucht Tabelle 3.1: Zusammenfassenden Überblick (S Steht für sizing, G für Geometry und T für Topology einer genügend dichten Grundstruktur wird sowohl die optimale Position der Knoten als auch die Menge der notwendigen Stäbe inklusive ihrer optimalen Stabdicken errechnet. Dieses Ziel wurde aufgrund der komplexen Struktur bisher nur für sehr einfache, eher akademische Beispiele betrachtet. Ist jedoch das zugrundegelegte Modell genügend einfach, dann kann man numerisch funktionierende Methoden anbieten. Das Hauptaugenmerk der Strukturoptimierung wurde bisher auf das Sizing-Problem gerichtet. Der Grund dafür ist die beherrschbare Zahl von Variablen und die erhebliche Verringerung der Mathematischen Schwierigkeiten. Die Geometrieoptimierung allgemeiner sog. Optimal-Schape-Probleme ist heute mit Finite-ElementMethoden und entsprechender mit Grafik versehener Software Standard in der Strukturoptimierung. Es werden dabei die Eck-Punkte verschoben, die die Geometrie der jeweiligen Elemente definieren (für Fachwerke: Element = Stab). Für große Strukturen mit vielen Knoten werden diese Probleme jedoch numerisch schwer lösbar, da sie hochgradig nicht linear im Fachwerk mit Geometriematrix sind. Die wohl interessanteste Fragestellung ist die des Topology-Problems, die abgesehen von der verschiedenen Philosophie für dünne Strukturen formal das Sizing- und eine diskretisierte Form des Geometry-Problems enthält: Ist man sich über die Lage der Knoten in einer Grundstruktur im unklaren, dann kann man durch Wahl einer sehr großen Zahl von Knoten in der Grundstruktur (beispielsweise durch Diskretisierung mit einem Gitter über den Abmessungen, in dem sich die Knoten befinden sollen) eine diskretisierte Version des Geometry-Problems erhalten. Der Nachteil ist, daß man die Anzahl der potentiellen Stäbe ebenfalls entsprechend radikal erhöhen muß. Für die oben gezeigte Brücke könnte man zum Beispiel ein Gitter von N = 7 · 7 = 49 Punkten wählen, das lediglich die Breite und die Höhe der Brücke festlegt. Wählt man nun jede mögliche Verbindung zweier Punkte in diesem Gitter (und streicht sich überlappende Stäbe), dann ergibt sich eine Grundstruktur mit m = 748 potentiellen Stäben, die in Abb. 3.6 angedeutet ist. Die bogenartige Gestalt der Brücke ist dabei in keiner Weise vorbestimmt, sondern die Optimierung allein wird die optimale Geometrie innerhalb des vorgegebenen Rasters bestimmen. Rozvany[4] nennt eine Grundstruktur in diesem Zusammenhang Strukturell Universe, um anzudeuten, daß alle zur Optimierung zugelassenen möglichen Strukturen in dieser Diskretisierung der Realität enthalten sind. Das Er- Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 27 gebnis der Optimierung ist in Abb.3.7 dargestellt. Die Bogenform ist deutlich sichtbar, wennauch dünne Balken entstanden sind, die von den festen Knotenpositionen des zugrundegelegten Gitters herrühren. Man bemerke auch den kombinatorischen 0 − 1− Charakter des Topology-Problems: Es Abbildung 3.6: Grundstruktur Abbildung 3.7: Als Topology-Problem optimierte Struktur vgl.Abs 5.1.1 7 × 7 Knoten wird eine optimale Menge von Stäben aus endlich vielen ausgewählt, um die optimale Unterstruktur zu bilden. Kirsch[5] bemerkt, daß schon eine kurze (Vor-)Optimierung der Gestalt einer Struktur, d.h. Geometry und/oder Topology, ein Design wesentlich verbessern kann. Klarerweise kann man kein gutes Fachwerk nach Berechnung der optimalen Stabvolumina(Sizing) erwarten, wenn die gewählte Geometrie und Konfiguration der Grundstruktur von vorneherein schlecht war. Wir werden uns hauptsächlich mit dem Topology-Problem beschäftigen. Da für jeden potentiellen Stab eine Designvariable benötigt wird, hat dieses Problem i.A. eine extrem große Dimension, die die Anwendung gewöhnlicher Software verhindert. Daher sind neue mathematische Zugänge und Methoden erforderlich. Im Rahmen dieser Arbeit beschränken wir uns auf anerkannte Zugänge und Methoden. 28 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 3.1 Topologieoptimierung beim Fachwerk als Volumensminimierung 3.1.1 Elastizitätstheorie für ebene Stabwerke Wir wollen nun mehrere Stäbe in einem Fachwerk betrachten. Diese Stäbe beeinflussen sich gegenseitig, was aber leicht durch das Superpositionsprinzip der Physik beherrscht werden kann: Alle Auslenkungen in den Knoten werden addiert; es ergibt sich die Auslenkung eines Knotens im System. Jedoch müssen sowohl die Auslenkungen der Endknoten in der Geometrie des Fachwerks ausgedrückt werden, als auch die elastischen Eigenschaften, die diese Auslenkungen mit äußeren Kräften in Verbindung bringen. Dies wird mit Hilfe gewisser Matrizen bewerkstelligt, die Steifigkeitsmatrizen genannt werden. Dieser auch aus der Mathematik für finite Elemente bekannte Begriff wird nun für Stabwerke erklärt. Um anschaulich zu bleiben, betrachten wir in diesem Unterabschnitt nur ebene Fachwerke. Wir Abbildung 3.8: Platzierung eines Stabes in der Ebene haben hier eine möglichst einfache Darstellung gewählt, die allein auf Fachwerke bezogen ist, und die unser später verwendeten Terminologie genügen soll. Wir betrachten zunächst den Endknoten eines Stabes. Der Stab stehe an seinen Enden unter Belastung und erfahre dabei eine Längenveränderung. Man stelle sich den Stab dabei nicht isoliert, sondern als herausgelöstes Teilsystem eines ganzen Stabwerks vor. Dies ist nach dem Überlagerungsprinzip der Physik erlaubt. Wir gehen von den Positionen v (1) , v (2) ∈ R2 der Endknoten in der Ebene aus, wobei der Stab noch in Ruhe sei. Er schließe dabei mit der horizontalen Koordinatenachse den Winkel φ ∈ [0, 2π] ein. Unter Belastung werde der Knoten v (1) dann um die Länge ∆l(1) nach w(1) und v (2) um ∆l(2) entlang des Stabes nach w(2) verschoben. Die neuen Positionen w(1) , w(2) der Knoten sind dann nach einfachen Mittel der Vektorrechnung gegeben durch v (1) − v (2) w(1) = v (1) + x(1) = v (1) + ∆l(1) · v (1) − v (2) 2 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 29 v (2) − v (1) w(2) = v (2) + x(2) = v (2) + ∆l(2) · v (2) − v (1) 2 Damit ergibt sich die Formel: w(1) = v (1) + ∆l(1) w(2) = v (2) + ∆l(2) 1 v (1) − v (2) l 1 v (2) − v (1) l Dabei bezeichnet l = v (2) − v (1) 2 die Länge des Stabes. Abb. 3.8 zeigt die Situation. Für die Verschiebungsvektoren x(1) := w(1) − v (1) x(2) := w(2) − v (2) und der Knoten gilt also (2) v − v (1) cos φ ∆l(1) 2 = (2) l v − v (1) sin φ 1 x(1) = ∆l(1) v (1) − v (2) = − l − cos φ − sin φ 2 (2) (1) cos φ 1 v − v ∆l(2) 2 x(2) = ∆l(2) v (2) − v (1) = = (2) l l v − v (1) sin φ 2 ! cos φ sin φ ∆l(1) ! ∆l(2) Ist umgekehrt x(1) z= ! ∈ R2+2 x(2) ein Verschiebungsvektor, der die Verschiebungen x(1) und x(2) in den Knoten v (1) und v (2) angibt, dann können wir daraus die Längenänderung ∆l des Stabes berechnen: ∆l = ∆l(1) + ∆l(2) − cos φ = − sin φ | = ∆l = γ̂ T z wobei − cos φ − sin φ !T !T x(1) + − cos φ ! ∆l(1) − sin φ {z } =1 cos φ sin φ !T cos φ + !T sin φ | cos φ ! ∆l(2) sin φ {z =1 } x(2) (3.1) 30 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology − cos φ − sin φ γ̂ := cos φ sin φ ∈ R4 . (3.2) Definition 9. Sei G = (ν, , r) eine Grundstruktur mit dem Freiheitsgrad n und = {e1 , . . . , e m }. (1) (2) Jede Kante ei ∈ wird als Zweitupel von Anfangs- und Endknoten aufgefasst, ei = vi , vi ∈ (2) (1) ν (2) , und li := vi − vi sei die Länge dieser Kante. 2 Wir ordnen jeder Komponente in Rn genau eine freie Knoten-Verschiebungskoordinate n (v, j) ∈ νD := (v 0 , j 0 ) ∈ ν × {1, ..., d} | r(v 0 ) j0 o =1 zu und bezeichnen diese mit |vj|. Dann heißt für i = 1, ..., m der Vektor γi ∈ Rn , definiert durch [γi ]|vj| := (2) (1) (1) 1 li ([vi ]j − [vi ]j ), falls v = vi (1) (2) (2) 1 li ([vi ]j − [vi ]j ), falls v = vi sonst 0, für(v, j) ∈ νD „(reduzierter) Geometrievektor des (potentiellen) Stabes i “ Bemerkung 10. (1) • Ist v = vi , dann enthält die Komponente [vj ] von γi gerade den Kosinus des Winkels, den der (potentielle) Stab mit der j-ten Koordinatenachse des kartesischen Koordinatensystems in Rd einschließt.[γi ]|v(2) j| enthält den dazu negativen Wert. i • Ist d = 2 und [γi ]|v(1) 1| = cos φ, dann gilt [γi ]|v(1) 2| = sin φ. Insgesamt ergeben sich also die i i Vektoren aus Gl. 3.2 und Gl. 3.12 • In der Praxis wird man zur Berechnung von γi alle N · d Knoten-Verschiebungskoordinaten (1) durchnummerieren, γ̃i ∈ RN ·d mit 0RN ·d vorbesetzen, und nur für vi (2) und vi die betreffenden Komponenten berechnen, [γ̃i ] [γ̃i ] (2) vi j (1) vi j := h 1 li ( (2) vi i h j := − [γ̃i ]|v(1) j| i (1) − vi i j ), für j = 1, ..., d. Anschließend werden die Komponenten|vj | mit [r(v)]j = 0 gestrichen, und es entsteht der Vektor γi . Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology (1) • Die Vertauschung der Rollen von vi (2) und vi 31 als Anfangs- und Endknoten des (potentiellen) Stabes bewirkt eine Vorzeichenänderung von γi , die sich jedoch nicht in dyadischen Produkten (siehe Steifigkeitsmatrizen) äußert, aber dann, wenn von (inneren) Zug- und Druckkräften die Rede ist. Für Stäbe, deren Endknoten keinen Auflagerbedingungen genügen, ist diese Unterscheidung jedoch eine Frage der Philosophie. • Eine andere Nummerierung der freien Knotenkoordinaten führt lediglich zu einer Permutation der Komponenten in γi . Wir werden darauf deshalb nicht mehr eingehen und stets von “den” Geometrievektoren sprechen, da die Nummerierung im folgenden festgehalten werden soll. Beispiel 3. Wir betrachten ein Beispiel mit m = 3 Stäben, das in Abb.3.9 gezeigt ist. Es besitzt 3 in beide Richtungen fixierte Knoten v1 = (0, 0)T , v2 = (0, 1)T und v3 = (0, 3)T und einen freien Knoten v4 = (2, 1)T . Die Stäbe e1 = (v1 , v4 ), e2 = (v2 , v4 ) und e3 = (v3 , v4 ) schließen demnach mit der ersten Koordinatenachse des räumlichen Systems Winkel von φ ≈ 0.4636(≈ 26.56◦ ), φ2 = 0 und √ √ φ = 23 π(= 270◦ ) ein. Für die Längen der Stäbe gilt l1 = 5, l2 = 2 und l3 = 2 2. Da nur der Knoten v4 frei ist, ist n = 2 und wir erhalten mit der Nummerierung Abbildung 3.9: Stabwerk bestehend aus 3 Stäben 32 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology R2 3 (x1 , x2 )T = (x|v4 1| , x|v4 2| )T γ1 = γ2 = γ3 = 1 l1 ([v1 ]1 1 l1 ([v1 ]2 − [v4 ]1 ) 1 l2 ([v2 ]1 1 l2 ([v2 ]2 1 l3 ([v3 ]1 1 l3 ([v3 ]2 − [v4 ]1 ) = − [v4 ]2 ) − [v4 ]2 ) ! ! − √25 − √15 − 22 = − [v4 ]2 ) − [v4 ]1 ) ! = 0 2 2 − 2√ 2 2 √ 2 2 = ! = = − cos φ1 ! , − sin φ1 − cos φ2 ! , − sin φ2 − cos φ3 ! − sin φ3 , Sofort aus der Definition der Geometievektoren folgt Korollar 11. Jeder Geometrievektor γi , i = 1, . . . , m, besitzt höchstens 2·d Komponenten, die ungleich Null sind. Um leicht Gleichgewicht innerer und äußerer Kräfte notieren zu können, fassen wir die Geometrievektoren in einer Matrix zusammen, die wir stets mit C bezeichnen. Definition 12. Sei G = (ν, , r) eine Grundstruktur und γ1 , . . . , γm seien sie Geometrievektoren. Dann heißt C := (γ1 · · · γm ) ∈ Rn×m (3.3) „(reduzierte) Geometrie der Grundstruktur G“ oder kurz Geometriematrix. Beispiel 4. Als einfaches Beispiel betrachten wir den sog. Rahmen, der aus N = 4 Knoten und m = 3 Stäben besteht (siehe Abb. 3.10). Die beiden unteren Knoten sind fixiert. Schon aus der Geometrie wird klar, daß diese Grundstruktur kein Gleichgewicht mit einer äußeren Kraft eingehen kann, die in einem der beiden oberen Knoten horizontal angreift. Für die Geometriematrix C siehe Abb. 3.10 gilt 0 1 −1 0 C= 0 −1 0 0 0 0 0 −1 Fügt man der Grundstruktur hingegen einen weiteren diagonalen Stab hinzu (siehe Abb. 3.11), dann erhält man die Geometriematrix C 0 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 33 Abbildung 3.10: ohne diagonal Stab im Rahmen Abbildung 3.11: mit diagonalem Stab im Rahmen 0 1 0 −1 C0 = 0 0 0 −1 0 0 0 −1 0 0 √ 1 2 √2 1 2 2 3.1.2 Optimierungsmodell V (a) = lT a → min a,w unter: Cw = f σmin a ≤ w ≤ σmax a (3.4) 34 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology m∈N Anzahl Stäbe (finiter Elemente) n∈N Anzahl Freiheitsgrade (Knotenzahl ∗ Raumdimension) V (a) ∈ R Volumen als Zielfunktion m3 l ∈ Rn Stablängen [m] a = (a1 , a2 , ..., an )T ∈ n R+ C ∈ Rm×n w∈ Rn f∈ Rm σmin ∈ Stabquerschnitte, Designvariablen m2 Geometriematrix / Gleichgewichtsmatrix siehe Gl. 3.3 Reaktionskräfte / Belastungen der einzelnen Stäbe [N ] vordefinierte Last [N ] R− σmax ∈ R+ physikalische Oberschranke(z. B. Fließgrenze) h N h mi2 N m2 physikalische Unterschranke (z. B. Fließgrenze) i σmin und σmax könnten auch Diagonal–Matrizen sein, um jedem einzelnen Stab unterschiedliche Grenzen zuzuordnen. Als physikalische Grenzen macht dies natürlich nur bei verschiedenen Materialien Sinn. Dies müsste dann auch analog in der Zielfunktion berücksichtigt werden. Dieser Ansatz (3.4) ist ein lineares Programm: lT a → min a,w+ ,w− ,s1 ,s2 0 unter: σmin I −σmax I C −C 0 −I I 0 a f w+ 0 0 0 w = I0 − 0 0 I s1 s2 0 mita, w+ , w− , s1 s2 ≥ 0 Im folgende bezeichnen wir mit f ∈ Rn stets eine äußere Kraft (hier vordefinierte Last,deren Bezeichnung sich leicht erklären läßt: f wird „von außen“an den Knoten angelegt, und ebenfalls wie die Knotenverschiebungen - im (reduzierten) globalen Koordinatensystem beschreiben. Im Unterschied dazu bezeichnet w ∈ Rm stets eine innere Kraft, d. h. die in jedem einzelnen Stab wirkende Stabkraft. Sie ist nach außen hin lediglich über Längenänderung des Stabes meßbar, vorausgesetzt die Spannung bleibt im linear-elastischen Bereich. Definition 13. Sei G = (ν, , r) eine Grundstruktur mit der zugehörigen (reduzierten) Geometriematrix C, f ∈ Rn eine äußere und w ∈ Rm eine innere Kraft. Dann „erfüllt G das Kräftegleichgewicht innerer und äußerer Kräfte“, wenn Cw = f (3.5) erfüllt ist. Diese Definition ist sehr einfach zu verstehen: Alle inneren Kräfte werden mittels C in das globale Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 35 Koordinatensystem transformiert. Ihre Summe muß dann der äußeren Kraft entsprechen, wenn das System in Ruhe sein soll. Wir wollen nun die Geometrievektoren definieren und wählen uns irgendeine Nummerierung der freien Knotenkoordinaten. Diese Nummerierung wird im folgenden festgehalten und stets benutzt, um eine Verbindung zwischen Knoten und Verschiebungsrichtungen herzustellen. Es wird auch klar werden, daß es unerheblich ist, welche Nummerierung gewählt wird. 3.2 Topologieoptimierung beim Fachwerk mit Steifigkeitsmatrix c(x) = uT f → min (3.6) x unter: Ku = f lT · x = V m∈N Anzahl finiter Elemente (Anzahl der Stäbe) n∈N Anzahl Freiheitsgrade (Knotenzahl ∗ Raumdimension) x = (x1 , x2 , ..., xn )T n ∈ [0; 1] relative Volumen der einzelnen Stäbe, Designvariablen m3 siehe.Gl. 2.4 c(x) ∈ R u = u(x) ∈ f∈ Compliance als Zielfunktion Rm virtuelle Verschiebungen[m] Siehe Abb. 2.4 b) Rm K = K(x) = Ki ∈ Rm×m vordefinierte Last[N ] Siehe Abb. 2.4 a) Pn i=1 Ki xi ∈ Rm×m Steifigkeitsmatrix des Stabwerkes siehe. Abs 3.1.1 Elementsteifigkeitsmatrix des Stabes / Elementes i in globalen Koordinaten Siehe Gl. 3.13 ki ∈ Rm×m V ∈ R+ Elementsteifigkeitsmatrix des Elementes i in lokalen Koordinaten Siehe Gl. 3.9 vordefiniertes maximales Volumen m3 Wir bezeichnen den Vektor γ̂ als Geometrievektor in lokalen Koordinaten, da er genau über die lokale Orientierung des Stabes Auskunft gibt. Man sieht in Gl. (3.1), daß der Anteil der Verschiebungen, der senkrecht auf γ̂ steht, keine Wirkung auf die Längenveränderung des Stabes hat. Dies entspricht der Modellforderung, daß lediglich Kräfte entlang der Stäbe wirken können, und deshalb auch nur Längenänderungen entlang des Stabes einfließen. Wir wollen nun das Hookesche Gesetz Gl. (2.1) anwenden. Dazu betrachten wir eine Kraft f , die nach Modellvorstellung in den Stabenden angreife, also als Vektor im R4 geschrieben werden kann. Es sollen sich die Verschiebungen x ∈ R4 ergeben. Der Stab soll außerden insgesamt im Gleichgewicht sein, d.h. f kann nur in Richtung der Längsachse des Stabes wirken, und mit einer Stabkraft q ∈ R gilt dann zwangsläufig nach Konstruktion qγ̂ = f (3.7) Setzt man voraus, daß die auftretende Spannung im linear-elastischen Bereich bleibt, dann ist das Hookesche Gesetz(2.1) anwendbar. Wir können damit aus den Verschiebungen x die angelegte Kraft 36 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology f berechnen: Nach dem Hookeschen Gesetz gilt σ = E, q ∆l =E , a l d.h. also mit (3.7) und (3.1) aE aE T laE T f = qγ̂ = ∆lγ̂ = γ̂ xγ̂ = γ̂γ̂ x l l l2 (3.8) Dieser Zusammenhang wird auch Steifigkeitsbeziehung genannt, und eröffnet die wesentliche Verbindung zwischen Verschiebungen der Knoten und äußeren Kräften. Bezeichnet man das Volumen des Stabes mit t, t := a · l und führt man die Abkürzungen cφ := cos φ, sφ := sin φ ein, dann schreibt sich die in Gl.(3.8) in eckigen Klammern stehende Matrix als tE k := 2 l (cφ)2 (cφ) (sφ) (sφ)2 − (cφ) (sφ) 2 − (cφ) (sφ) 2 − (cφ) (sφ) − (sφ)2 − (cφ) (cφ) (sφ) − (cφ)2 − (cφ) (sφ) (cφ) (cφ) (sφ) − (sφ)2 ∈ R4×4 (cφ) (sφ) (3.9) (sφ)2 Sie heißt (globale) Elementsteifigkeitsmatrix des zugehörigen Stabes in lokalen Koordinaten. Global spielt dabei auf den zweidimensionalen Raum an, in den der Stab gelegt wurde, und lokale Koordinaten drücken aus, daß nur der Einzelstab betrachtet wird und nicht ein Verbund von Stäben. Dies soll nun getan werden. Betrachten wir ein ebenes Stabwerks, das aus N Knoten und m Stäben besteht, dann gibt es prinzipiell 2 Richtungen, in die sich jeder Knoten verschieben kann. Ein Verschiebungsvektor x̃, der alle Verschiebung enthält, ist also ein Vektor in R2·N . Er ergibt sich, indem man alle Verschiebungen in jedem einzelnen Knoten addiert. Notiert man eine an den Knoten des Stabwerks angreifende Kraft f˜ voraus, dann kann q leicht mit Hilfe der Geometrievektoren aller Stäbe berechnet werden. Die Stabkräfte lassen dann – unter Annahme der linearen Elastizität – Aufschluß über die physikalische Belastung jedes Stabes zu. Wir betrachten nun die sog. Geometrievektoren in globalen Koordinaten γ̃i ∈ R2N , i = 1, . . . , m, die für jeden Stab i = 1, . . . , m aus γ̃i durch Auffüllen von Nullen in den Koordinaten entstehen, die nicht zu den Endknoten von Stab i gehören. (Globale Koordinaten drückt nun aus, daß alle Verschiebung von allen Knoten gleichzeitig als Vektor im R2N betrachtet werden). Mit diesen Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 37 Geometrievektoren schreibt sich das Kräftegleichgewicht(3.7) als m X qi γ̃i = f˜ (3.10) i=1 Die Steifigkeitsbeziehung (3.8) wird mit den Volumina ti = ai · li der Stäbe i ∈ {1, . . . , m} in globalen Koordinaten zu m X ti Ei i=1 li2 γ̃i γ̃iT x̃ = f˜ (3.11) Damit ein Stabwerk bezüglich einer äußeren Kraft f˜ im Gleichgewicht ist, muß es gewissen sog. Auflagerbedingungen genügen, in denen es verankert ist. In unserem Modell drückt sich dies darin aus, daß man einigen Knoten in einer oder in beiden Koordinatenrichtungen keine Verschiebungen erlaubt. Man kann jede Auflagerbedingung aber auch als entsprechend entgegengerichtete, äußere Kraft interpretieren, die beliebig groß werden kann. Die zugehörigen Knotenverschiebungen werden zu Null. Es ist also nicht notwendig, solche Verschiebungen als Variablen im Modell mitzuführen. Sie werden deshalb aus den Verschiebungsvektoren x̃, den Geometrievektoren γ̃i und den äußeren Kräften f˜ gestrichen. Man erhält so schließlich die (reduzierten) Geometrievektoren in globalen Koordinaten γ1 , . . . , γ m (3.12) und die (reduzierten) Elementsteifigkeitsmatrizen in globalen Koordinaten m X ti Ei i=1 li2 γi γiT x = f Dabei bezeichnen f und x die Vektoren, die nach der Streichung der fixierten Knotenkoordinaten aus f˜ und x̃ hervorgehen. Es bleibt anzumerken, daß die Knotenverschiebungen x als sehr klein angesehen werden, so daß die Änderung der Geometrie des Fachwerks (z.B. die Winkel der Stäbe, von denen die Geometrievektoren anhängen) vernachlässigt werden kann. Definition 14. Sei F = (G,E,t) ein Fachwerk. Dann heißt für i = 1, . . . , m die Matrix Ki := ti Ei γi γiT ∈ Rn×n li2 „(reduzierte) Elementsteifigkeitsmatrix des Stabes i (im globalen Koordinatensystem)“. Die Summe aller Elementsteifigkeitsmatrizen K := m X i=1 ti Ei γi γiT ∈ Rn×n li2 heißt „Gesamtsteifigkeitsmatrix“ oder einfach „Steifigkeitsmatrix“. (3.13) 38 Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology 4 Optimierung mit Matlab In diesem Kapitel wird gezeigt, wie man eine Konstruktion mit Matlab optimieren kann. 4.1 Programmierung Listing 4.1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 Matlab-Funktion batch bruecke3x3.m % matlab - nojvm - nodisplay -r " batch_bruecke ; quit " % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Definition des Bauraum nelx = 3; % Anzahl Knoten in x - Richtung nely = 3; % Anzahl Knoten in y - Richtung % Definition des Gitters gx0 = 0; gx1 = 840; gy0 = 0; gy1 = 840; % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [ knoten , staebe ]= stae bekn oten aufgi tter ( gx0 , gx1 , gy0 , gy1 , nelx , nely ,2) ; % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [ kn ,~] = size ( knoten ) ; % Anzahl Knoten [ sn ,~] = size ( staebe ) ; % Anzahl Stäbe fprintf ( ’% d ␣ Knoten ␣ und ␣ % d ␣ Staebe .\ n ’ ,kn , sn ) ; % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 1 Lastfaelle ; unten mitte nach unten kraefte = zeros (2* kn ,1) ; k =([1:( nelx -2) ]* nely +1) ; kraefte (2* k ,1) = -1; for i =1: length ( k ) fprintf ( ’ Kraft ␣ im ␣ Knoten ␣ % d ␣ auf ␣ der ␣ Richtung ␣ % d .\ n ’ ,k ( i ) ,2* k ( i ) ) ; end % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% lager = [1 ,2 ,(( nelx -1) * nely +1) *2]; % ein festlager unten links und ein % loslager unten rechts fprintf ( ’ gelagerte ␣ Knoten - Richtungen : ␣ ’) ; for i =1: length ( lager ) fprintf ( ’% d ␣ ’ , lager ( i ) ) ; end fprintf ( ’\ n ’) ; % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% smax =10; maxloop = 100; name = ’ brueckestop ’; [s ,w , exitflag , zeit , laengen ] = stop ( knoten , staebe , lager , kraefte , smax , maxloop , name ) ; V = s ’* laengen 39 40 40 41 Kapitel 4. Optimierung mit Matlab name = ’ brueckesizing ’; x = sizing ( knoten , staebe , lager , kraefte ,V , maxloop , name ) ; 4.1.1 Definition des Bauraum (Zeile 5 bis 6) Der Bauraum in der Topologieoptimierung bedeutet hier, daß die gesamte Größe des Konstruktes in einer rechteckigen Form gebildet wird. Die Zeilen 4 und 5 bedeuten, daß die Anzahl der Knoten in x- und y- Richtung gleich 3 ist, also nelx = 3 = nely. Hier als Beispiel haben wir die Koordinaten in x und y Richtung einen Abstand von 840m × 840m (Siehe Abb. 4.1). Natürlich können wir diese Werte beliebig auswählen. Abbildung 4.1: Beispiel Bauraum in Achsenkoordinaten hier 840m × 840m 4.1.2 Definition des Gitters (Zeile 7 bis 15) Hier wird der Bauraum in einem Koordinatensystem betrachtet, damit wir in dem Matlab-Programm diese Koordinaten eingeben können. Das Beispiel Abb. 4.2 verdeutlicht, wie das Gitter mit den Stäbe nur zwischen benachbarten Knoten kreuzungsfrei aussieht. Wir haben die Anzahl Knoten in x und y Richtung. Und die Knoten verbinden sich im Bauraum miteinander ohne dabei die Kreuzung zwischen benachbarten Knoten zu queren. Dadurch entsteht das Gitter in x Richtung mit x = gx = 0 und in y Richtung y = gy = 0. Die Länge des Gitters in x und y Richtung werden durch gx1 = 840 und gy1 = 840 dargestellt. In Zeile 12 werden die Knoten und Stäbe auf dem Gitter aufgebaut. Im Klammer an 7. Stelle steht folgende Bedeutung: 0 für „jeder Knoten mit jedem“, d. h. hier werden alle Knoten durch die Stäben miteinander verbunden 1 für „nur Nachbarknoten “, d. h. nur Nachbarknoten werden mit Stäben verbunden. 2 für „nur Nachbarknoten kreuzungsfrei“, d. h. alle rechteckige Form im Bauraum sind kreuzungsfrei Kapitel 4. Optimierung mit Matlab 41 Die Funktion stäbeknotenaufgitter liefert die Nummerierung der Knoten in folgender Matrix zurück: k1,1 k1,2 k2,1 knoten = . .. k2,2 .. . ∈ Rkn ×2 kkn ,1 kkn ,2 mit i-ter Zeile: ki,1 : x - Koordinate des i - ten Knoten ki,2 : y - Koordinate des i - ten Knoten Dabei werden die Knotennummerierung wie in Tabelle 4.1 gesetzt. Knotennummer 1 2 3 4 5 6 7 8 9 x − Koordinate 0 0 0 420 420 420 840 840 840 y − Koordinate 0 420 840 0 420 840 0 420 840 Tabelle 4.1: Knotennummerierung für 3 × 3 Knoten kreuzungsfrei Für die Stabsnummerierung haben wir gleiches Prinzip. Anstelle der x - und y - Koordinaten werden die Knoten als Anfang und Ende des Stabes genutzt. s1,1 s1,2 s2,1 Stäbe = . .. s2,2 .. . ∈ Rkn ×2 skn ,1 skn ,2 mit i-ter Zeile: ki,1 : Knotennummer, bei der Stab i anfängt ki,2 : Knotennummer, bei der Stab i endet In Tabelle 4.2 findet sich die Zuordnung der Knoten zu den Stäbe. Die beiden Matrizen knoten und Stäbe sehen hier wie folgt aus: 42 Kapitel 4. Optimierung mit Matlab Stabnummer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Knoten 1 1 1 2 2 3 3 4 4 5 5 5 5 6 7 8 Knoten 2 4 5 3 5 5 6 5 7 6 7 8 9 9 8 9 Tabelle 4.2: Stabnummerierung für 3 × 3 Knoten kreuzungsfrei 1 2 0 0 0 420 Knoten = 420 420 840 840 0 420 840 0 420 , 820 0 420 840 840 1 1 2 2 3 3 4 Stäbe = 4 5 5 5 5 6 7 4 5 3 5 5 6 5 7 6 7 8 9 9 8 8 9 Zur Veranschaulichung trägt man in 4.2 die Knotennummern und Stabnummern in einem Koordinatensystem ein. Als Beispiel Tab. 4.2 erkennt man, daß der Stab 16 von Knoten 8 zu Knoten 9 geht. Hierbei hat der Knoten 8 gemäß Tab. 4.1 die Koordinaten (840,420). Analog kann man die Zuordnung aller weiteren Stäbe ablesen. Kapitel 4. Optimierung mit Matlab knoten 3 knoten 6 7 14 43 knoten 9 y=gy1=840 6 10 4 5 12 knoten 8 knoten 2 1 16 13 knoten 5 11 3 15 8 2 9 y=gy0=0 knoten 1 knoten 7 knoten 4 x=gx0=0 x=gx1=840 Abbildung 4.2: Knoten- und Stabnummerierung im Bauraum mit Kreuzungfrei 4.1.3 Angreifende Kräfte an der Konstruktion(Zeile 20 bis 22) Die Zeile 21 zeigt, welche Knotennummer von der Kraft belastet wird. Die angreifende Kraft können wir beliebig an jede Position mit Knoten festlegen. Hier als Beispiel (nelx = nely = 3) in Abb. 4.3 lassen wir in der Mitte des Bauraums nach unten belasten. Im Vergleich zu Abb. 4.2 kann man feststellen, daß die Kraft sich am Knoten 4 = k = (nelx − 2) · nely + 1 befindet und in die Knotenrichtungsnummer 8 = 2 · k (Zeile 22) zeigt. Die Zeile 22 ist die Feststellung der Richtung der Kraft. Laut Freiheitgradnummerierung Abb. 4.4 ist die Kraft in y - Koordinaten nach oben positiv. Wir haben aber hier die Kraftrichtung nach unten, also negativ. y=840 y=0 x=0 x=840 F Abbildung 4.3: Angreifende Kraft im Bauraum mit Kreuzungfrei 4.1.4 Festlegung von Lagern im Bauraum (Zeile 27 bis 32) Nun führen wir zwei Lager im Bauraum Abb. 4.4 (links) ein. Das Festlager befindet sich unten an der linken Seite und das Loslager unten an der rechten Seite. Der Festlager kann in der Regel Kraft in x und y Richtung und das Loslager dagegen nur eine Richtung aufnehmen. Hier befinden sich am Knoten 1 das Festlager und am Knoten 7 das Loslager. Diese können durch die Freiheitsgradnummerierung Abb. 4.4 (rechts) festgelegt werden. Am Knoten 1 ergibt sich die Kraft in Richtung 44 Kapitel 4. Optimierung mit Matlab 1 und 2 sowie am Knoten 7 in Richtung 14 = ((nelx − 1) · nely + 1)·. Dadurch können wir diese Festlegung in Matlab (Zeile 27) einführen. Es werden also die gelagerten Indizes im Vektorlager gespeichert. Damit wird die Funktion r siehe Tabelle. 2.7 Zu: ( [r(v)]j := 0, falls j ∈ Lager 1, sonst y=840 6 3 12 5 4 2 y y=0 6 18 11 10 3 5 17 9 16 9 15 8 x x=0 2 Lager2 Lager 1 F 8 14 x=840 Knoten 1 1 4 7 7 13 Abbildung 4.4: Bauraum mit angreifender Kraft(links) und Freiheitsgradnummerierung (recht) Weiter können wir die in der Konstruktion maximale begrenzte Stabdicke smax (Zeile 35) festlegen. Die maximal Wiederholung der Durchführung des Programms maxloop (Zeile 36) wird auf 10000 Mal bestimmt. Zeile 37 ist die Eingabe des Namens, indem wird das Ergebnis als pdf, fig, und pgn Datei ausgegeben. 4.1.4.1 Ausgabe der Lösung ( Zeile 37 bis 41) Unter der Zeile 38 werden eine Topologieoptimierung im Fachwerk durch Stop-Funktion in Matlab durchgeführt. Dabei wird das Volumen minimiert. Die maximale Belastung in den einzelnen Stäben werden mittels Geometriematrix gefasst. Die Zeile 37 gibt die Lösungsdatei als „bruckestop“aus. Die Zeile 39 gibt das Maximalvolumen V an. Es besteht aus Stabsdicken multipliziert mit Stabslänge. Dieser Wert wird an Sizing-Funktion weiter gegeben. Unter der Sizing-Funktion (Zeile 41) wird eine Topologieoptimierung im Fachwerk durchführt. Die Compliance wird dabei minimiert. Die Verschiebungen werden anhand Steiffigkeitsmatrix berechnet. Die Zeile 40 gibt anschließend die Lösungsdatei als „brueckesizing “aus. Nach der Durchführung des Programm erhält man als Beispiel die optimierte Lösung Abb. 4.5 Abbildung 4.5: Lösungsbeispiel der Optimierung 3x3 Knoten 5 Vergleich der Methoden In diesem Kapital werden wir das Ergebnis von verschieden Konstruktionen sowie die unterschiedlichen Methode durchführen und analysieren. 5.1 Vergleich der Vernetzung Als Beispiel wird hier die Brücke genommen. Sie ist ein Bauwerk zum Überspannen von Hindernissen beziehungsweise zum Führen von Verkehrswegen(wie beispielsweise Straße, Schienen, Wasserstraße) oder baulichen Anlagen übernatürliche (wie beispielsweise Flüsse, Meerengen, Schluchten). Wir führen die für Brückekonstruktion benötigte Knoten und die Stäben in Matlab ein. Das Ergebnis wird durch untere Abbildung in unterschiedlichen Methode gezeigt. Wir haben hier stets den quadratischen Bauraum in den Abmessungen wie in Abb.4.1 und wählen unterschiedliche Knoten. Im Knoten 1 mit den Koordination (0,0) ist ein Festlager. Im Knoten ((nelx − 1) · nely + 1) · 2 mit dem Koordinaten (840,0) ist ein Loslager. Die Summe der Kräfte ist in allen Fallen gleich. In jedem Fall verteilen sich die gleichzeitig wirkenden Kräfte gleichmäßig auf die Knoten (xf , 0) mit 0 < xf < 840. 45 46 Kapitel 5. Vergleich der Methoden 5.1.1 jeder Knoten mit jedem Grundstruktur Ausgewählte Stäbe Stabdicken Gesamtes Stabvolumen 3.02e-12 m2 1.68e+03 m2 1.26e+03 m2 1.12e+03 m2 1.05e+03 m2 Anzahl aller Stäbe 6 28 86 200 418 Knoten 2×2 3×3 4×4 5×5 6×6 Gesamtes Stabvolumen 1.02e+03 m2 9.86e+02 m2 9.71e+02 m2 9.50e+02 m2 9.40e+02 m2 Anzahl aller Stäbe 748 1282 2240 3160 4429 Knoten 7×7 8×8 9×9 10 × 10 11 × 11 Ausgewählte Stäbe Stabdicken „Jeder Knoten mit jedem Knoten“ bedeutet, daß alle sich im Bauraum befindende Knoten durch die Stäbe verbunden werden. Die Stäbe in der Grundstruktur kreuzen sich mit zunehmender Knotenzahl immer mehr miteinander. Mit zunehmender Knotenzahl sind sie zu viele bis unerkennbar. Bei dem Ergebnis haben wir hier die ausgewählte Stäbe in unterschiedlichem Form. Die von der Kraft nicht belasteten Stäbe werden beim Rechnen nicht berücksichtigt. Man kann bei der Grundstäbe beispielsweise leicht bemerken, daß der obere Teil der optimierte Struktur nicht ausgenutzt wird. Wenn man dies berücksichtigt, kann man die potenziellen Knoten geeigneter wählen und somit eine kleinere Problemgröße erreichen. Die Stabdicke zeigt uns, welcher Stab von der Kraft am meisten überträgt. Je mehr Knoten in Bauraum sind, desto entsteht die Konstruktion für die Brücke sinnvoller. Kapitel 5. Vergleich der Methoden 47 5.1.2 Geometriematrix, nur Nachbarknoten Grundstruktur Ausgewählte Stäbe Stabdicken Gesamtes Stabvolumen 3.02e-12 m2 1.68e+03 m2 1.26e+03 m2 1.19e+03 m2 1.09e+03 m2 Anzahl aller Stäbe 6 20 42 72 110 Knoten 2×2 3×3 4×4 5×5 6×6 Gesamtes Stabvolumen 1.08e+03 m2 1.06e+03 m2 1.05e+03 m2 1.02e+03 m2 1.01e+03 m2 Anzahl aller Stäbe 156 210 272 342 420 Knoten 7×7 8×8 9×9 10 × 10 11 × 11 Ausgewählte Stäbe Stabdicken Unter „nur Nachbarknoten“ versteht man, daß sich Knoten sich nur mit nächsten liegenden Knoten verbindet. Dadurch entsteht die Anzahl der gesamten Stäbe mit zunehmender Knotenzahl in Grundstruktur wesentlich geringer als bei „jeder Knoten mit jedem“. Deshalb ist der Rechnenaufwand in diesem Fall geringer. Der Stabaufbau der optimierten Konstruktion ergibt sich in unterschiedlicher Form. 48 Kapitel 5. Vergleich der Methoden 5.1.3 Geometriematrix, nur Nachbarknoten kreuzungsfrei Grundstruktur Ausgewählte Stäbe Stabdicken gesamte Stabvolumen 2.00e-12 m2 1.68e+03 m2 1.40e+03 m2 1.30e+03 m2 1.17e+03 m2 Anzahl gesamte Stab 5 16 33 56 85 Knoten 2×2 3×3 4×4 5×5 6×6 Gesamtes Stabvolumen 1.17e+03 m2 1.12e+03 m2 1.08e+03 m2 1.07e+03 m2 1.06e+03 m2 Anzahl aller Stäbe 120 161 208 261 320 Knoten 7×7 8×8 9×9 10 × 10 11 × 11 Ausgewählte Stäbe Stabdicken Unter der „Nachbarknoten kreuzungsfrei“ Methode versteht man das gleiche Prinzip wie der Nachbarknoten Methode. Nur hier bildet die Stäbe im jeweiligen Rechteck zwischen des nächsten liegenden Knotens keine Kreuzung. Deshalb sind die Stabanzahl in der Grundstruktur in diesem Fall noch geringer. 5.1.4 Vergleich der Ergebnisse Nun werden wir das Ergebnis von diesen 3 Methoden vergleichen. Man kann sehen, daß aus diesen 3 Vernetzungsmethoden sich bei der „jeder Knoten mit jedem“ Methode das beste Ergebnis ergibt. Mit zunehmender Knotenzahl wird die Konstruktion immer sinnvoller erzeugt. Man kann außerdem noch sehen, daß mit zunehmender Knotenzahl auf Grund der Optimierung das gesamte Stabvolumen in der Konstruktion geringer wird. • Laufzeit/Rechenzeit Auf Grund der höheren Stabanzahl bei der „jeder Knoten mit jedem“ Methode in der Grundstruktur ist der Rechnenaufwand höher als bei der „nur Nachbarknoten“ und „nur Nachbarknoten kreuzungsfrei“ Methode. Das Volumen der Konstruktion nimmt dagegen bei allen Methode mit zunehmender Knotenzahl ab. Das bedeutet, daß die Konstruktion mit zunehmender Knotenzahl besser optimiert wird. Im Vergleich zu den „nur Kapitel 5. Vergleich der Methoden 49 Nachbarknoten“ und „nur Nachbarknoten kreuzungsfrei“ Methode hat die „jeder Knoten mit jedem“ das Volumen bei gleicher Knotenzahl am geringsten. Deshalb ist die Lösung dieser Methode am besten optimiert. • Qualität vom Ergebnis Bei der „jeder Knoten mit jedem“ Methode sieht das Ergebnis am besten aus. Die Bilder sind bei dieser Methode gleichmäßiger und symmetrischer als bei den anderen Methoden. Deshalb ist es sinnvoller und geeignet für die weitere Anwendung. 50 Kapitel 5. Vergleich der Methoden 5.2 Vergleich von Stop und Sizing Wir haben die Konstruktion bisher nur mit Stop berechnet. Nun werden wir das Ergebnis von Sizing (nichtlinear) einführen und mit Stop (linear) vergleichen. Wie vorher schon erklärt, liefert die „jeder Knoten mit jedem“ Methode das sinnvollste Ergebnis. Deshalb vergleichen wir Stop und Sizing nur bei dieser Methode. Methode Stop Rechenzeit 0.67s 0.26s 0.27s 0.34s 1.16s Rechenzeit 3.52s 44.75s 167.86s 902.35s Compliance 8.400913e-03 6.301097e-03 5.950695e-03 5.460650e-03 2×2 3×3 4×4 5×5 6×6 0.89s 1.45s 1.66s 151.31s 486.58s Rechenzeit 7147.25s 7286.83s 25291.60s 48004.95s 114046.40s Compliance 5.460388e-03 5.300424e-03 5.250326e-03 5.133786e-03 5.133585e-03 Knoten 7×7 8×8 9×9 10 × 10 11 × 11 Sizing Knoten Stop Rechenzeit Sizing 5.2.1 Vergleich der Ergebnisse Die Ergebnisse von Stop und Sizing sieht in erstem Blick ähnlich aus. Sie sind aber bei Sizing besser aus folgendem Grund: Kapitel 5. Vergleich der Methoden 51 • Rechenzeit Die Rechenzeit der Konstruktion ist bei Sizing aufgrund der Nichtlinearität mit gleicher Knotenzahl viel höher als bei Stop. Mit zunehmender Knotenzahl ändert sich der Rechenzeitaufwand bei Stop aufgrund der Linearität nur gering, nimmt aber bei Sizing erheblich zu. • Qualität Die Qualität der Ergebnisse sind bei Stop relativ schlecht. Sie sind im Vergleich zu den Ergebnisse von Sizing unsymmetrisch und ungleichmäßig (vgl. 7 × 7 Knoten). Mit zunehmender Knotenzahl sind die Ergebnisse von Sizing symmetrischer und gleichmäßiger und auf Grund der Nichtlinearitäten ist die Rechenform robuster. Literaturverzeichnis [1] ACHTZIGER, Wolfgang Optimierung von einfach und mehrfach belateten Stabwerken. Universität Bayreuth, 1993 (Bayreuther Mathematische Schriften 46). ISSN 0172-1062.-Doktorarbeit [2] MARTI,Kurt; GRÖGER;Detlef:Stochastische Strukturoptimierung von Stab- und Balkentragwerken. Berlin, Heidelberg : Springer,2006.-ISBN 3-540-260382-2 [3] BEETON,Barbara: What is TEX http://wwwtug.org/docs/,html/ptr-faq.html. Versi- on:Mai2001, Abruf:23.Juli 2008 [4] ROZVANY, G.I.N.(1989), Structrual Design via Optimality Criteria Kluwer, Dordrecht. [5] KIRSCH, U. (1990), On the Relationship between Optimum Structural Topologies and Geometries, Structural Optimization 2, 39-45. I II Literaturverzeichnis Abbildungsverzeichnis 2.1 Beispiel eines Fachwerks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2 Spannungs-Dehnungs-Diagramm für idealisiertes Material . . . . . . . . . . . . . . . 13 2.3 Spannungs-Dehunngs-Diagramm für weichen Stahl . . . . . . . . . . . . . . . . . . . 14 2.4 Belastung eines Knotens,gegeben (a) durch angreifende Kraft f oder (b) durch vorgegebene Verschiebung U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.5 Beispiel für Festlager und Freilager bzgl. x und y Richtung . . . . . . . . . . . . . . . 18 2.6 Grundstruktur einer Bogenbrücke(Seitenteil) . . . . . . . . . . . . . . . . . . . . . . 21 3.1 Beispiel einer Grundstruktur für das Sizing-Problem . . . . . . . . . . . . . . . . . . 23 3.2 Als sizing-Problem optimierte Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3 Start-Grundstruktur für das Geometry-Problem . . . . . . . . . . . . . . . . . . . . . 24 3.4 Als Geometry-Problem optimierte Grundstruktur . . . . . . . . . . . . . . . . . . . . 25 3.5 Als Geometry-Problem optimiertes Fachwerk . . . . . . . . . . . . . . . . . . . . . . 25 3.6 Grundstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7 Als Topology-Problem optimierte Struktur vgl.Abs 5.1.1 7 × 7 Knoten . . . . . . . . 27 3.8 Platzierung eines Stabes in der Ebene . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.9 Stabwerk bestehend aus 3 Stäben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.10 ohne diagonal Stab im Rahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.11 mit diagonalem Stab im Rahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1 Beispiel Bauraum in Achsenkoordinaten hier 840m × 840m . . . . . . . . . . . . . . 40 4.2 Knoten- und Stabnummerierung im Bauraum mit Kreuzungfrei . . . . . . . . . . . . 43 4.3 Angreifende Kraft im Bauraum mit Kreuzungfrei . . . . . . . . . . . . . . . . . . . . 43 4.4 Bauraum mit angreifender Kraft(links) und Freiheitsgradnummerierung (recht) . . . 44 4.5 Lösungsbeispiel der Optimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 III IV Abbildungsverzeichnis Tabellenverzeichnis 2.1 Materialeigenschaft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 Zeichenerklärung für die Darstellung von Stabwerken . . . . . . . . . . . . . . . . . . 21 3.1 Zusammenfassenden Überblick (S Steht für sizing, G für Geometry und T für Topology 26 4.1 Knotennummerierung für 3 × 3 Knoten kreuzungsfrei . . . . . . . . . . . . . . . . . 41 4.2 Stabnummerierung für 3 × 3 Knoten kreuzungsfrei . . . . . . . . . . . . . . . . . . . 42 V VI Tabellenverzeichnis Anhang sizing Listing 5.1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Matlab-Funktion sizing.m function x = sizing ( knoten , staebe , lager , kraefte ,V , maxloop , name ) % function x = sizing ( knoten , staebe , lager , kraefte ,V , maxloop , name ) % % Autor : Daniel Mohr % Datum : 2009 -10 -28 % Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007 % % knoten ist vektor mit % knoten (k ,:) sind die knoten % knoten (: ,1) sind die x - Koordinaten % knoten (: ,2) sind die y - Koordinaten % % staebe ist vektor der staebe mit % staebe (s ,:) sind die stabnummern % staebe (: ,1) sind die ersten knoten % stab (: ,2) sind die zweiten knoten % % lager Sind die Nummern der gelagerten Knoten % % kraefte sind die Kraefte als Vektor auf den Knotenrichtungen % % V ist das Maximalvolumen % % maximales Volumen % % Es wird eine Topologieoptimierung im Fachwerk % durchgefuehrt . Dabei wird die Compliance minimiert . Mittels % S t e if f igkeitsmatrix werden die Verschiebungen berechnet . % % Copyright ( C ) 2009 Daniel Mohr % This program is free software ; you can redistribute it and / or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation ; either version 3 of % the License , or ( at your option ) any later version . % % This program is distributed in the hope that it will be useful , % but WITHOUT ANY WARRANTY ; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU % General Public License for more details . % % You should have received a copy of the GNU General Public License VII VIII 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 Tabellenverzeichnis % along with this program ; if not , see % http :// www . gnu . org / licenses / % INITIALIZE [ kn , kr ]= size ( knoten ) ; [ sn , sr ]= size ( staebe ) ; [ kkn , nl ] = size ( kraefte ) ; sl = stablaengen ( knoten , staebe ) ; nel = kn * kr ; % alle Stäbe bekommen das gleiche Volumen fprintf ( ’ gleiches ␣ Volumen ␣ als ␣ Startwert ␣ fuer ␣ % d ␣ Staebe .\ n ’ , sn ) ; volfrac = V / sn ; x = sparse ( sn ,1) ; for i =1: sn x ( i ) = volfrac / sl ( i ) ; end c = zf (x , nel , knoten , staebe , kraefte , lager , sn ) ; ausgabe (0 ,c ,x , sl ,0 ,0 ,0) ; % alle Stäbe bekommen die gleiche Dicke % disp ( ’ gleiche Dicke als Startwert ’) ; % volfrac = V / sum ( sl ) ; % x = volfrac * ones ( sn ,1) ; % c = zf (x , nel , knoten , staebe , kraefte , lager , sn ) ; % ausgabe (0 ,c ,x , sl ,0 ,0 ,0) ; % Zielfunktion zfanonym = @ ( x ) zf (x , nel , knoten , staebe , kraefte , lager , sn ) ; % lineare Nebenbedingung ( Ungleichung ) A x <= b A = []; b = []; % lineare Nebenbedingung ( Gleichung ) Aeq x = beq % sl ’ * x = V Aeq = sl ’; beq = V ; % Boxbedingung xlb <= x <= xub % (n -1) * xmin <= nrho_i <= xmax - xmin xlb = volfrac *1 e -6* ones ( sn ,1) ; xub = V * ones ( sn ,1) ; funccount = 0; loop = 0; % Optimiere options = optimset () ; % options = optimset ( options , ’ Algorithm ’ , ’ active - set ’) ; options = optimset ( options , ’ Algorithm ’ , ’ interior - point ’) ; options = optimset ( options , ’ Diagnostics ’ , ’ on ’ , ’ Display ’ , ’ iter ’) ; options = optimset ( options , ’ GradObj ’ , ’ on ’) ; options = optimset ( options , ’ MaxIter ’ , maxloop ) ; Tabellenverzeichnis 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 IX options = optimset ( options , ’ MaxFunEvals ’ ,( sn * maxloop ) ^2) ; options = optimset ( options , ’ TolFun ’ ,1e -16) ; options = optimset ( options , ’ TolCon ’ ,1e -16) ; options = optimset ( options , ’ TolX ’ ,1e -16) ; options = optimset ( options , ’ UseParallel ’ , ’ always ’) ; % options = optimset ( options , ’ ScaleProblem ’ , ’ none ’) ; % options = optimset ( options , ’ Hessian ’ , ’ bfgs ’) ; % options = optimset ( options , ’ Hessian ’ ,{ ’ lbfgs ’ ,10}) ; % options = optimset ( options , ’ Hessian ’ ,{ ’ lbfgs ’ ,100}) ; % options = optimset ( options , ’ Hessian ’ , ’ fin - diff - grads ’) ; % options = optimset ( options , ’ SubproblemAlgorithm ’ , ’ cg ’) ; tic ; options = optimset ( options , ’ MaxIter ’ , round ( length ( x ) /10) ) ; options = optimset ( options , ’ Hessian ’ ,{ ’ lbfgs ’ , round ( sqrt ( length ( x ) ) ) }) ; [x ,z , exitflag , output ] = fmincon ( zfanonym ,x ,A ,b , Aeq , beq , xlb , xub ,[] , options ) ; options = optimset ( options , ’ MaxIter ’ , maxloop ) ; options = optimset ( options , ’ Hessian ’ , ’ bfgs ’) ; % default options = optimset ( options , ’ InitT rust Regi onRad ius ’ , sqrt ( sqrt ( length ( x ) ) ) ) ; options = optimset ( options , ’ SubproblemAlgorithm ’ , ’ cg ’) ; [x ,z , exitflag , output ] = fmincon ( zfanonym ,x ,A ,b , Aeq , beq , xlb , xub ,[] , options ) ; zeit = toc ; loop = loop + output . iterations ; change = output . stepsize ; funccount = funccount + output . funcCount ; c = zf (x , nel , knoten , staebe , kraefte , lager , sn ) ; ausgabe ( loop ,c ,x , sl , change , zeit , loop ) ; if exitflag >0 % Loesung gefunden fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; fprintf ( ’ Compliance : ␣ % e \ n ’ ,c ) ; fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # # \ n ’) ; fprintf ( fid , ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; fprintf ( fid , ’ Compliance : ␣ % e \ n ’ ,c ) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # # \ n ’) ; fclose ( fid ) ; else % keine Loesung gefunden fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; fprintf ( ’ Compliance : ␣ % e \ n ’ ,c ) ; fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # # \ n ’) ; fprintf ( fid , ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; fprintf ( fid , ’ Compliance : ␣ % e \ n ’ ,c ) ; X 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 Tabellenverzeichnis fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fclose ( fid ) ; end save ( sprintf ( ’% s . mat ’ , name ) , ’ knoten ’ , ’ staebe ’ , ’ lager ’ , ’ kraefte ’ , ’V ’ , ’ maxloop ’ , ’ name ’ , ’x ’ , ’z ’ , ’ exitflag ’ , ’ output ’ , ’c ’) ; bilderzeugen ( knoten , staebe ,x , max ( x ) /100 , sprintf ( ’% s ’ , name ) ) ; bilderzeugen ( knoten , staebe ,x , max ( x ) /100 , sprintf ( ’ ns_ % s ’ , name ) ,1 ,1) ; bilderzeugen ( knoten , staebe , ones ( size ( x ) ) ,1 , sprintf ( ’ as_ % s ’ , name ) ,1 ,1) ; end function [c , rdc ] = zf (x , nel , knoten , staebe , kraefte , lager , sn ) [ kkn , nl ] = size ( kraefte ) ; % FE - ANALYSIS [ U ]= FE ( nel , knoten , staebe ,x , kraefte , lager ) ; % Compliance c = trace ( kraefte ’ * U ) ; % c = trace (U ’ * KE ( knoten , staebe , x ) * U ) ; % c =0; % Ableitung der Compliance : dc = U ’ * dK * U dc = zeros ( sn ,1) ; for s = 1: sn edof = [2* staebe (s ,1) -1; 2* staebe (s ,1) ; 2* staebe (s ,2) -1; 2* staebe (s ,2) ]; for i = 1: nl % Ableitungen fuer jeden Lastfall Ue = U ( edof , i ) ; dc ( s ) = dc ( s ) - Ue ’ * lke ( knoten , staebe (s ,1) , staebe (s ,2) ) * Ue ; % c = c + x ( s ) * Ue ’* lke ( knoten , staebe (s ,1) , staebe (s ,2) ) * Ue ; end end if nargout > 1 rdc = full ( dc ) ; end c = full ( c ) ; end function ausgabe ( loop ,c ,x , sl , change , zeit , intervall ) if (( mod ( loop , intervall ) == 0) || ( loop == 1) ) fprintf ( ’ It .: ␣ %4 i ␣ ’ , loop ) ; fprintf ( ’ Obj . Compliance : ␣ %10.5 f ␣ ’ ,c ) ; % fprintf ( ’ Vol .: %6.3 f ’, sum ( sum ( x ) ) ) ; fprintf ( ’ Vol .: ␣ %6.3 f ␣ ’ ,x ’* sl ) ; fprintf ( ’ ch .: ␣ %6.4 f ␣ ’ , change ) ; fprintf ( ’ toc : ␣ %4.1 f \ n ’ , zeit ) ; end end % %%%%%%%%% FE - ANALYSIS % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % function [ U ]= FE ( nel , knoten , staebe ,x , kraefte , fixeddofs ) K = KE ( knoten , staebe , x ) ; alldofs freedofs % SOLVING = [1: nel ]; = setdiff ( alldofs , fixeddofs ) ; U ( freedofs ,:) = K ( freedofs , freedofs ) \ kraefte ( freedofs ,:) ; U ( fixeddofs ,:) = 0; Tabellenverzeichnis 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 % U ( isnan ( U ) ) =0 end % %%%%%%%%% ELEMENT STIFFNESS MATRIX % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % function K = KE ( knoten , staebe , x ) % x sind die Stabdicken [ kn , kr ]= size ( knoten ) ; [ sn , sr ]= size ( staebe ) ; nel = kn * kr ; K = sparse ( nel , nel ) ; % K = zeros ( nel , nel ) ; for s = 1: sn edof = [2* staebe (s ,1) -1; 2* staebe (s ,1) ; 2* staebe (s ,2) -1; 2* staebe (s ,2) ]; K ( edof , edof ) = K ( edof , edof ) + x ( s ) * lke ( knoten , staebe (s ,1) , staebe (s ,2) ) ; end end function KE = lke ( knoten ,a , b ) ax = knoten (a ,1) ; ay = knoten (a ,2) ; bx = knoten (b ,1) ; by = knoten (b ,2) ; dx = ax - bx ; dy = ay - by ; if dx ~= 0 if dy ~= 0 phi = atan ( dy / dx ) ; c = cos ( phi ) ; s = sin ( phi ) ; else phi =0; c =1; s =0; end else phi = pi /2; c =0; s =1; end l = sqrt ( dx ^2+ dy ^2) ; E = 2 e5 ; % E l e m e n t s t e i f i g k e i t s m a t r i x für Stabdicken als Designvariablen KE =( E / l ) * [ c ^2 c * s -c ^2 -c * s c * s s ^2 -c * s -s ^2 -c ^2 -c * s c ^2 c * s -c * s -s ^2 c * s s ^2]; end function laengen = stablaengen ( knoten , staebe ) [ kn , kr ]= size ( knoten ) ; [ sn , sr ]= size ( staebe ) ; laengen = zeros ( sn ,1) ; XI XII 245 246 247 248 249 250 251 252 253 254 255 256 for s = 1: sn a = staebe (s ,1) ; b = staebe (s ,2) ; ax = knoten (a ,1) ; ay = knoten (a ,2) ; bx = knoten (b ,1) ; by = knoten (b ,2) ; dx = ax - bx ; dy = ay - by ; laengen ( s ) = sqrt ( dx ^2+ dy ^2) ; end end Tabellenverzeichnis Tabellenverzeichnis XIII stop Listing 5.2: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 Matlab-Funktion stop.m function [s ,w , exitflag , zeit , laengen ]= stop ( knoten , staebe , lager , kraefte , smax , maxloop , name ) % function [s ,w , exitflag , zeit , laengen ]= stop ( knoten , staebe , lager , kraefte , smax , maxloop , name ) % % Autor : Daniel Mohr % Datum : 2010 -04 -19 ( letzte Aenderung ) % Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007 % % knoten ist Vektor mit % knoten (k ,:) sind die knoten % knoten (: ,1) sind die x - Koordinaten % knoten (: ,2) sind die y - Koordinaten % 1 <= k <= kn ; es gibt also kn Knoten % staebe ist Vektor der staebe mit % staebe (s ,:) sind die stabnummern % staebe (: ,1) sind die ersten knoten % staebe (: ,2) sind die zweiten knoten % 1 <= s <= sn ; es gibt also sn Staebe % lager Sind die Nummern der gelagerten Knoten % kraefte sind die Kraefte % kraefte (: , k ) sind die Kraefte des k - ten Lastfalles % 1 <= k <= nl ; es gibt also nl Lastfaelle % smax maximale Stabdicke % maxloop maximale Anzahl an Iterationen , 10000 ist durchaus sinnvoll % name Dateinamenanfang % % s Stabdicken % w Belastungen dieser Staebe in allen Lastfaellen % % Es wird eine Topologieoptimierung im Fachwerk % durchgefuehrt . Dabei wird das Volumen minimiert . Mittels % Geometriematrix wird die maximale Belastung in den einzelnen % Staeben gefasst . % % Copyright ( C ) 2009 Daniel Mohr % This program is free software ; you can redistribute it and / or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation ; either version 3 of % the License , or ( at your option ) any later version . % % This program is distributed in the hope that it will be useful , % but WITHOUT ANY WARRANTY ; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU % General Public License for more details . % % You should have received a copy of the GNU General Public License % along with this program ; if not , see XIV 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 Tabellenverzeichnis % http :// www . gnu . org / licenses / fprintf ( ’ stop ␣ gestartet \ n ’) ; sigma = 1; sigmamin = - sigma ; sigmamax = + sigma ; [ kn , kr ] = size ( knoten ) ; [ sn , sr ] = size ( staebe ) ; [ kkn , nl ] = size ( kraefte ) ; laengen = stablaengen ( knoten , staebe ) ; fprintf ( ’ stablaengen ␣ fertig \ n ’) ; C = geometriematrix ( knoten , staebe ) ; fprintf ( ’ geometriematrix ␣ fertig \ n ’) ; freedofs = setdiff ([1:2* kn ] , lager ) ; C = C ( freedofs ,:) ; [ nC , mC ] = size ( C ) ; % Startwerte w = ones ( nl * sn ,1) ; s = ones ( sn ,1) ; [ nw , mw ] = size ( w ) ; [ ns , ms ] = size ( s ) ; % Zielfunktion : c ^ T x z = [ sparse ( nw ,1) ; laengen ]; % Nebenbedingung : Aeq x = beq fprintf ( ’ Nebenbedingung : ␣ Aeq ␣ x ␣ = ␣ beq \ n ’) ; Aeq = sparse (0 ,0) ; beq = sparse (0 ,0) ; Ah0 = sparse ( nC , ns ) ; for k = 1: nl % fuer alle Lastfaelle Ah1 = [ sparse ( nC ,( k -1) * mC ) ,C , sparse ( nC ,( nl - k ) * mC ) ]; Aeq = [ Aeq ;[ Ah1 , Ah0 ]]; beq = [ beq ; kraefte ( freedofs , k ) ]; end Ah0 = []; Ah1 = []; [ nAeqi , nAeqj ] = size ( Aeq ) ; % Nebenbedingung : A x <= b fprintf ( ’ Nebenbedingung : ␣ A ␣ x ␣ <= ␣ b \ n ’) ; A = sparse (0 ,0) ; b = sparse (0 ,0) ; % sigmamin s_i <= w_i <= sigmamax s_i % Ah0 = eye ( sn ) ; Ah0 = sparse ([1: sn ] ,[1: sn ] , ones ( sn ,1) ,sn , sn , sn ) ; for k = 1: nl % fuer alle Lastfaelle Ah1 = [ sparse ( sn ,( k -1) * sn ) ,Ah0 , sparse ( sn ,( nl - k ) * sn ) ]; % sigmamin s_i <= w_i A = [ A ;[ - Ah1 , sigmamin * Ah0 ]]; b = [ b ; sparse ( sn ,1) ]; % w_i <= sigmamax s_i Tabellenverzeichnis 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 XV A = [ A ;[ Ah1 , - sigmamax * Ah0 ]]; b = [ b ; sparse ( sn ,1) ]; end Ah0 = []; Ah1 = []; fprintf ( ’ fertig ␣ mit ␣ Nebenbedingung : ␣ A ␣ x ␣ <= ␣ b \ n ’) ; % Grenzen % sigmamin smax <= w_i <= sigmamax smax lb = sigmamin * smax * ones ( length ( w ) ,1) ; ub = sigmamax * smax * ones ( length ( w ) ,1) ; % 0 <= s_i <= smax lb =[ lb ; sparse ( length ( s ) ,1) ]; ub =[ ub ; smax * ones ( length ( s ) ,1) ]; % Informationen ausgeben [ nAi , nAj ] = size ( A ) ; fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( ’% d ␣ Knoten ␣ und ␣ % d ␣ Staebe .\ n ’ ,kn , sn ) ; fprintf ( ’% d ␣ Lastfaelle .\ n ’ , nl ) ; fprintf ( ’% d ␣ dofs ␣ -␣ % d ␣ Lager ␣ = ␣ % d ␣ Freiheitsgrade ␣ und ␣ % d ␣ Staebe .\ n ’ ,2* kn , length ( lager ) ,nC , mC ) ; fprintf ( ’% d ␣ Unbekannte ␣ fuer ␣ Kraefte ␣ w .\ n ’ , length ( w ) ) ; fprintf ( ’% d ␣ Unbekannte ␣ fuer ␣ Stabdicken ␣ s .\ n ’ , length ( s ) ) ; fprintf ( ’␣ ergibt ␣ % d ␣ Unbekannte .\ n ’ , length ( w ) + length ( s ) ) ; fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( ’% d ␣ Ungleichungen ␣ fuer ␣ % d ␣ Unbekannte ␣ mit ␣ % d ␣ rechter ␣ Seite .\ n ’ ,nAi , nAj , length ( b ) ) ; fprintf ( ’% d ␣ Gleichungen ␣ fuer ␣ % d ␣ Unbekannte ␣ mit ␣ % d ␣ rechter ␣ Seite .\ n ’ , nAeqi , nAeqj , length ( beq ) ) ; fprintf ( ’% d ␣ untere ␣ Grenzen ␣ und ␣ % d ␣ obere ␣ Grenzen .\ n ’ , length ( lb ) , length ( ub ) ) ; fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( fid , ’% d ␣ Knoten ␣ und ␣ % d ␣ Staebe .\ n ’ ,kn , sn ) ; fprintf ( fid , ’% d ␣ Lastfaelle .\ n ’ , nl ) ; fprintf ( fid , ’% d ␣ dofs ␣ -␣ % d ␣ Lager ␣ = ␣ % d ␣ Freiheitsgrade ␣ und ␣ % d ␣ Staebe .\ n ’ ,2* kn , length ( lager ) ,nC , mC ) ; fprintf ( fid , ’% d ␣ Unbekannte ␣ fuer ␣ Kraefte ␣ w .\ n ’ , length ( w ) ) ; fprintf ( fid , ’% d ␣ Unbekannte ␣ fuer ␣ Stabdicken ␣ s .\ n ’ , length ( s ) ) ; fprintf ( fid , ’␣ ergibt ␣ % d ␣ Unbekannte .\ n ’ , length ( w ) + length ( s ) ) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( fid , ’% d ␣ Ungleichungen ␣ fuer ␣ % d ␣ Unbekannte .\ n ’ ,nAi , nAj ) ; fprintf ( fid , ’% d ␣ Gleichungen ␣ fuer ␣ % d ␣ Unbekannte .\ n ’ , nAeqi , nAeqj ) ; fprintf ( fid , ’% d ␣ untere ␣ Grenzen ␣ und ␣ % d ␣ obere ␣ Grenzen .\ n ’ , length ( lb ) , length ( ub ) ) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fclose ( fid ) ; % optimiere options = optimset () ; options = optimset ( options , ’ Display ’ , ’ off ’) ; options = optimset ( options , ’ LargeScale ’ , ’ on ’ , ’ Simplex ’ , ’ off ’) ; options = optimset ( options , ’ MaxIter ’ , maxloop ) ; % options = optimset ( options , ’ TolFun ’ ,1e -16) ; % zu klein , funktioniert nicht options = optimset ( options , ’ TolFun ’ ,1e -14) ; XVI 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 Tabellenverzeichnis options = optimset ( options , ’ Diagnostics ’ , ’ on ’ , ’ Display ’ , ’ iter ’) ; tic ; [x , fval , exitflag , output , lambda ] = linprog (z ,A ,b , Aeq , beq , lb , ub ,[] , options ) ; % [x , fval , exitflag , output , lambda ] = linprog (z ,A ,b , Aeq , beq , lb , ub ) ; zeit = toc ; w = x (1: nw ) ; s = x ( nw +1: nw + ns ) ; if exitflag == 1 % Loesung gefunden fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; % fprintf ( ’ Volumen : % e \n ’ , sum ( s ) ) ; fprintf ( ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ; fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( fid , ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; fprintf ( fid , ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fclose ( fid ) ; else % keine Loesung gefunden fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; fprintf ( ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ; fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fprintf ( fid , ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ; fprintf ( fid , ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ; fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ; fclose ( fid ) ; end save ( sprintf ( ’% s . mat ’ , name ) , ’ knoten ’ , ’ staebe ’ , ’ lager ’ , ’ kraefte ’ , ’ smax ’ , ’ maxloop ’ , ’ name ’ , ’x ’ , ’s ’ , ’w ’ , ’ fval ’ , ’ exitflag ’ , ’ output ’ , ’ lambda ’) ; bilderzeugen ( knoten , staebe ,s , max ( s ) /100 , sprintf ( ’% s ’ , name ) ) ; bilderzeugen ( knoten , staebe ,s , max ( s ) /100 , sprintf ( ’ ns_ % s ’ , name ) ,1 ,1) ; bilderzeugen ( knoten , staebe , ones ( size ( s ) ) ,1 , sprintf ( ’ as_ % s ’ , name ) ,1 ,1) ; end % %% % % % % % % % % % % % %%% %% %% %% function laengen = stablaengen ( knoten , staebe ) [ kn , kr ]= size ( knoten ) ; [ sn , sr ]= size ( staebe ) ; laengen = zeros ( sn ,1) ; for s = 1: sn a = staebe (s ,1) ; b = staebe (s ,2) ; ax = knoten (a ,1) ; Tabellenverzeichnis 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 ay = knoten (a ,2) ; bx = knoten (b ,1) ; by = knoten (b ,2) ; dx = ax - bx ; dy = ay - by ; laengen ( s ) = sqrt ( dx ^2+ dy ^2) ; end end % % % % % % % % %% %% %% %% %%% %% %% function C = geometriematrix ( knoten , staebe ) [ kn , kr ]= size ( knoten ) ; [ sn , sr ]= size ( staebe ) ; C = sparse (2* kn , sn ) ; for s = 1: sn a = staebe (s ,1) ; b = staebe (s ,2) ; ax = knoten (a ,1) ; ay = knoten (a ,2) ; bx = knoten (b ,1) ; by = knoten (b ,2) ; dx = ax - bx ; dy = ay - by ; if dx ~= 0 if dy ~= 0 phi = atan ( dy / dx ) ; wc = cos ( phi ) ; ws = sin ( phi ) ; else phi =0; wc =1; ws =0; end else phi = pi /2; wc =0; ws =1; end C (2* a -1 , s ) = C (2* a -1 , s ) - wc ; C (2* a , s ) = C (2* a , s ) - ws ; C (2* b -1 , s ) = C (2* b -1 , s ) + wc ; C (2* b , s ) = C (2* b , s ) + ws ; end end XVII XVIII Tabellenverzeichnis stäbeknotenaufgitter Listing 5.3: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 Matlab-Funktion staebeknotenaufgitter.m function [ knoten , staebe ]= sta ebek note naufg itte r ( gx0 , gx1 , gy0 , gy1 , nelx , nely , art ) % function [ knoten , staebe ]= stae bekn oten aufgi tter ( gx0 , gx1 , gy0 , gy1 , nelx , nely , art ) % % Es werden Knoten und Staebe erstellt . % % Autor : Daniel Mohr % Datum : 2009 -11 -17 ( letzte Aenderung ) % Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007 % % gx0 Gitterkoordinate x_min % gx1 Gitterkoordinate x_max % gy0 Gitterkoordinate y_min % gy1 Gitterkoordinate y_max % nelx Anzahl Knoten in x - Richtung % nely Anzahl Knoten in y - Richtung % art beschreibt die Art der Verknüpfung % 0 : Es werden alle sinnvollen Staebe zwischen allen Knoten % erstellt . ( default ) % also [ viele ] Staebe % 1 : Es werden Staebe nur zwischen benachbarten Knoten % erstellt . % also 4*( nelx -1) *( nely -1) +( nelx -1) +( nely -1) Staebe % 2 : Es werden Staebe nur zwischen benachbarten Knoten % kreuzungsfrei erstellt . % also 3*( nelx -1) *( nely -1) +( nelx -1) +( nely -1) Staebe % % knoten ist vektor mit % knoten (k ,:) sind die knoten % knoten (: ,1) sind die x - Koordinaten % knoten (: ,2) sind die y - Koordinaten % % staebe ist vektor der staebe mit % staebe (s ,:) sind die stabnummern % staebe (: ,1) sind die ersten knoten % staebe (: ,2) sind die zweiten knoten % % Copyright ( C ) 2009 Daniel Mohr % This program is free software ; you can redistribute it and / or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation ; either version 3 of % the License , or ( at your option ) any later version . % % This program is distributed in the hope that it will be useful , % but WITHOUT ANY WARRANTY ; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU % General Public License for more details . % % You should have received a copy of the GNU General Public License Tabellenverzeichnis 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 XIX % along with this program ; if not , see % http :// www . gnu . org / licenses / if nargin < 7 art = 0; end knoten = zeros ( nelx * nely ,2) ; for elx = 1: nelx for ely = 1: nely k = ely + nely *( elx -1) ; % Knotennummer knoten (k ,1) = ( elx -1) *( gx1 - gx0 ) /( nelx -1) ; % x - Koordinate knoten (k ,2) = ( ely -1) *( gy1 - gy0 ) /( nely -1) ; % y - Koordinate end end staebe = zeros (( nelx * nely ) ^2 ,2) ; sn = 1; art if art == 0 % art == 0 : Es werden alle sinnvollen Staebe zwischen allen Knoten % erstellt . for elx = 1: nelx for ely = 1: nely k1 = ely + nely *( elx -1) ; % Knotennummer for i = 0: max ( nelx - elx , elx -1) % verbinde mit allen weiteren Knoten for j = 0: max ( nely - ely , ely -1) [ rx , ry ] = kuerze (i , j ) ; if ( rx == i ) && ( ry == j ) if (1 <= elx + rx ) && ( elx + rx <= nelx ) if (1 <= ely + ry ) && ( ely + ry <= nely ) k2 = ( ely + ry ) + nely *(( elx + rx ) -1) ; % Knotennummer if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn -1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ))) staebe ( sn ,1) = k1 ; staebe ( sn ,2) = k2 ; sn = sn + 1; end end if (1 <= ely - ry ) && ( ely - ry <= nely ) k2 = ( ely - ry ) + nely *(( elx + rx ) -1) ; % Knotennummer if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn -1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ))) staebe ( sn ,1) = k1 ; staebe ( sn ,2) = k2 ; sn = sn + 1; end end end end XX 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 Tabellenverzeichnis end % for j end % for i end % for ely end % for elx elseif art == 1 % art == 1 : Es werden Staebe nur zwischen benachbarten Knoten % erstellt . for elx = 1: nelx for ely = 1: nely k1 = ely + nely *( elx -1) ; % Knotennummer for i = 0:1 % verbinde mit allen weiteren Knoten for j = 0:1 [ rx , ry ] = kuerze (i , j ) ; if (1 <= elx + rx ) && ( elx + rx <= nelx ) if (1 <= ely + ry ) && ( ely + ry <= nely ) k2 = ( ely + ry ) + nely *(( elx + rx ) -1) ; % Knotennummer if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn -1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ) ) ) staebe ( sn ,1) = k1 ; staebe ( sn ,2) = k2 ; sn = sn + 1; end end if (1 <= ely - ry ) && ( ely - ry <= nely ) k2 = ( ely - ry ) + nely *(( elx + rx ) -1) ; % Knotennummer if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn -1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ) ) ) staebe ( sn ,1) = k1 ; staebe ( sn ,2) = k2 ; sn = sn + 1; end end end end % for j end % for i end % for ely end % for elx else % art == 2 : Es werden Staebe nur zwischen benachbarten % kreuzungsfrei Knoten erstellt . for elx = 1: nelx for ely = 1: nely k1 = ely + nely *( elx -1) ; % Knotennummer if ( mod ( elx ,2) == mod (1+ nely - ely ,2) ) ii = [0:1]; jj = [ -1:1]; k = 0; else ii = [0:1]; jj = [0:1]; k = 1; end Tabellenverzeichnis 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 XXI for i = ii % verbinde mit allen weiteren Knoten for j = jj if ( k == 0) || ( i ~= j ) rx = i ; ry = j ; if (1 <= elx + rx ) && ( elx + rx <= nelx ) && (1 <= ely + ry ) && ( ely + ry <= nely ) k2 = ( ely + ry ) + nely *(( elx + rx ) -1) ; % Knotennummer if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn -1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ) ) ) staebe ( sn ,1) = k1 ; staebe ( sn ,2) = k2 ; sn = sn + 1; end end end end % for j end % for i end % for ely end % for elx end staebe = staebe (1: sn -1 ,:) ; size ( staebe ) staebe = unique ( staebe , ’ rows ’) ; size ( staebe ) end function [z , n ]= kuerze (z , n ) % function [z , n ]= kuerze (z , n ) % % Die zahlen z und n werden durch den ggT geteilt . % % Autor : Daniel Mohr % Datum : 2009 -10 -08 ( letzte Aenderung ) if (n <0) && (z <0) z=-z; n=-n; end if z == 0 n = 1; elseif n == 0 z = 1; elseif ( z ~= 1) && ( n ~= 1) % ggt = gcd (z , n ) ; ggt = ggT (z , n ) ; z = z / ggt ; n = n / ggt ; end end function ggt = ggT (z , n ) % function ggt = ggT (z , n ) XXII 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 Tabellenverzeichnis % % Der groesste gemeinsame Teiler ggT von z und n wird mittels Euklid ’ schen Algorithmus bestimmt . % % Autor : Daniel Mohr % Datum : 2009 -10 -08 ( letzte Aenderung ) % % Die Funktion gcd von MatLab ist langsamer und maechtiger . z = abs ( z ) ; n = abs ( n ) ; while ( n ~= 0) tmp = n ; n = z - floor ( z / n ) * n ; z = tmp ; end ggt = z ; end Tabellenverzeichnis bilderzeugen Listing 5.4: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 Matlab-Funktion bilderzeugen.m function bilderzeugen ( knoten , stab ,s , smin , name , mindicke , maxdicke ) % function bilderzeugen ( knoten , stab ,s , smin , name ) % % Autor : Daniel Mohr % Datum : 2009 -11 -22 ( letzte Aenderung ) % Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007 % % knoten ist vektor mit % knoten (k ,:) sind die knoten % knoten (: ,1) sind die x - Koordinaten % knoten (: ,2) sind die y - Koordinaten % % stab ist vektor der staebe mit % stab (s ,:) sind die stabnummern % stab (: ,1) sind die erste staebe % stab (: ,2) sind die zweiten staebe % % s sind die Stabdicken % smin Staebe , die kleiner als smin sind , werden nicht gezeichnet % name ist der Name der Datei in die geschrieben wird % mindicke ist die gezeichnete Mindestdicke , default 1 % maxdicke ist die gezeichnete Maximaldicke , default 10 % % Es wird das Fachwerk als fig - Grafik erstellt und mittels fig2dev % als pdf ung png ausgegeben . % % bzgl . fig - Format vgl .: http :// www . xfig . org / userman / fig - format . html % % Copyright ( C ) 2009 Daniel Mohr % This program is free software ; you can redistribute it and / or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation ; either version 3 of % the License , or ( at your option ) any later version . % % This program is distributed in the hope that it will be useful , % but WITHOUT ANY WARRANTY ; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU % General Public License for more details . % % You should have received a copy of the GNU General Public License % along with this program ; if not , see % http :// www . gnu . org / licenses / if nargin < 6 mindicke = 1; if nargin < 7 maxdicke = 10; end XXIII XXIV 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 Tabellenverzeichnis end [ kn , kr ]= size ( knoten ) ; [ sn , sr ]= size ( stab ) ; minimalwert = min ( s ) ; maximalwert = max ( s ) ; % s ( find (s < maximalwert /100) ) =0; s ( find (s < smin ) ) =0; % x =10*( x - minimalwert ) /( maximalwert - minimalwert ) +1; s = skaliere ( mindicke , maxdicke , s ) ; minimalwert = min ( s ) ; maximalwert = max ( s ) ; % x =10* x ; % x = ones ( size ( x ) ) ; xmin = min ( knoten (: ,1) ) ; ymin = min ( knoten (: ,2) ) ; knoten (: ,1) = knoten (: ,1) - xmin + 10; knoten (: ,2) = knoten (: ,2) - ymin + 10; xmin =10; ymin =10; xmax = max ( knoten (: ,1) ) +10; ymax = max ( knoten (: ,2) ) +10; figymax =1200; faktor = figymax / max ( xmax , ymax ) ; fid2 = fopen ( ’ fig2devausfuehren ’ , ’ wt ’) ; fprintf ( fid2 , ’ #!/ bin / bash \ n ’) ; fid = fopen ( sprintf ( ’% s . fig ’ , name ) , ’ wt ’) ; fprintf ( fid , ’# FIG ␣ 3.2\ n ’) ; fprintf ( fid , ’ Portrait \ n ’) ; % orientation fprintf ( fid , ’ Center \ n ’) ; % justification fprintf ( fid , ’ Metric \ n ’) ; % units fprintf ( fid , ’ A4 \ n ’) ; % papersize fprintf ( fid , ’ 1.0\ n ’) ; % magnification fprintf ( fid , ’ Single \ n ’) ; % multiple - page fprintf ( fid , ’ 0\ n ’) ; % transparent color fprintf ( fid , ’ 1200 ␣ 1\ n #\ n ’) ; % resolution coord_system fprintf ( fid , ’# ␣ Rahmen \ n ’) ; fprintf ( fid , ’2 ␣ 1 ␣ 0 ␣ 1 ␣ 7 ␣ 0 ␣ 995 ␣ 0 ␣ -1 ␣ 0.000 ␣ 1 ␣ 1 ␣ 0 ␣ 0 ␣ 0 ␣ 5\ n ’) ; fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor *0 , figymax - faktor *0) ; fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor * max ( xmax , ymax ) , figymax - faktor *0) ; fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor * max ( xmax , ymax ) , figymax - faktor * max ( xmax , ymax ) ) ; fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor *0 , figymax - faktor * max ( xmax , ymax ) ) ; fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor *0 , figymax - faktor *0) ; anzahlstaebe = 0; for j = 1: sn if ( s ( j ) >= smin ) && ( round ( s ( j ) ) >= 0.001) Tabellenverzeichnis anzahlstaebe = anzahlstaebe + 1; fprintf ( ’ Stab ␣ % d ␣ (% d ) : ␣ % e \ n ’ ,j , anzahlstaebe , s ( j ) ) ; fprintf ( fid , ’# ␣ Stab ␣ % d ␣ (% d ) \ n ’ ,j , anzahlstaebe ) ; fprintf ( fid , ’2 ␣ 1 ␣ 0 ␣ % d ␣ 0 ␣ 0 ␣ 995 ␣ 0 ␣ -1 ␣ 0.000 ␣ 1 ␣ 1 ␣ 0 ␣ 0 ␣ 0 ␣ 2\ n ’ , round ( s ( j ) ) ) ; fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , round ( faktor * knoten ( stab (j ,1) ,1) ) , round ( figymax faktor * knoten ( stab (j ,1) ,2) ) ) ; fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , round ( faktor * knoten ( stab (j ,2) ,1) ) , round ( figymax faktor * knoten ( stab (j ,2) ,2) ) ) ; 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 XXV end end fprintf ( ’\ nStabdicken : ␣ % e ␣ bzw . ␣ % e ␣ bis ␣ % e \ n ’ , min ( s ) , min ( s ( find (s >= smin ) ) ) , max ( s ) ) ; fprintf ( ’\ nsmin : ␣ % e \ n \ n ’ , smin ) ; fprintf ( ’ fig2dev ␣ -L ␣ pdf ␣ % s . fig ␣ % s . pdf \ n ’ , name , name ) ; fprintf ( ’ fig2dev ␣ -Z ␣ 10 ␣ -L ␣ png ␣ % s . fig ␣ % s . png \ n ’ , name , name ) ; if strcmp ( computer ( ’ arch ’) , ’ glnx86 ’) || strcmp ( computer ( ’ arch ’) , ’ glnxa64 ’) || strcmp ( computer ( ’ arch ’) , ’ maci ’) || strcmp ( computer ( ’ arch ’) , ’ maci64 ’) || strcmp ( computer ( ’ arch ’) , ’ sol64 ’) system ( sprintf ( ’ fig2dev ␣ -L ␣ pdf ␣ % s . fig ␣ % s . pdf \ n ’ , name , name ) ) ; system ( sprintf ( ’ fig2dev ␣ -Z ␣ 10 ␣ -L ␣ png ␣ % s . fig ␣ % s . png \ n ’ , name , name ) ) ; end function x = skaliere (a ,b , x ) xgn = find (x >0) ; xmin = min ( x ( xgn ) ) ; if length ( xmin ) >0 xmax = max ( x ) ; % xmin = min ( xmax /10 , xmin ) ; if xmax ~= xmin m = (b - a ) /( xmax - xmin ) ; t = a - m * xmin ; x ( xgn ) = m * x ( xgn ) + t ; end end