A F E M - MKP program


Popis programu AFEM

Přehled

Program se skládá z řešiče, který úlohy řeší (aplikace bez jakéhokoli interaktivního rozhraní) a části komunikující s uživatelem. Původně jsem chtěl vyrobit samostatný preprocesor a postprocesor, ale teď to vypadá, že to bude jen jeden program (tedy teď to je tak, že už je od sebe odseparovat stejně nepůjde), protože někdy se příprava a vyhodnocování dat silně prolínají a navíc je beztak většina kódu stejného. Tato část ("prepostprocesor") bude jednak grafická (z toho už něco i je), jednak textová (krásná příkazová řádka ;-). V současné době existují nějaké pomocné programy pro vstup dat a pro generování sítě konečných prvků, které budou později součástí knihoven programu (případně budou nahrazeny jiným mechanismem).

Program je vyhotoven v jazyce C (s důrazem na dodržování ISO normy) a s použitím těchto knihoven:

  • HDF5 - ukládání dat,
  • OpenGL - grafická reprezentace dat,
  • gl2ps - ukládání OpenGL výstupu do formátu PostScriptu,
  • Gtk+ - grafické uživatelské rozhraní (tahle věc nejvíce ovlivňuje přenositelnost na různé platformy),
  • gtkglarea - OpenGL podpora pro Gtk+,
  • gtkglext - OpenGL podpora pro Gtk+ 2.x (nepoužívám, ale zvažuji to),
  • glut nebo freeglut - kvůli textům v OpenGL (lepší řešení jsem zatím nenašel).

Úplně nepodstatná věc (všichni přece umíme anglicky..) - lokalizace. AFEM může být přeložen s podporou (GNU nebo BSD) gettextu a je možné všechna hlášení a výpisy přeložit do libovolného jazyka (např. češtiny). Dobrovolníci - překladatelé jsou vítáni...

Interakce s uživatelem

Při zadávání vstupních dat a při vyhodnocování výsledků je nezbytná interakce s uživatelem, pokud možno spojená s grafickým vyjádřením zpracovávaných dat. Proto je obsažen jednoduchý intepret příkazů, jehož prostřednictvím je možné chod programu kontrolovat. Podoba příkazů je velmi jednoduchá a rozhodně to není ,,programovací jazyk'', i když (pro automatizaci práce uživatele) je k dispozici možnost použití jednoduchých podmínek a cyklů. Tato forma komunikace byla zvolena proto, že je univerzální (funguje v textovém i grafickém prostředí, umožňuje dávkové řízení programu,...).

Protože někteří uživatelé mají ke klávesnici značný odpor, je možné kterýkoli příkaz zadat pomocí dialogového okna a nejběžnější příkazy (nebo dialogy pro jejich zadání) zvolit z grafického stromu příkazů (ovšem jen v GUI).

Způsob práce se trochu liší od tzv. ,,moderních'' komerčních programů (zejména těch menších). Zatímco jinde je snaha uživatele co nejvíce uchránit před kontaktem s konečnými prvky (zadáváním makroelementů, používáním šablon a průvodců atd.), zde je postup přesně opačný. Hlavním cílem totiž je, aby uživatel měl možnost plně kontrolovat vytváření konečněprvkového modelu, tedy aby byl schopen připravit si takový přesně model, jaký potřebuje, bez toho, aby mu v tom program bránil nebo ho omezoval.

Podobně je tomu s vyhodnocováním výsledků - uživatel má (bude mít ;-) možnost získat jakoukoli veličinu, kterou potřebuje, ať již v grafické nebo textové podobě.

Rychlost programu, efektivnost kódu

Cílem není dosažení maximálně efektivního kódu ani sestavení nejrychlejšího řešiče na světě, ale sestavení (relativně) snadno pochopitelného a upravitelného programu. Proto jsou použity některé zcela neefektivní a zdržující prvky - všechny potřebné ,,malé'' matice jsou sestavovány jako plné (byť jsou mnohé čtvercové a symetrické), matice soustavy rovnic je sestavována ze všech nenulových členů (nevyužívá se symetrie - zatím) a podobně. Nelze tedy očekávat, že výpočet poběží jako blesk, nicméně nějak tragicky pomalé to také není (např. úloha s 20 402 stupni volnosti a 10 000 konečnými prvky trvá 29 sekund od spuštění do ukončení programu, tedy na starém Athlonu (Thunderbirdu) s 1,333 MHz).

Větší testovací úloha (45 000 stupňů volnosti) vypadá (orientačně) asi takto:

Mašinka (procesor) Frekvence [MHz] Čas [min]
SGI Indy R5000/150 150 15
Intel Pentium 150 18 (1129,54 s)
AMD K6-2 266 13
AMD Athlon 1333 1,3 (79,44 s)
AMD Athlon (AFEM 0.0.26) 1333 0,94 (56,25 s)

Výsledky jsou, prosím, opravdu jen velmi orientační a nevypovídají nic o kvalitě použité techniky, např. použitý Indy (indy11.vsb.cz) byl takto vystaven velmi nevhodnému způsobu použití (procesor R5000 je optimalizován pro jednoduchou přesnost a výpočty jsou všechny v dvojnásobné, což mu zjevně nesedí), K6-2 měla pro plné využití příliš pomalou sběrnici, atd.


Vaše dotazy, přání, stížnosti, připomínky směřujte sem.