Analyza implementace tradi cn ch p r klad u rozm erov e ...mech.fsv.cvut.cz/~anicka/bazant/works/2011_pospisilova.pdf · given by continuous solutions, ... proto maj tyto uloh y re

  • Upload
    lydien

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

  • CESKE VYSOKE UCENI TECHNICKE V PRAZE

    Fakulta stavebnKatedra mechaniky

    Analyza implementace tradicnchprkladu rozmerove optimalizace

    Implementation analysis of sizing optimizationbenchmarks

    Soutezn prace

    Studijn program: Stavebn inzenyrstvStudijn obor: Konstrukce pozemnch staveb

    Vedouc prace: Ing. Matej Leps, Ph.D.

    Adela Pospsilova

    Praha 2011

  • Obsah

    1 Uvod 4

    2 Optimalizace stavebnch konstrukc 5

    3 Implementace v programu MATLAB 53.1 Moznosti ulozen matice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2 Moznosti sestaven globaln matice tuhosti . . . . . . . . . . . . . . . . . . . . 5

    3.2.1 Lokalizace pres kodova csla s adresovanm radku a sloupcu . . . . . . 53.2.2 Lokalizace pres kodova csla se tremi for cykly . . . . . . . . . . . . . 7

    3.3 Parametricke vyjadren matice . . . . . . . . . . . . . . . . . . . . . . . . . . 83.4 Moznosti resen soustavy rovnic . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3.4.1 Klasicke resen X = A \B . . . . . . . . . . . . . . . . . . . . . . . . . 103.4.2 LU faktorizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.4.3 Choleskeho dekompozice . . . . . . . . . . . . . . . . . . . . . . . . . . 113.4.4 LDLT rozklad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.4.5 Metoda sdruzenych gradientu . . . . . . . . . . . . . . . . . . . . . . . 13

    3.5 Kompilace do samostatne spustitelneho souboru . . . . . . . . . . . . . . . . 13

    4 Implementace v jazyce C++ 14

    5 Pouzite benchmarky 155.1 Desetiprutova prhradova 2D konzola . . . . . . . . . . . . . . . . . . . . . . . 155.2 Dvacetipetiprutova prhradova 3D vez . . . . . . . . . . . . . . . . . . . . . . 165.3 Padesatidvouprutova prhradova 2D konstrukce . . . . . . . . . . . . . . . . . 165.4 Sedmdesatidvouprutova prhradova 3D konstrukce . . . . . . . . . . . . . . . 17

    6 Testovac metody a jejich vysledky 196.1 MATLAB a m-files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    6.1.1 Parametricke vyjadren skriptu . . . . . . . . . . . . . . . . . . . . . . 206.1.2 Plna a rdka matice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206.1.3 Resice soustavy rovnic Stiff*Disp=f . . . . . . . . . . . . . . . . . . 21

    6.2 MATLAB a kompilace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226.3 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    7 Zaver 24

    A Prehled uzitych anglosaskych jednotek s prevodem do SI soustavy 29

    2

  • Abstrakt

    Tato prace se zabyva studiem klasickych prkladu rozmerove diskretn optimalizace. Chce-me-li najt globaln optimum, je nutno pouzt napr. metody vetv a mez. Pouzijeme-li dolnodhad zskany spojitou rozmerovou optimalizac a horn odhad zskany z publikovanychclanku, presto bude nutno spoustet vypocty mnohokrat. Proto se vyplat udelat casovouoptimalizaci jednotlivych kodu.

    Z nepreberneho mnozstv byly vybrany ctyri nejcasteji pouzvane konstrukce dostupnev zahranicn i tuzemske literature. Na techto konstrukcch budeme testovat jednotlive vypo-cetn metody. Pro spoctan potrebnych velicin je zvolena metoda konecnych prvku, nebotje vhodna pro jej naslednou algoritmizaci. Je treba najt optimaln skript, ktery bude mtnejrychlejs cas sveho vypoctu. Doba vypoctu zavis na uzitych matematickych metodach,proto byly vybrany tri nejznamejs prme metody a jedna metoda iteracn. Zavis vsak i najazyce, ve kterem je vypocetn metoda implementovana.

    Prostred MATLAB je dnes velmi popularn. Je pro nej vytvareno a optimalizovano mnohofunkc, k dispozici je i siroka skala toolboxu. Ke vsem funkcm je k dispozici obsahla napoveda.Jedna se vsak o interpretovany jazyk, ktery byva zpravidla pomalejs nez jazyk kompilovany.Nicmene i MATLAB nabz zkompilovan kodu naprklad do samostatne spustitelne aplikace,coz muze vyrazne ovlivnit cas vypoctu.

    Naproti tomu prmo kompilovane jazyky jako naprklad C++ by mely dosahovat vetsrychlosti vypoctu. Navc jsou k nim (vetsinou zdarma) dostupne knihovny nabzejc vyko-navan ruznych matematickych operac. Nen pak treba tyto funkce programovat a nasledneoptimalizovat. V teto praci proto budou tyto ruzne zpusoby vypoctu porovnany.

    Abstract

    This contribution focuses on studies of classical sizing discrete optimization benchmarks.Our vision is to use these scripts for the next optimization with branch-and bound methods.Although equipped with upper bounds from optima found in literature and lower boundsgiven by continuous solutions, still there will be a need for a dozen of evaluations. Therefore,the following time optimization of computing codes is on demand.

    We have chosen the four most often used structures which can be found in the availableliterature. Required deflections and stresses are computed with the finite element method,which is not only efficient but also easy to implement. For a practical usage of benchmarks, itis necessary to find an optimal script, which is the least computationally demanding. Time ofone computation dominantly depends on the used mathematical methods for solving systemsof linear equations. Three well-known direct methods and one iterative method were chosenfor the study. However, performance also depends on the implementation details, i.e. mainlyon the selection of an appropriate programming language.

    Nowadays, the MATLAB environment is very popular. A lot of methods and proceduresare created and optimized for it and many scientific toolboxes are available. Moreover, thedevelopment of a new code is supported by comprehensive help. However, MATLAB is an in-terpreted language, which should be slower than a compiled language. To solve this deficiency,MATLAB offers a compilation of scripts that can improve performance.

    Oppositely, compiled languages like C++ should be faster. Free libraries providing rou-tines for mathematical methods are available and therefore, it is not necessary to code and

    3

  • optimize these procedures. All these various computational methods and implementations areinvestigated in this contribution.

    Klcova slova

    rozmerova diskretn optimalizace, prklady konstrukc pro optimalizaci, prme a iteracnresice, plna a rdka matice tuhosti, implementace

    Keywords

    sizing discrete optimization, benchmarks, direct and iterative methods, dense and sparsestiffness matrix, implementation

    1 Uvod

    V dnesn dobe se poctacovy vykon da vyuzt na ledacos. Jednou z moznych uloh provyuzit tohoto vykonu jsou optimalizacn metody. Tyto metody se daj vyuzt ve stavebnictvk nalezen vhodnych skladeb profilu pro jednotlive konstrukcn prvky. Jednotlive profily muzedodat prmo vyrobce, proto maj tyto ulohy realne vyuzit a investorovi mohou usetrit mnohopenez.

    Nase pozornost je tedy zamerena na tzv. rozmerovou optimalizaci konstrukc. Clem jenajt prcne rezy prhradove konstrukce tak, aby byla minimalizovana hmotnost konstrukce,ale aby byla zaroven splnena jista omezen, nejcasteji limitn napet a posuny. Specialnpodtrdou jsou prklady tzv. diskretn, kde prcne rezy nabyvaj jen diskretnch hodnot, ob-vykle z predem daneho seznamu.

    Pro spusten optimalizacn ulohy je treba nalezt vhodne vypocetn metody. Jednak metody,ktere res vnitrn sly respektive napet na konstrukci (napr. deformacn metoda, metodakonecnych prvku apod.) a tez pouzite matematicke metody pro resen soustav linearnch al-gebraickych rovnic (napr. Gaussova metoda, Choleskeho dekompozice, LDLT rozklad, metodanejvetsho spadu, metoda sdruzenych gradientu, Jakobiho metoda atd.). Tyto vypocetnmetody se pak pouzij v sestavovanych algoritmech. U kazdeho algoritmu je potreba overitjeho spravnost a zajistit jeho moznou aplikaci na ostatn konstrukce. Pro implementaci jevhodne pouzt dostatecne male, ale zaroven reprezentativn konstrukce, tzv. benchmarky.

    Clem teto prace je zoptimalizovat jednotlive implementovane kody a prozkoumat jejichefektivnost, tedy dobu vypoctu. Kratky vypocetn cas je nezbytny ke spusten optimalizacnulohy. Vhodne upravy kodu vsak nejsou dulezite jen pro tuto ulohu, ale i pro vsechny ulohyostatn. Spravny kod by mel vzdy trvat co nejkrats dobu a zabrat pokud mozno co nejmenepameti.

    Pro implementaci se daj pouzt ruzne programovac jazyky. V teto praci bude zvolenoprostred MATLAB, ktere nabz krome interpretovaneho jazyka i mnozstv knihoven funkc,tzv. toolboxu, nastroju pro pomoc s optimalizac kodu, tzv. profileru, a tez je mozne vyuztnastroj pro kompilaci kodu do samostatne spustitelne aplikace, coz by mohlo znamenat znacneurychlen vypoctu. Pro porovnan bude zvolen jeste dals programovac jazyk, tentokrat kom-pilovany, a to C/C++.

    4

  • 2 Optimalizace stavebnch konstrukc

    Dle prof. Stevena [Steven, 2003] existuje nekolik druhu optimalizace konstrukc:Topologicka optimalizace (Topology optimization) se zabyva hledanm tvaru konstrukce,

    kdyz predem nezname jej presny tvar. Zname ale prostred (jako napr. umsten podpor),optimalizacn kriteria (napr. hmotnost konstrukce) a omezen [Sigmund and Bends, 2003].

    U optimalizace tvaru (Shape optimization) zname dopredu topologii konstrukce, ovsemproblemy muze delat cast konstrukce nebo jej detail. Snahou je zde najt optimaln tvar, abybyla zajistena nejleps distribuce napet v inkriminovanem mste [Leps, 2004].

    U rozmerove optimalizace (Size optimization) mame predem znamou sadu ploch prcnychprurezu, tvar konstrukce a prostred. Clem je zkombinovat prurezy tak, aby byly dodrzenyurcite predem dane omezujc podmnky (maximaln deformace konstrukce, maximaln napetapod.) za minimalizace vahy, a tudz i celkove ceny spotrebovaneho materialu. Rozmerovaoptimalizace muze byt spojita a diskretn.

    Optimalizace skladby (Layout optimization) je specialnm typem rozmerove optimalizace.Pokud se blz prurezova plocha prvku nulove hodnote, pak tento prvek nemus byt v kon-strukci vubec pouzit [Kirsch, 1995].

    V teto praci se budeme zabyvat pouze diskretn rozmerovou optimalizac, kdy ze sadyploch prcnych prurezu budeme poctat deformace konstrukce a vnitrn osove sly, resp. napetna jednotlivych prutech. Jelikoz pro aplikace optimalizacnch metod bude nutno spoctatmnoho variant kombinac prcnych rezu, je vhodne najt pro podobne typy konstrukc ne-jrychlejs vypocetn postupy, aby bylo vubec realne tyto optimalizacn metody pouzt. Prohledan vhodnych postupu bude pouzito programu MATLAB a programovacho jazyka C++.

    3 Implementace v programu MATLAB

    3.1 Moznosti ulozen matice

    Jelikoz hledame nejrychlejs vypocetn postup, i zpusob ulozen matice by nam mohlovlivnit cas vypoctu. Matice se da ulozit jako plna, rdka, diagonaln, trojuhelnkova a podobne.

    Matice tuhosti konstrukce je pasova [Bittnar, 1983], obsahuje tedy mnoho nulovych prvku.MATLAB v plne matici uklada nulu jako ostatn csla, kdy toto ulozen pak zbytecne zabramnoho pameti navc. Plna matice ma tedy na kazde jej pozici zachovane cslo, kdezto rdkamatice uklada pouze nenulove prvky a jejich pozice [The MathWorks, 2010a].

    Dale vme, ze matice tuhosti konstrukce je symetricka [Patzak, 2009], a proto by dalsalternativou mohlo byt ulozen matice jako trojuhelnkove.

    3.2 Moznosti sestaven globaln matice tuhosti

    Program MATLAB vsak nabz ruzne moznosti sestaven globaln matice tuhosti. Naobrazku 1 je nakreslena dvouprutova konstrukce, ke ktere jsou definovany charakteristikymaterialu, topologie i okrajove podmnky. K teto uloze budou nasledne predvedeny kod projednotlive zpusoby sestaven globalnch matic tuhosti.

    3.2.1 Lokalizace pres kodova csla s adresovanm radku a sloupcu

    Jako prvn si ukazeme lokalizaci pres kodova csla za pomoci adresovan radku a sloupcujednotlivych elementu. Tm nam vypadnou dva for cykly pri sestavovan. Na zacatku definu-

    5

  • 10 kN 5 kN(1) (2)

    1 2 3E = 210 109 Pa,A = 0.01 m2,

    l = 4m

    E = 210 109 Pa,

    l = 5m

    A = 0.02 m2,

    Obrazek 1: Dvouprutova prhradova konstrukce se zadanymi okrajovymi podmnkami

    jeme Younguv modul pruznosti Emod, prurezove plochy A, zacatecn inode a koncove jnodeuzly prutu a x-ove souradnice uzlu x. Jelikoz mame konstrukci orientovanou pouze v ose x,nen treba definovat souradnice y-ove a z-ove. Globaln matici tuhosti sestavme tak, ze sivygenerujeme matici nul o rozmeru numnod numnod, kde numnod je delka vektoru x. Je-likoz MATLAB um adresovat radky a sloupce, stac nam vybrat jednotlive radky a sloupceglobaln matice tuhosti za pomoci Stiff(n,n) a na tyto pozice pak pricst lokaln maticituhosti k o stejnem rozmeru. Nakonec muzeme celou matici pro nazornost vypsat pomocStiff.

    Ukazka indexovan radku a sloupcu:

    1 >> A=magic(4)

    2 A =

    3 16 2 3 13

    4 5 11 10 8

    5 9 7 6 12

    6 4 14 15 1

    7 >> B=A([1 3],[1 3])

    8 B =

    9 16 3

    10 9 6

    Kod MATLABu: Lokalizace pres kodova csla s adresovanm radku a sloupcu na konstrukciz obrazku 1:

    1 % Zadan parametru konstrukce

    2 Emod =[210*10^6 210*10^6];

    3 Area =[0.01 0.02];

    4 inode =[1 2];

    5 jnode =[2 3];

    6 x =[0 4 9];

    7 % Sestaven kodovych csel

    8 ij=[inode,jnode]; ij = 1 2

    9 2 3

    10

    11 % Umsten lokaln matice tuhosti prutu do globaln matice tuhosti konstrukce

    12 numnod=length(x); numnod = 3

    13 numelm=length(Area); numelm = 2

    14 Stiff=zeros(numnod);

    15

    16 for m=1:numelm,

    17 % Sestaven lokaln matice tuhosti jednotlivych prutu

    18 i=inode(m)

    6

  • 19 j=jnode(m)

    20 L=abs(x(j)-x(i))

    21 k=Area(m)*Emod(m)/L*[1,-1;-1,1]

    22

    23 n=ij(m,:)

    24 Stiff(n,n)=Stiff(n,n)+ k

    25 end

    26

    27 % Mezivysledky for cyklu

    28 m = 1: m = 2:

    29 i = 1 i = 2

    30 j = 2 j = 3

    31 L = 4 L = 5

    32 k = 525 000 -525 000 k = 840 000 -840 000

    33 -525 000 525 000 -840 000 840 000

    34 n = 1 2 n = 2 3

    35

    36 Stiff = 525 000 -525 000 0 Stiff = 525 000 -525 000 0

    37 -525 000 525 000 0 -525 000 1 365 000 -840 000

    38 0 0 0 0 -840 000 840 000

    39

    40 % Vypsan matice tuhosti konstrukce

    41 Stiff

    42 Stiff = 525 000 -525 000 0

    43 -525 000 1 365 000 -840 000

    44 0 -840 000 840 000

    3.2.2 Lokalizace pres kodova csla se tremi for cykly

    Dalsm zpusobem sestaven globaln matice tuhosti je lokalizac za pomoci tr do sebevnorenych for cyklu. Tento zpusob je vhodny pro programovac jazyk C, jelikoz C neumadresovat jednotlive slozky vektoru a matice tak jako MATLAB. Pro porovnan s predchozmzpusobem si nyn ukazeme, jak bude takovy kod pod MATLABem vypadat. Opet si definujemeYounguv modul pruznosti Emod, prurezove plochy A, zacatecn inode a koncove jnode uzlyprutu a x-ove souradnice uzlu x. Sestavme si matici kodovych csel ij a vygenerujeme maticinul o rozmeru numnod numnod, do ktere budeme postupne nactat pres radky (for cykluss promennou m) a sloupce (for cyklus s promennou j) jednotlive prvky lokalnch matic tuhostik (for cyklus s promennou i) na pozice urcene z matice kodovych csel ij. Tmto zskameglobaln matici tuhosti, kterou si opet muzeme vypsat za pomoci Stiff.

    1 % Zadan parametru konstrukce

    2 Emod =[210*10^6 210*10^6];

    3 Area =[0.01 0.02];

    4 inode =[1 2];

    5 jnode =[2 3];

    6 x =[0 4 9];

    7

    8 % Sestaven kodovych csel

    9 ij=[inode,jnode]; ij = 1 2

    10 2 3

    11

    12 % Umsten lokaln matice tuhosti prutu do globaln matice tuhosti konstrukce

    13 numnod=length(x); numnod = 3

    14 numelm=length(Area); numelm = 2

    15 numdis=2; 1

    7

  • 16 Stiff=zeros(numnod);

    17 Length=abs(x(jnode)-x(inode));

    18

    19 for i=1:numelm

    20 k=Area(i)*Emod(i)/Length(i)*[1,-1;-1,1]

    21 for j=1:numdis

    22 for m=1:numdis

    23 Stiff(ij(i,j),ij(i,m))=Stiff(ij(i,j),ij(i,m))+k(j,m)

    24 end

    25 end

    26 end

    27

    28 % Mezivysledky for cyklu

    29 i = 1: i = 2:

    30 k = 525 000 -525 000 k = 840 000 -840 000

    31 -525 000 525 000 -840 000 840 000

    32 j = 1: j = 1:

    33 m = 1: m = 1:

    34 Stiff = 525 000 0 0 Stiff = 525 000 -525 000 0

    35 0 0 0 -525 000 1 365 000 0

    36 0 0 0 0 0 0

    37 m = 2: m = 2:

    38 Stiff = 525 000 -525 000 0 Stiff = 525 000 -525 000 0

    39 0 0 0 -525 000 1 365 000 -840 000

    40 0 0 0 0 0 0

    41 j = 2: j = 2:

    42 m = 1: m = 1:

    43 Stiff = 525 000 -525 000 0 Stiff = 525 000 -525 000 0

    44 525 000 0 0 -525 000 1 365 000 -840 000

    45 0 0 0 0 -840 000 0

    46 m = 2: m = 2:

    47 Stiff = 525 000 -525 000 0 Stiff = 525 000 -525 000 0

    48 525 000 -525 000 0 -525 000 1 365 000 -840 000

    49 0 0 0 0 -840 000 840 000

    50

    51 % Vypsan matice tuhosti konstrukce

    52 Stiff

    53 Stiff = 525000 -525000 0

    54 -525000 1365000 -840000

    55 0 -840000 840000

    3.3 Parametricke vyjadren matice

    V kapitole 2 bylo zmneno, ze budeme pravdepodobne nuceni spoctat vsechny vari-anty kombinac prurezovych ploch na vsech prutech, abychom obdrzeli optimaln vysledek.Budeme tedy stale dokola sestavovat matici tuhosti konstrukce, poctat nezname posunya reakce a nasledne napet v prutech nebo vnitrn sly v nich (zalez na zadanych omezujcchpodmnkach). Pokud budeme sestavovat matici tuhosti cselne, mohlo by to byt zbytecnecasove narocne. Jelikoz ma ale MATLAB symbolicky toolbox (Symbolic Math Toolbox), kteryumoznuje sestavit parametricky zapis a pote s nm dale pracovat, muzeme si matici tuhosti,vektor neznamych posunu a vektor napet pro danou konstrukci sestavit dopredu a pak uzjen do tohoto zapisu dosazovat pri hlavnm behu optimalizace.

    1Promenna numdis urcuje pocet moznych posunu a pootocen na prutu.

    8

  • Pro nazornost si muzeme ukazat, jak by aplikace parametrickeho zapisu mohla vypadatpri sestaven matice tuhosti na prkladu dvouprutove konstrukce vyobrazene na obrazku 1.Jako nejvhodnejs parametr k pouzit se jev tuhost jednotlivych prutu ki. Bylo by moznepouzt naprklad i plochu A.

    1 % Zadan parametru konstrukce

    2 Area =[0.01 0.02];2

    3 inode =[1 2];

    4 jnode =[2 3];f

    5 x =[0 4 9];

    6

    7 % Sestaven kodovych csel

    8 ij=[inode,jnode]; ij = 1 2

    9 2 3

    10

    11 % Zaveden parametru pro vypocet pomoc symbolickeho toolboxu

    12 syms k1 k2 real

    13 ki = [k1 k2];

    14

    15 % Umsten lokaln matice tuhosti prutu do globaln matice tuhosti konstrukce

    16 numnod=length(x); numnod = 3

    17 numelm=length(Area); numelm = 2

    18 Stiff=sym(zeros(numnod));3

    19

    20 for m=1:numelm,

    21

    22 % Sestaven lokaln matice tuhosti jednotlivych prutu

    23 i=inode(m)

    24 j=jnode(m)

    25 k=ki(m)*[1,-1;-1,1]

    26

    27 n=ij(m,:)

    28 Stiff(n,n)=Stiff(n,n)+ k

    29 end

    30

    31 % Mezivysledky for cyklu

    32 m = 1: m = 2:

    33 i = 1 i = 2

    34 j = 2 j = 3

    35 k = k1 -k1 k = k2 -k2

    36 -k1 k1 -k2 k2

    37

    38 Stiff = k1 -k1 0 Stiff = k1 -k1 0

    39 -k1 k1 0 -k1 k1+k2 -k2

    40 0 0 0 0 -k2 k2

    Nyn mame matici tuhosti v parametrickem zapisu a muzeme ji pouzt do noveho skriptu. Don pak dosazujeme ze sady ploch, coz pro nas bude jedina promenna.

    1 % Zadan parametru konstrukce

    2 Emod = 210*10^6;

    3 Area =[0.01 0.02];

    4 Length=[4 5]; 4

    5

    2Plochy prcnych prurezu jsou potreba pro vypocet poctu prvku konstrukce.3Symbolicky definujeme nulovou matici.

    9

  • 6 % Vypocet tuhosti prutu

    7 ki=Emod*Area./Length;

    8

    9 % Matice tuhosti a dosazen do n

    10 Stiff = [ ki(1), -ki(1), 0; ... Stiff = 525000 -525000 0

    11 -ki(1), ki(1)+ki(2), -ki(2); ... -525000 1365000 -840000

    12 0, -ki(2), ki(2)] 0 -840000 840000

    3.4 Moznosti resen soustavy rovnic

    Resen soustavy linearnch rovnic je jednm z nejvetsch problemu na poli technickychvypoctu [The MathWorks, 2010a]. MATLAB umoznuje poctat tyto soustavy rovnic nekolikazpusoby.

    3.4.1 Klasicke resen X = A \BVezmeme soustavu A X = B. Matematicky nejjednoduss resen je pomoc inverzn ma-

    tice A1, kdy dostaneme zapis X = A1 B. Sestaven inverzn matice je ale zdlouhavea vede k zaokrouhlovacm nepresnostem. Proto je v prostred MATLAB daleko snadnejspouzt operator zpetneho lomtka (backslash operator), kde se inverzn matice nepocta. Pakdostaneme resen ze zapisu X = A \B [The MathWorks, 2010a].

    Algoritmus zpetneho lomtka zalez na typu matic A a B. Pro prpad plne symetrickematice A se vektor X spocta Choleskeho dekompozic, pro pasovou symetrickou rdkoumatici se pro vypocet vektoru X pouzije specialn pasovy resic v zavislosti na srce pasu[The MathWorks, 2010c].

    3.4.2 LU faktorizace

    LU faktorizace rozloz matici A na horn U a doln L trojuhelnkovou matici tak, zeA = L U [Bubenk et al., 1997].

    uik = aik i1j=1

    lij ujk pro i = 1, . . . , k, (1)

    lik =1ukk (aik

    k1j=1

    lij ujk) pro i = k + 1, . . . , n, (2)

    Jelikoz symbolicky toolbox nepodporuje funkci lu, je nutno pro rozklad matice A na hornU a doln L trojuhelnkovou matici sestavit kod pomoc for a if cyklu.

    1 for k=1:m

    2 if k==1

    3 for I=1:m

    4 U(k,I)=KK(k,I);

    5 L(I,k)=KK(I,k)/U(k,k);

    6 end

    7 else

    8 for I=1:m

    4Konstrukce se nemen, nen proto problem pouzt jiz predem vypoctane delky.

    10

  • 9 U(k,I)=KK(k,I)-sum(L(k,1:k-1)*U(1:k-1,I));

    10 end

    11 for I=1:m

    12 L(I,k)=(KK(I,k)-sum(L(I,1:k-1)*U(1:k-1,k)))/U(k,k);

    13 end

    14 end

    15 end

    Pote se provede substituce y = U x a nasledne se res soustavy y = L1 b a x = U1 y:

    A x = b | A = L U, (3)L U x = b | y = U x, (4)

    L y = b, (5)y = L1 b, (6)x = U1 y. (7)

    Pokud blze prozkoumame vyse uvedeny kod, zjistme, ze pro vypocet prvku L(I,k)musme provest delen prvkem U(k,k). V parametrickem zapisu tak budou vznikat v oboumaticch U i L velice dlouhe zapisy prvku.

    3.4.3 Choleskeho dekompozice

    Choleskeho dekompozice slouz pro rozklad na horn R a doln trojuhelnkovou matici,kde doln trojuhelnkova matice je transponovana horn trojuhelnkova RT . Matice A musbyt symetricka a pozitivne definitn 5 [Bubenk et al., 1997], [The MathWorks, 2010a].

    Jednotlive prvky pri rozkladu z matice A na doln trojuhelnkovou matici L muzemevyjadrit dle [Svacek and Feistauer, 2006] jako:

    r11 =a11, (8)

    ri1 =ai1r11

    pro i = 2, , n, (9)

    rjj =

    ajj j1k=1

    r2jk, pro j = 2, , n, (10)

    rij =1rjj (aij

    j1k=1

    rik rjk) pro i = j + 1, , n. (11)

    Resen pak dostaneme z:

    A x = b | A = RT R, (12)RT R x = b, (13)

    x = R1 ((RT )1 b). (14)

    Dle kapitoly 3.4.1 ale nen nutne inverzn matice poctat. V MATLABu muzeme vyjadrit(14) jako:

    x = R \ (RT \ b). (15)5Pozitivne definitn matice je takova, ktera ma vsechny prvky na diagonale kladne a ostatn prvky v matici

    nejsou nekolikanasobne vets.

    11

  • Jak je videt, Choleskeho dekompozice je v podstate zvlastnm prpadem LU faktorizace,pricemz ukladame jen horn trojuhelnkovou matici R, coz je jiste vyhodou. Zde je problememodmocnina v prvcch matice rjj a delen v prvcch rij , stejne jako v LU faktorizaci popsanev 3.4.2.

    V programu MATLAB se da pouzt pro Choleskeho dekompozici funkce chol.

    3.4.4 LDLT rozklad

    Dalsm zpusobem, jak resit soustavu rovnic A x = b je LDLT rozklad, kde L je dolntrojuhelnkova matice a D je diagonaln matice. Jednotlive prvky matic zskame takto:

    lij =1djj (aij

    j1k=1

    lik dkk ljk), (16)

    dii = aii i1k=1

    l2ik dkk. (17)

    Resen pak dostaneme podle [Jirousek, 2006] takto:

    A x = b | A = L D LT , (18)L D LT x = b. (19)

    Pouzijeme-li pomocny vektor b, pro ktery plat L b = b, pak

    L D LT x = L b, (20)D LT x = b, (21)

    LT x = D1b. (22)

    Inverzn matice matice diagonaln D1 ma na nenulovych prvcch prevracenou hodnotuprvku matice diagonaln D. Jelikoz je LT horn trojuhelnkova matice, posledn rovnice sous-tavy je tedy rovnice o jedne nezname. Ostatn nezname zskame zpetnou substituc.

    Symbolicky toolbox MATLABu opet funkci ldl nepodporuje. Resen muzeme zskat na-prklad takto:

    1 for j=1:n

    2

    3 if(j==1)

    4 for i=j:n

    5 D(j,j)=K(j,j);

    6 L(i,j)=K(i,j)/D(j,j);

    7 end

    8

    9 elseif(j

  • 3.4.5 Metoda sdruzenych gradientu

    Metoda sdruzenych gradientu je jednou z iteracnch metod. To znamena, ze nehledamepresne analyticke vyjadren resen, ale snazme se iteracemi ke spravnemu resen priblizovat.Pocet iteracnch kroku pak ovlivn presnost zskaneho resen.

    Mame soustavu rovnic A x = b, kde A je symetricka, pozitivne definitn matice. Odvozenteto metody je mozno nalezt v mnoha zdrojch, [Ralston, 1978], [Shewchuk, 1994]. My zdeuvedeme algoritmus vypoctu dle [Svacek and Feistauer, 2006].

    Na pocatku volme d0 = r0 = b A x0 a vektor x0. Tento vektor muze byt bud nulovy,nebo muzeme vyuzt predpodmnen a zvolit ho tak, abychom dosahli vets rychlosti resen.Pokud je vsak x0 zvolen spatne, muze nam pocet iterac vedouc na spravny vysledek zvysit.

    Pro k = 0, 1, 2, , n pak:

    k =(rk)T dk

    (dk)T A dk , (23)

    xk+1 = xk + k dk, (24)rk+1 = bA xk+1, (25)

    k =(rk+1)T A dk(dk)T A dk . (26)

    dk+1 = rk+1 k dk, (27)

    Vysledne resen xk+1 zskame z rovnice 24. Hodnota k z rovnice 23 vyjadruje optimalnkrok ve smeru dk. Smery dk volme tak, aby byly A-ortogonaln, tzn. aby platilo, ze dTi Adj =0 pro i 6= j, coz zarucuje rovnice 27. Reziduum rk+1 je urceno vztahem 25 a vyjadruje, jakdaleko jsme od spravne hodnoty vektoru b [Shewchuk, 1994]. Volba k zarucuje A-ortogonalitudk+1 vuci dk.

    V MATLABu muzeme pro tento zpusob vypoctu pouzt funkci pcg. Prkaz pak budevypadat takto: X = pcg(A,B,TOL,MAXIT,M1,M2,X0), kde X je resen soustavy rovnic (pronas Disp), A je matice (pro nas matice tuhosti konstrukce Stiff), B je prava strana soustavyrovnic (pro nas vektor zatzen f), TOL je tolerance vypoctu (lze zadat [] pro vychoz hodnotu1e-6), MAXIT je maximaln pocet iterac (lze zadat [] pro vychoz hodnotu min(N,20)), M1,M2, X0 se pouzva pro predpodmnen (pro nulove hodnoty lze zadat []).

    3.5 Kompilace do samostatne spustitelneho souboru

    Ne kazdy uzivatel, ktery chce pouzvat nami vytvorene kody, ma nainstalovane prostredMATLAB. Proto vyvinula spolecnost The MathWorks nastroj zvany MATLAB Compiler,ktery umoznuje vytvorit samostatne spustitelne aplikace *.exe nebo knihovny jazyka C a C++.Ke spusten aplikac mimo prostred MATLAB pak stac nainstalovat MCR (MATLAB Com-piler Runtime) pomoc volne siritelneho instalacnho souboru MCRinstaller.exe. V taktovytvorenych aplikacch ovsem nemuze byt kod MATLABu viden, neda se tedy ani upravo-vat. Je-li potreba cokoliv v aplikaci vytvorene Compilerem zmenit, mus se provest editacev puvodnm m-file a znovu ho zkompilovat.

    Jsou dve varianty kompilace souboru. Bud lze pouzt vestaveneho nastroje, nebo provestkompilaci prmo z prkazoveho radku v Command Window [The MathWorks, 2010b]. Prvnezmnena varianta pouzva nastroj Deployment Tool, ktery se da spustit pomoc zapisu prkazu

    13

  • deploytool do prkazoveho radku v Command Window. Kompilace probha v techto krocch:Nejdrve je treba sestavit m-file, ktery chceme kompilovat, a otestovat jeho funkcnost. Dale jetreba vytvorit samostatnou aplikaci (pomoc tlactka Build) a k n pribalit potrebne knihovny(prpadne i MCRinstaller.exe, pomoc tlactka Package). Pro overen funkcnosti zkompilovaneaplikace je vhodne ji spustit.

    Druhou variantou je kompilace za pomoci prkazu mcc, ktera ovsem nenabz moznostpribalen instalacnho souboru MCRinstaller.exe. Bez nej nen mozne aplikaci mimo pro-stred MATLAB spustit, jelikoz jsou vyuzvany jeho knihovny. Instalacn soubor vsak lzestahnout z webovych stranek spolecnosti The MathWorks. Je vsak zapotreb uvest verzikompilatoru, ktera je pouzvana. Lze zkompilovat bud samostatny m-file pomoc zapisumcc -m nazev_souboru.m, nebo prpadne nekolik souboru, ktere jsou na sebe vazane, tzn.ze jeden m-file vola druhy, naprklad pomoc function. Toto se provede pomoc zapisumcc -m nazev_hlavnho_souboru.m -a nazev_ podruzneho_souboru.m.

    4 Implementace v jazyce C++

    Prostred MATLAB je sice uzivatelsky velmi prjemne, nebot obsahuje velke mnozstv tool-boxu a obsahlou napovedu, pouzva vsak interpretovany jazyk a ten by mel byt pomalejs nezjazyk kompilovany. V interpretovanem jazyce se preklada kazda radka za behu skriptu, v kom-pilovanem jazyce se kontrola spravnosti syntaxe a preklad dej jeste pred spustenm. Kom-pilovany jazyk je zase narocnejs na spravnou syntaxi zapisu a inicializaci vsech promennychpred jejich naslednym uzitm.

    Pro editovan kodu byl pouzit editor Eclipse [CDT Community, 2010], pro preklad kom-pilator MinGW [MinGW team, 2010]. Jak editor, tak prekladac jsou poskytovany jako free-ware.

    MATLAB nabz prevod symbolickeho kodu do syntaxe C/C++ pomoc prkazu ccode.Tento prkaz zaroven zajist preindexovan jednotlivych prvku pole z 1 az n prvku na 0az (n-1) prvku. To je znacna vyhoda, nebot odpada zdlouhave prepisovan, jsou-li jiz kodypro MATLAB hotove. I my jsme tohoto prkazu pouzili pro prevod jednotlivych paramet-ricky vyjadritelnych cast skriptu. Stejne tak jako v MATLABu, i zde je nutne zamysletse nad resenm soustavy rovnic Stiff*Disp=f. Resic pro plne vyjadren matice tuhosti bylprevzat od doc. Kruise (LDLT rozklad) [Jaroslav Kruis a kolektiv, 2010]. Dalsm zpusobemvyresen soustavy rovnic je pouzit volne dostupne knihovny LAPACK++ (zde pouzita LUfaktorizace). Poslednm v praci pouzitym prostredkem je resic ing. Vondracka FEMCad[Vondracek, 2008a].

    LAPACK++ (Linear Algebra PACKage in C++) je rozsren knihovny LAPACKu doC++ [Dongarra et al., 1996]. LAPACK je napsany v jazyce Fortran90 a daj se s nm resitbezne ulohy numericke linearn algebry, napr. resen soustav linearnch rovnic, problem vlast-nch csel a podobne [Anderson et al., 1999]. LAPACK je uzpusoben k tomu, aby provadelvypocty rychle a efektivne. Je to standard, ktery vyuzvaj i mnohe komercn programy, jakoje MATLAB nebo Mathematica.

    Pro praci s knihovnou LAPACK++ je nutno si uvedomit, ze matici nebudeme zadavatjako prvky pole v zapisu jazyka C++, ale podobne jako prvky pole v jazyce Fortran. Nejprve jenutno si celou matici deklarovat. Pro plnou matici je mozno vyuzt zapisu, ktery nam vytvorobjekt A, LaGenMatDouble A(M,N), kde A je nazev matice a M N je jej rozmer. Jednotliveprvky matice se pak nactaj pomoc A(i,j), rozsah (i,j) je 0 i < M a 0 j < N .

    14

  • Jednotlive prvky se tedy neindexuj podle standardu jazyka Fortran, ale podle jazyka C.Vektor se muze deklarovat pomoc LaVectorDouble x(N). Po deklaraci matice a vektorua definici zname matice A a vektoru prave strany b lze pouzt funkci LaLinearSolve(A,x,b);k vyresen neznameho vektoru resen x [Dongarra et al., 1996].

    Pro nazornost uvedme maly prklad.

    1 #include

    2 int main() {3 int N = 2;

    4 LaGenMatDouble A(N, N);

    5 LaVectorDouble x(N), b(N);

    6

    7 A(0, 0) = 1.0;

    8 A(0, 1) = 2.0;

    9 A(1, 0) = 3.0;

    10 A(1, 1) = 4.0;

    11 b(0) = 17;

    12 b(1) = 39;

    13

    14 LaLinearSolve(A,x,b);

    15 return 0;

    16 }

    Pokud chceme na terminalu videt vstupy a vystupy, nen problem vse vypsat naprkladpomoc for cyklu a printf().

    FEMCad [Vondracek, 2008a] je resic soustavy linearnch rovnic pro rdke matice vyvinutying. Vondrackem. Po zadan matice se nejprve provede analyza jejho typu, aby se mohloprovest optimaln preusporadan do vhodneho tvaru a mohl se vybrat vhodny resic. Jelikozje matice tuhosti symetricka, stac ulozit do pameti jen jej polovinu. Vhodne je tez pouztmetodu kompresovanych radku, kde ulozme hodnoty jednotlivych prvku doln trojuhelnkovematice, jejich sloupcove indexy a pozici prvku ve vektoru hodnot, kde zacna novy radekmatice [Vondracek, 2008b].

    5 Pouzite benchmarky

    K testovan vypocetnch metod bylo zapotreb vybrat nekolik vhodnych modelu kon-strukc. Byla snaha vybrat takove modely, ktere uz drve byly spoctany a ke kterym exis-tuj vysledky k porovnan presnosti. Proto jsme zvolili ctyri nejvce pouzvane. Jedna seo desetiprutovou prhradovou konzolu ve 2D, dvacetipetiprutovou prhradovou vez ve 3D,padesatidvouprutovou prhradovou konstrukci ve 2D a sedmdesatidvouprutovou prhradovoukonstrukci ve 3D. Tyto konstrukce jsou pouzvany i v [Lemonge and Barbosa, 2003].

    5.1 Desetiprutova prhradova 2D konzola

    Tato konstrukce byla poprve zverejnena Venkayyou v clanku [Venkayya, 1971]. Konstrukcebyla resena spojitou rozmerovou optimalizac. Prvnho prpadu diskretn rozmerove optima-lizace se nam bohuzel dopatrat nepodarilo, ale nejstars clanek, ktery mame k dispozicia ktery tuto konstrukci zminuje, je [Cai and Thierauf, 1996]. Pouzite charakteristiky ma-terialu konstrukce, omezujc podmnky a zatzen konstrukce jsou v tabulce 1, konstrukce

    15

  • 1 2

    8 10

    3 4

    7 95 6

    360 in 360 in

    5 3 1

    6 4 2P P

    y

    x

    360

    in

    Obrazek 2: 10-prutova prhradova 2D konzola

    Material: hlinkObjemova hmotnost: 0,1 lb/in3

    Younguv modul pruznosti E: 107 psiLimitn napet: 25 000 psiLimitn posun: 2 inZatzen P: 100 kips

    Tabulka 1: Charakteristiky materialu a omezujc a okrajove podmnky 10-prutove konzoly

    je vyobrazena na obrazku 2. Sada testovacch ploch prcnych prurezu obsahuje tyto hod-noty (v in2): 1,62, 1,80, 1,99, 2,13, 2,38, 2,62, 2,63, 2,88, 2,83, 3,09, 3,13, 3,38, 3,47, 3,55,3,63, 3,84, 3,87, 3,88, 4,18, 4,22, 4,49, 4,59, 4,80, 4,97, 5,12, 5,74, 7,22, 7,97, 11,50, 13,50,13,90, 14,20, 15,50, 16,00, 16,90, 18,80, 19,90, 22,00, 22,90, 26,50, 30,00, 33,50. Tato vstupndata byla prevzata z [Lemonge and Barbosa, 2003]. Chteli jsme dosahnout co nejpresnejshoporovnan, proto jsme zamerne nechali tyto hodnoty v puvodnch anglosaskych jednotkach.Prehled vsech techto jednotek vcetne prevodu do SI soustavy naleznete v prloze A.

    5.2 Dvacetipetiprutova prhradova 3D vez

    Dle [Venkayya, 1971] byla tato konstrukce poprve zverejnena Foxem a Schmitem ve clanku[Fox and Schmit, 1966]. Nejstars nami objeveny clanek uverejnujc tuto konstrukci s diskret-nmi promennymi je z roku 1995 [Wu and Chow, 1995a]. Konstrukce je znazornena na obrazku3, charakteristiky materialu jsou uvedene v tabulce 3 a zatzen konstrukce naleznete v tabulce4. Jednotlive plochy prcnych prurezu byly vybrany z teto mnoziny (v in2): 0,1, 0,2, 0,3, 0,4,0,5, 0,6, 0,7, 0,8, 0,9, 1,0, 1,1, 1,2, 1,3, 1,4, 1,5, 1,6, 1,7, 1,8, 1,9, 2,0, 2,1, 2,2, 2,3, 2,4, 2,5, 2,6,2,8, 3,0, 3,2, 3,4 uverejnene ve clanku [Wu and Chow, 1995b]. Tato konstrukce je symetricka,proto byly jednotlive pruty sdruzeny do skupin, ktere muzete nalezt v tabulce 2.

    5.3 Padesatidvouprutova prhradova 2D konstrukce

    Nejstars clanek, ktery mame k dispozici a ktery tuto konstrukci zkouma a popisuje,je [Wu and Chow, 1995b]. Sada ploch prcnych prurezu prutu byla pro vypocet pouzita dle[Giger and Ermanni, 2006]. Jedna se o tuto mnozinu: 71,613, 90,968, 126,451, 161,290, 198,064,

    16

  • 1

    2

    34

    5

    8

    6

    7

    10

    9

    75

    z

    100

    100

    x

    y200200

    Obrazek 3: 25-prutova prhradova 3Dkonstrukce veze

    Skupina Pripojen prutu k uzlumA1 1-2A2 1-4, 2-3, 1-5, 2-6A3 2-5, 2-4, 1-3, 1-6A4 3-6, 4-5A5 3-4, 5-6A6 3-10, 6-7, 4-9, 5-8A7 3-8, 4-7, 6-9, 5-10A8 3-7, 4-8, 5-9, 6-10

    Tabulka 2: Sdruzen ploch prcnychprurezu do skupin (25-prutova kon-strukce)

    Material: hlinkObjemova hmotnost: 0,1 lb/in3

    Younguv modul pruznosti E: 107 psiLimitn napet: 40 000 psiLimitn posun: 2 in

    Tabulka 3: Charakteristiky materialua omezujc podmnky 25-prutove veze

    Uzel Fx Fy Fz1 1,0 -10,0 -10,02 0 -10,0 -10,03 0,5 0 06 0,6 0 0

    Tabulka 4: Zatzen 25-prutovekonstrukce v kip jednotkach

    252,258, 285,161, 363,225, 388,386, 494,193, 506,451, 641,289, 645,160, 792,256, 816,773,940,000, 1 008,385, 1 045,159, 1 161,288, 1 283,868, 1 374,191, 1 535,481, 1 690,319, 1 696,771,1 858,061, 1 890,319, 1 993,544, 2 019,351, 2 180,641, 2 238,705, 2 290,318, 2 341,191, 2 477,414,2 496,769, 2 503,221, 2 696,769, 2 722,575, 2 896,768, 2 961,284, 3 096,768, 3 206,445, 3 303,219,3 703,218, 4 658,055, 5 141,925, 5 503,215, 5 999,998, 6 999,986, 7 419,340, 8 709,660, 8 967,724,9 161,272, 9 999,980, 10 322,560, 10 903,204, 12 129,008, 12 838,684, 14 193,520, 14 774,164,15 806,420, 17 096,740, 18 064,480, 19 354,800, 21 612,860 (v mm2). Konstrukce je vyobrazenana obrazku 4, charakteristiky materialu a omezujc podmnky jsou uvedeny v tabulce 6a zatzen naleznete v tabulce 7. Konstrukce je opet symetricka, proto jsou plochy sdruzenydo skupin, ktere jsou uvedeny v tabulce 5 [Lemonge and Barbosa, 2003].

    5.4 Sedmdesatidvouprutova prhradova 3D konstrukce

    Konstrukce na obrazku 5 byla poprve uverejnena dle [Venkayya, 1971] Venkayyou, Knotema Reddym v roce 1968. Jako u 10-prutove konstrukce je vsak resena spojitou rozmerovou op-timalizac. V clanku [Wu and Chow, 1995b] je tato konstrukce diskretn optimalizac resena.Zaroven je to nejstars clanek, ve kterem jsme tuto konstrukci objevili. Jednotlive plochyprcnych prurezu byly vybrany z teto mnoziny (v in2): 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8,

    17

  • 17 18 19 20

    13

    9

    5

    1

    15 16 14

    10 11 12

    6 7 8

    2 3 4

    2 m 2 m 2 m

    3m

    3m

    3m

    3m

    1 2 3 4

    14 15 16 17

    27 28 29 30

    40 41 42 43

    5 6 7 8 9 10

    11 12 13

    24 25 26

    37 38 39

    50 51 52

    18 19 20 21 22 23

    31 32 33 34 35 36

    44 45 46 47 48 49

    Obrazek 4: 52-prutovaprhradova 2D konstrukce

    A1 1, 2, 3, 4A2 5, 6, 7, 8, 9, 10A3 11, 12, 13A4 14, 15, 16, 17A5 18, 19, 20, 21, 22, 23A6 24, 25, 26A7 27, 28, 29, 30A8 31, 32, 33, 34, 35, 36A9 37, 38, 39A10 40, 41, 42, 43A11 44, 45, 46, 47, 48, 49A12 50, 51, 52

    Tabulka 5: Sdruzen ploch prcnychprurezu do skupin (52-prutova kon-strukce)

    Objemova hmotnost: 7 860 kg/m3

    Modul pruznosti E: 2,07 105 MPaLimitn napet: 180 MPa

    Tabulka 6: Charakteristiky materialua omezujc podmnky 52-prutove veze

    Uzel Fx Fy17 100,0 200,018 100,0 200,019 100,0 200,020 100,0 200,0

    Tabulka 7: Zatzen 52-prutove kon-strukce v kN

    0,9, 1,0, 1,1, 1,2, 1,3, 1,4, 1,5, 1,6, 1,7, 1,8, 1,9, 2,0, 2,1, 2,2, 2,3, 2,4, 2,5, 2,6, 2,7, 2,8, 2,9,3,0, 3,1, 3,2 viz [Wu and Chow, 1995b]. Materialove charakteristiky a omezujc podmnky(vizte tabulku 10) a zatzen (vizte tabulku 8) byly prevzaty z [Lemonge and Barbosa, 2003].Plochy byly opet sdruzeny do skupin z duvodu symetrie konstrukce, vizte tabulku 9.

    18

  • Uzel Fx Fy Fz1 5 5 -5

    Tabulka 8: Zatzen 72-prutove konstrukce [kip]

    1

    4 3

    2

    5

    7

    6

    8

    15

    13

    1 2

    34

    56 78

    9

    10

    11

    12 1416

    x

    z

    120

    120

    6060

    6060

    1

    5

    9

    13

    17

    2

    6

    10

    14

    18 x

    z

    [in]

    1

    4 3

    2

    Obrazek 5: 72-prutova prhradova 3Dkonstrukce

    Skupina PrutyA1 1, 2, 3, 4A2 5, 6, 7, 8, 9, 10, 11, 12A3 13, 14, 15, 16A4 17, 18A5 19, 20, 21, 22A6 23, 24, 25, 26, 27, 28, 29, 30A7 31, 32, 33, 34A8 35, 36A9 37, 38, 39, 40A10 41, 42, 43, 44, 45, 46, 47, 48A11 49, 50, 51, 52A12 53, 54A13 55, 56, 57, 58A14 59, 60, 61, 62, 63, 64, 65, 66A15 67, 68, 69, 70A16 71, 72

    Tabulka 9: Sdruzen ploch prurezu doskupin (72-prutova konstrukce)

    Objemova hmotnost: 0,1 lb/in3

    Younguv modul pruznosti E: 107 psiLimitn napet: 25 ksiLimitn posun: 0,25 in

    Tabulka 10: Charakteristiky materialu a omezujc podmnky 72-prutove veze

    6 Testovac metody a jejich vysledky

    6.1 MATLAB a m-files

    Pri tvorbe prvnch kodu pro tuto praci v programu MATLAB byl pouzit jako referencnkod A. Rapoffa [Rapoff, 2006]. Jeho kod byl sestaven pro sedmiprutovou prhradovou kon-strukci s peti stycnky. Pro nase vyzkumy ale tato konstrukce pouzita nebyla, jelikoz nen takbezna v dostupne zahranicn literature jako nami zmnene konstrukce v kapitole 5. Po upravekodu bylo nutno zjistit, ktere operace zabraj nejvce casu.

    V tabulkach 11 a 12 jsou uvedeny casy jednotlivych operac pri spusten vypoctu jednoua tisckrat. Jak je videt, je nutno porovnat ruzne zpusoby vypoctu soustavy rovnic K r = f .Operace Disp=s\f; pro vypocet neznamych posunu zabra pro jedno spusten vypoctu nejvcecasu. Pokud spustme vypocet tisckrat, zjistme, ze nejvce casu zabra sestaven maticetuhosti konstrukce. Pokud nemenme tvar konstrukce, ale pouze prcne prurezove plochy jed-notlivych prutu, respektive jejich tuhosti, muzeme si matici tuhosti konstrukce vyjadrit para-metricky v zavislosti na tuhosti prvku dle pododdlu 3.3. Sestaven vektoru prave stranyzabra tez zbytecne mnoho pameti. Je proto vhodne sestavit tento vektor jinak.

    19

  • radek kodu vypis kodu pocet volan cas v s cas v %102 Disp=s\f; 1 0,006 40,0%70 Stiff=zeros(2*numnod); 1 0,005 33,3%

    ostatn 0,004 26,7%celkem 0,015 100%

    Tabulka 11: Vystup z Profileru MATLABu pro jedno spusten kodu prmeho resice pro de-setiprutovou konstrukci

    radek kodu vypis kodu pocet volan cas v s cas v %80 k=Area(m)*Emod(m)/Length(m)*[T... 10 000 0,065 15,2%64 ij=[2*inode-1,2*inode,2*jnod... 1 000 0,046 10,7%79 T=[[cc,cs];[cs,ss]]; 10 000 0,040 9,3%84 Stiff(n,n)=Stiff(n,n)_k;+ 10 000 0,038 8,9%93 f([2*idfx-1;2*idfy])=[fx;fy... 1 000 0,029 6,8%

    ostatn 0,210 49,1%celkem 0,428 100%

    Tabulka 12: Vystup z Profileru MATLABu pro 1 000 spusten kodu prmeho resice pro10-prutovou konstrukci

    6.1.1 Parametricke vyjadren skriptu

    Pro usetren casu bylo vhodne veskere casti skriptu, ktere se pri behu sestavuj ci poctaj,eliminovat. Toho lze dosahnout jednak zapsanm vektoru (napr. delky nebo zatzen) prmoa jednak parametrickym vyjadrenm vsech pocetnch a sestavovacch operac (napr. sestavenmatice tuhosti, vypoctu posunu nebo vypoctu vnitrnch sil) tak, aby se v zavislosti naparametru tuhosti prutu, mohly dosazovat jen jejich jednotlive prcne prurezove plochy.

    Sestaven matice tuhosti konstrukce nebyl problem. Matice se vyjadrila (vizte pododdl3.3) a orezala o radky a sloupce se znamymi (nulovymi) posuny v podporach. Vyjadrenvektoru posunu v parametrickem zapisu MATLAB nebyl schopen. Naprklad pro vypocetnenejmene narocny LDLT rozklad popsany v pododdle 3.4.4 se cas 6. iterace oproti predchoziteraci zvysil zhruba 1 200krat (pro 10-prutovou konstrukci). Proto byl zvolen druhy parametrDisp, ktery tyto posuny vyjadruje, a s nm pak opet nebyl problem sestavit vektor vnitrnchsil v konstrukci.

    6.1.2 Plna a rdka matice

    Jelikoz matice tuhosti konstrukce je rdka, zkoumali jsme i vliv teto vlastnosti na vyslednycas. Skripty vsech drve zminovanych konstrukc v kapitole 5 jsou tedy vyjadreny jak proplnou, tak pro rdkou matici tuhosti, abychom mohli vysledne casy porovnat. Bylo zjisteno, zezalez na velikosti teto matice a pomeru nulovych a nenulovych prvku. Pro male konstrukce,jako je napr. 10-prutova, se vyplat pouzt matice plna, pro vets a slozitejs konstrukce,s vetsm poctem nulovych prvku v teto matici, pak matice rdka. Toto je videt ve velkemkontrastu u 25-prutove a 72-prutove konstrukce v tabulkach 14 a 16.

    20

  • M-file, M-file, Kompilace, Kompilace, C++plna matice rdka matice plna matice rdka matice

    A Sestaven matice za behu 0,3489 0,3785B K * r = f: Zpetne lomtko 0,0610 0,0848 0,0761 0,0956C K * r = f: LU faktorizace 0,0516 0,0986 0,0669 0,1091D K * r = f: Chol. dekompozice 0,0669 0,1127 0,0811 0,1210E K * r = f: LDLT rozklad 0,0716 0,1334 0,0869 0,1435F K * r = f: Metoda s. gradientu 0,7461 0,8004 0,8090 0,8118G K * r = f: LDLT rozklad 0,0033H K * r = f: LU faktorizace 0,0051I FemCAD 0,0236

    Tabulka 13: Vysledky casu v sekundach na 10-prutove konstrukci

    A B C D E F G H I0

    0.25

    0.5

    0.75

    Typ algoritmu

    as

    [s]

    M-file, Pln maticeM-file, dk maticeKompilace, Pln maticeKompilace, dk maticeC++

    Obrazek 6: Graf porovnavajc jednotlive casy na 10-prutove konstrukci, legenda vizte ta-bulku 13

    6.1.3 Resice soustavy rovnic Stiff*Disp=f

    K resen soustavy rovnic Stiff*Disp=f bylo pouzito pet zpusobu resen. Metoda zpetneholomtka popsana v pododdle 3.4.1 by teoreticky mela byt nejrychlejs, jelikoz je cely al-goritmus vypoctu optimalizovan spolecnost MathWorks. Nicmene tomu tak nen. Dalo byse predpokladat, ze se cas ztrac na vyberu typu matice (rdka, plna, symetricka apod.)a naslednem vyberu vhodneho zpusobu vypoctu.

    Jako dals resic byla pouzita LU faktorizace charakterizovana v pododdle 3.4.2. Zpusob to-hoto vypoctu je vhodny pro male konstrukce, ktere maj malo nulovych prvku v matici tuhosti,hod se pro ne tedy plna matice tuhosti. Vizte tabulku 13 a 14 pro deseti a dvacetipetiprutovoukonstrukci.

    Choleskeho dekompozice popsana v pododdle 3.4.3 by mela byt teoreticky rychlejs, je-likoz matice tuhosti konstrukce je symetricka. Uplatnuje se ve vypoctech tam, kde se jizvyplat pouzt rdkou matici tuhosti (tzn. pro 72-prutovou konstrukci, vizte tabulku 16).

    LDLT rozklad objasneny v pododdle 3.4.4 byl shledan jako pomalejs nez LU faktorizace

    21

  • M-file, M-file, Kompilace, Kompilace, C++plna matice rdka matice plna matice rdka matice

    A Sestaven matice za behu 1,2632 1,2428B K * r = f: Zpetne lomtko 0,0970 0,2492 0,1406 0,2822C K * r = f: LU faktorizace 0,0824 0,2664 0,1267 0,3010D K * r = f: Chol. dekompozice 0,0936 0,2536 0,1403 0,2881E K * r = f: LDLT rozklad 0,1019 0,2865 0,1491 0,3279F K * r = f: Metoda s. gradientu 1,4402 1,5945 1,5176 1,6063G K * r = f: LDLT rozklad 0,0171H K * r = f: LU faktorizace 0,0118I FemCAD 0,0480

    Tabulka 14: Vysledky casu v sekundach na 25-prutove konstrukci

    A B C D E F G H I0

    0.25

    0.5

    0.75

    1

    1.25

    1.5

    1.75

    Typ algoritmu

    as

    [s]

    M-file, Pln maticeM-file, dk maticeKompilace, Pln maticeKompilace, dk maticeC++

    Obrazek 7: Graf porovnavajc jednotlive casy na 25-prutove konstrukci, legenda vizte ta-bulku 14

    a Choleskeho dekompozice u rdke i u plne matice tuhosti konstrukce.Cas vypoctu pri pouzit metody konjugovanych gradientu je zavisly na poctu iterac. Cm

    je mene iterac a tedy vets chyba v resen rovnice Stiff*Disp=f, tm rychlejs je vypocet. Naobrazku 10 je graf zavislosti poctu iterac na chybe v resen. Pokud oznacme vypoctene posunyprmym resicem (napr. Disp=Stiff\f) uorig a posuny vypoctene metodou konjugovanychgradientu unew,i, muzeme dostat maximaln odchylku v resen mezi prmou a iteracn metodoupomoc |uorigunew,i|. Popisky jednotlivych bodu v grafu znazornuj cas vypoctu pri spustenceleho skriptu 1000krat v sekundach.

    6.2 MATLAB a kompilace

    Puvodn predpoklad, ze kompilace MATLAB kodu do samostatne spustitelne aplikaceznatelne urychl cas vypoctu, se nepotvrdil. Kompilace byla provedena podle pododdlu 3.5.Duvodem je nejspse dlouha inicializace aplikace. Vysledky jsou videt v tabulkach 13 az 16.

    22

  • M-file, M-file, Kompilace, Kompilace, C++plna matice rdka matice plna matice rdka matice

    A Sestaven matice za behu 1,3548 1,3151B K * r = f: Zpetne lomtko 0,245 0,4174 0,308 0,4556C K * r = f: LU faktorizace 0,2312 0,4387 0,2933 0,4774D K * r = f: Chol. dekompozice 0,2245 0,4098 0,2776 0,4466E K * r = f: LDLT rozklad 0,2453 0,4624 0,2964 0,5147F K * r = f: Metoda s. gradientu 1,7452 1,8485 1,8457 1,9099G K * r = f: LDLT rozklad 0,0757H K * r = f: LU faktorizace 0,0201I FemCAD 0,0895

    Tabulka 15: Vysledky casu v sekundach na 52-prutove konstrukci

    A B C D E F G H I0

    0.25

    0.5

    0.75

    1

    1.25

    1.5

    1.75

    2

    Typ algoritmu

    as

    [s]

    M-file, Pln maticeM-file, dk maticeKompilace, Pln maticeKompilace, dk maticeC++

    Obrazek 8: Graf porovnavajc jednotlive casy na 52-prutove konstrukci, legenda vizte ta-bulku 15

    6.3 C++

    Vsechny kody v jazyce C++ vychazej z kodu MATLABu. Nahodny generator cselz mnoziny ploch vybere plochy prcnych prurezu prutu v jejich potrebnem poctu. Jsou defi-novany tuhosti k a k nim prirazeny jejich hodnoty s parametrem plochy A. Pokud v puvodnmskriptu v MATLABu obsahovaly jednotlive tuhosti prvky s odmocninami, pouzil se v nemprkaz vpa k preveden realneho csla na cslo s desetinnym rozvojem. Pouzita presnost na 29platnych cslic by nemela ovlivnit hodnotu vysledneho resen. Matice tuhosti K byla prevzataz kodu MATLABu pomoc prkazu ccode. Dale bylo pouzito jednorozmerneho pole pro vek-tor zatzen f. K resen soustavy rovnic pro zskan neznamych posunu u bylo vyuzito tr jizzmnenych resicu v kapitole 4. Po vypoctu posunu u se vypoctaj jednotliva napet v prutechS v zavislosti na tuhostech k, posunech u a plochach A. Nakonec jsou nalezeny maximaln hod-noty posunu u a napet S a spoctana celkova vaha konstrukce maxw, ktera je opet vyjadrenaparametricky ze skriptu MATLABu.

    Pro vsechny tri resice bude odlisny zapis matice tuhosti konstrukce K, vektoru zatzen f

    23

  • M-file, M-file, Kompilace, Kompilace, C++plna matice rdka matice plna matice rdka matice

    A Sestaven matice za behu 3,5938 3,5380B K * r = f: Zpetne lomtko 1,2550 0,6246 1,1997 0,6639C K * r = f: LU faktorizace 1,0383 0,6696 1,0506 0,7101D K * r = f: Chol. dekompozice 1,0459 0,5931 1,0424 0,6348E K * r = f: LDLT rozklad 1,0749 0,6904 1,0622 0,7460F K * r = f: Metoda s. gradientu 2,5600 2,0546 2,6101 2,1085G K * r = f: LDLT rozklad 0,2348H K * r = f: LU faktorizace 0,0395I FemCAD 0,1494

    Tabulka 16: Vysledky casu v sekundach na 72-prutove konstrukci

    A B C D E F G H I0

    0.250.5

    0.751

    1.251.5

    1.752

    2.252.5

    2.753

    3.253.5

    3.754

    Typ algoritmu

    as

    [s]

    M-file, Pln maticeM-file, dk maticeKompilace, Pln maticeKompilace, dk maticeC++

    Obrazek 9: Graf porovnavajc jednotlive casy na 72-prutove konstrukci, legenda vizte ta-bulku 16

    a vystupnch posunu jednotlivych uzlu u. Vetsina nutnych uprav byla zmnena v kapitole 4.

    7 Zaver

    Pri pouzit vsech zamyslenych metod na zvolenych konstrukcch muzeme dospet k zaveru,ze prestoze je MATLAB v dnesn dobe velmi rozvjeny, stale se jedna o interpretovany jazyka je tedy pomalejs nez jazyk C++ jakozto jazyk kompilovany. Ani s pomoc kompilace senam nepodarilo zvysit jeho rychlost. Nicmene MATLAB je vhodne prostred k testovannovych metod a k analyzovan chovan skriptu a treba i konstrukce vubec. Nabz totiznejen vestavene funkce, ktere nen treba algoritmizovat a optimalizovat, a k nim i obsahlounapovedu, ale i graficke rozhran a ruzne nastroje pro analyzu skriptu.

    Pouzite matematicke metody jsou zavisle na velikosti konstrukce a jej slozitosti. Cm jekonstrukce vets a slozitejs, tm je matice tuhosti konstrukce vce rdka. Pro male konstrukcese ale vyplat pouzt matice plna. Na typu ulozen matice pak zavis volba vhodne matematickemetody. Pro plnou malou matici je vhodne pouzt LU faktorizaci, pro rdkou matici zase

    24

  • Obrazek 10: Zavislost iterace na chybe resen s casem vypoctu pro 1000 spusten v sekundachpro 72-prutovou konstrukci

    Choleskeho dekompozici. Metoda sdruzenych gradientu se nam neosvedcila, predpokladame,ze je vhodna pro daleko vets konstrukce s ridsmi maticemi tuhosti, nez byly uzity v tetopraci.

    Dalsm typem ulozen matice tuhosti je naprklad pasova matice nebo za pomoci kom-presovanych radku, sloupcu nebo jejich kombinace [Vondracek, 2008a]. Do budoucna hodlameprozkoumat i tyto varianty.

    Do uvahy tez pripadaj dals konstrukce pro prozkouman efektivnosti i ostatnch metod,a to nejen vets prhradove konstrukce, ale i ramove konstrukce apod. Dky optimalizaciskriptu budeme schopni do budoucna spustit naprklad metodu vetv a mez, ktera se pouzijepro diskretn rozmerovou optimalizaci. Tato metoda je totiz velmi vypocetne narocna, prestozepouzijeme horn odhad (z publikovanych clanku) i doln odhad (zskany spojitou rozmerovouoptimalizac). Pokud bychom tyto odhady nepouzili, pocet resen by u nejmens konstrukce tr-val priblizne 1787 let pri pouzit nejrychlejs vypocetn metody (zde LTLT rozkladu), vizte ta-bulku 17. Pro nazornost jsou pak v teze tabulce ukazany pocty resen a jejich casova narocnostpro metodu vetv a mez, provedou-li 2 iterace nahoru a dve dolu, kde se pohybujeme naprkladkolem predem zvoleneho resen.

    Jelikoz tato metoda nebude mozna spustit pouze na jednom jadre jednoho poctace, jakose tomu delo v teto praci, prichaz v uvahu nejen paralelizace na jednotliva jadra procesoru,ale i pouzit poctacoveho clusteru. V dnesn dobe se rozvj i paraleln vypocty provadene nagrafickych kartach, ktere zvladnou jednoduche operace. Zminme na prklad program CUDAod NVIDIA [NVIDIA, 2011]. Bude proto vhodne podrobit analyze i tento typ vypoctu.

    25

  • Pocet prutu 10 25 52 72Pocet skupin prutu 10 8 12 16Pocet prvku v mnozine 42 32 64 21Pocet moznych zadan 4210 = 1, 7 1016 328 = 1, 1 1012 6412 = 4, 7 1021 3216 = 1, 2 1024Pocet zadan - B&B6 424 = 3, 1 106 324 = 1, 1 106 644 = 1, 7 107 324 = 1, 1 106Doba vypoctu (1 000x) 0,0033 s 0,0118 s 0,0201 s 0,0395 sDoba vypoctu na 1 jadre 1787,3 let 0, 41 let 3, 01 109 let 1, 51 1012 letDoba vypoctu (B&B) 10,269 s 12,373 s 337,222 s 41,419 s

    Tabulka 17: Diskuse poctu resen a doby trvan

    Reference

    [Anderson et al., 1999] Anderson, E., Bai, Z., Bischof, C., Blackford, S., Demmel, J., Don-garra, J., Du Croz, J., Greenbaum, A., Hammarling, S., McKenney, A., and Sorensen, D.(1999). LAPACK Users Guide. Society for Industrial and Applied Mathematics, Philadel-phia, PA, tret edition.

    [Bittnar, 1983] Bittnar, Z. (1983). Metody numericke analyzy konstrukc. Skriptum. Ceskevysoke ucen technicke v Praze.

    [Bubenk et al., 1997] Bubenk, F., Pultar, M., and Pultarova, I. (1997). Matematicke vzorcea metody. Skriptum. Ceske vysoke ucen technicke v Praze.

    [Cai and Thierauf, 1996] Cai, J. and Thierauf, G. (1996). Evolution strategies for solvingdiscrete optimization problems. Advances in Engineering Software, 25:177183.

    [CDT Community, 2010] CDT Community (2010). Eclipse C/C++ Development Tooling -CDT. http://www.eclipse.org/cdt/.

    [Dongarra et al., 1996] Dongarra, J., Pozo, R., and Walker, D. (1996).LAPACK++ V. 1.1: High performance linear algebra users guide.http://math.nist.gov/lapack++/lapackppman1 1.ps.gz.

    [Fox and Schmit, 1966] Fox, R. L. and Schmit, L. A. (1966). Advances in the integratedapproach to structural synthesis. Journal of Spacecraft and Rockets, 3(6):858866.

    [Giger and Ermanni, 2006] Giger, M. and Ermanni, P. (2006). Evolutionery truss topologyoptimization using a graph-based parameterization concept. Structural and Multidisci-plinary Optimization, 32(4):313326.

    [Jaroslav Kruis a kolektiv, 2010] Jaroslav Kruis a kolektiv (2010). Homepage of SIFEL.http://mech.fsv.cvut.cz/sifel/.

    [Jirousek, 2006] Jirousek, O. (2006). Metoda konecnych prvku: poznamky k prednaskam.http://mech.fd.cvut.cz/education/master/k618y2m1/download/ymkp fem.pdf.

    [Kirsch, 1995] Kirsch, U. (1995). Layout optimization using reduction and expansion pro-cesses. First World Congress of Structural and Multidisciplinary Optimization.6B&B je zkratka Branch and bound, v prekladu Metoda vetv a mez.

    26

  • [Lemonge and Barbosa, 2003] Lemonge, A. C. C. and Barbosa, H. J. C. (2003). An adaptivepenalty scheme for genetic algorithms in structural optimization. International Journal forNumerical Methods in Engineering, 59:703736.

    [Leps, 2004] Leps, M. (2004). Single and Multi-Objective Optimization in Civil Engineeringwith Applications. PhD thesis, CVUT v Praze.

    [MinGW team, 2010] MinGW team (2010). MinGW: Minimalist GNU for Windows.http://www.mingw.org/.

    [NVIDIA, 2011] NVIDIA (2011). CUDA Zone.http://www.nvidia.com/object/cuda home new.html.

    [Patzak, 2009] Patzak, B. (2009). Uvodn prednaska do predmetu NAK1.https://mech.fsv.cvut.cz/homeworks/student/NAK1/lecture01.pdf.

    [Ralston, 1978] Ralston, A. (1978). Zaklady numericke matematiky. Academia, nakladatelstvCeskoslovenske akademie ved.

    [Rapoff, 2006] Rapoff, A. J. (2006). MER 311 advanced strength of materials course page[online]. http://engineering.union.edu/ rapoffa/MER311/laboratories/.

    [Shewchuk, 1994] Shewchuk, J. R. (1994). An introduction to the conjugate gradient methodwithout the agonizing pain. Technical report, School od Computer Science, Carnegie MellonUniversity.

    [Sigmund and Bends, 2003] Sigmund, O. and Bends, M. P. (2003). Topology Optimization:Theory, Methods and Applications. Springer-Verlag, 2nd edition. ISBN 978-3-540-42992-0.

    [Steven, 2003] Steven, G. (2003). Product and system optimization in engineering simulation.FENet Newsletter.

    [Svacek and Feistauer, 2006] Svacek, P. and Feistauer, M. (2006). Metoda konecnych prvku.Skriptum. Ceske vysoke ucen technicke v Praze.

    [The MathWorks, 2010a] The MathWorks (2010a). Matlab 7: Mathematics.http://www.mathworks.com/access/helpdesk/help/pdf doc/matlab/math.pdf.

    [The MathWorks, 2010b] The MathWorks (2010b). Matlab Compiler 4: Users Guide.http://www.mathworks.com/access/helpdesk/help/pdf doc/compiler/compiler.pdf.

    [The MathWorks, 2010c] The MathWorks (2010c). mldivide \, mrdivide / [online].http://www.mathworks.com/access/helpdesk/help/techdoc/ref/mldivide.html#f90-1002049.

    [Venkayya, 1971] Venkayya, V. B. (1971). Design of optimum structures. Computers &Structures, 1:265309.

    [Vondracek, 2008a] Vondracek, R. (2008a). DSSinC - direct sparse solver in c++.http://www.femcad.com/DSSinC/.

    27

  • [Vondracek, 2008b] Vondracek, R. (2008b). Use of a Sparse Direct Solver in EngineeringApplications of the Finite Element Method. PhD thesis, Ceske vysoke ucen technicke vPraze.

    [Wu and Chow, 1995a] Wu, S.-J. and Chow, P.-T. (1995a). Integrated discrete and configura-tion optimization of trusses using genetic algorithms. Computers & Structures, 55(4):495702.

    [Wu and Chow, 1995b] Wu, S.-J. and Chow, P.-T. (1995b). Steady-state genetic algorithmsfor discrete optimization of trusses. Computers & Structures, 56(6):979991.

    28

  • A Prehled uzitych anglosaskych jednotek s prevodem do SIsoustavy

    Jednotka Nazev anglicky Nazev cesky Prevod do SI soustavyin inch palec 1 in = 25,4 mmpsi pound per square inch libra sly na ctverecny palec 1 psi = 6.894,757 Pakp kip - 1 kip = 4.448,222 Nlb/in3 pound per cubic inch libra sly na kubicky palec 3,613 105 lb/in3 = 1 kg/m3

    Tabulka 18: Prehled uzitych anglosaskych jednotek s prevodem do SI soustavy

    29