\documentclass{article}
%\textwidth 170mm
%\textheight 220mm
%\hoffset -2cm
\usepackage{a4wide}
\usepackage{epsfig}
\newcommand{\IR}{I\!\!R}
\def \nn {\mbox{\boldmath $n$}}
\def \w {\mbox{\boldmath $w$}}
\def \u {\mbox{\boldmath $u$}}
\def \f {\mbox{\boldmath $f$}}
\def \R {\mbox{\boldmath $R$}}
\def \H {\mbox{\boldmath $H$}}
\def \vv {\mbox{\boldmath $v$}}
\def \T {{\cal T}}
\def \A {{\cal A}}
\def \R {{\cal R}}
\def \S {{\cal S}}
\def \M {{\cal M}}
\def \U {{\cal U}}

\def \DGM {{\sf ExplDGM }}
\begin{document}

%\pagestyle{empty}
%\thispagestyle{empty}
%\noindent


\begin{center}

{\large\bf Strucny navod k pouziti baliku \DGM} 
\footnote{Tento navod je urcen predevsim studentum,
kteri pracuji s timto balikem}

\vspace{0.5cm}

{ \bf V\'\i t  Dolej\v s\'\i} \\

{dolejsi@karlin.mff.cuni.cz}

\end{center}

\vspace{1cm}



\section{Zakladni charakteristika}

Balik \DGM slouzi k numerickemu reseni soustav Eulerovych 
(Navierovych-Sto\-ke\-sovych) rovnic, ktere popisuji proudeni stlacitelne
nevazke (vazke) tekutiny. 
Rov\-nice se resi na konformnich 
troj\-uhelnikovych siti, diskretizace vzhledem k prostorovym souradnicim
se provadi pomoci nespojite Galerkinovy metody (DGM) 
a diskretizace vzhledem k casove souradnici pomoci Runge-Kuttovy metody 
(mame tedy explicitni schema). 
V baliku je naimplementovana  po castech linearni nespojita
aproximace DGM a Runge-Kuttovy metody 1.,2. a 4. radu.
Testy byly provadeny predevsim s metodou 1. radu (dopredna
Eulerova metoda). S timto programem (resp. se starsimi verzemi)
byly spocteny vysledky prezentovane napr. v \cite{FVCA3}, \cite{nsdgm},
\cite{ENUMATH-01}, \cite{fedg}. 
V techto pracech lze nalezt odvozeni metod 
a i poznamky k vlastni implementaci.
Cely program je napsan v jazyce C a byl pouzivan pod operacnimi
systemy Linux a Unix. S pouzitim pod Windows zkusenost nemam.

\section{Kompilace}

Ke stazeni je soubor 'ExplDGM.tar', ktery se pod operacnimi systemy
Linux ci Unix rozbali prikazem
\begin{verbatim}
tar xf ExplDGM.tar
\end{verbatim}


Po rozbaleni se vytvori adresar {\tt ExplDGM/}, ktery obsahuje tri podadresare

\begin{verbatim}
data/
doc/
src/
\end{verbatim}


Adresar {\tt data/} obsahuje priklad datovych souboru potrebnych 
pro beh programu (jedna se o tzv. GAMM kanal), adresar {\tt doc/}
obsahuje strucny navod a adresar {\tt src/} 
obsahuje  zdrojove soubory '*.c', hlavickove soubory '*.h'.
a soubor 'makefile'.
(V baliku se mohou vyskytovat i soubory, ktere se nepouzivaji, jedna
se o vyvojove verze.)

Kompilace programu se provadi prikazem 

\begin{verbatim}
make
\end{verbatim}

v adresari {\tt src/}.
Pri uspesnem prekladu by vysledkem mely byt
dva programy
\begin{itemize}
\item {\tt Dgm}, ktery slouzi k vlastnimu vypoctu,
\item {\tt Plotdgm}, ktery slouzi k vizualizaci vysledku.
\end{itemize}


\section{Pouziti programu {\tt Dgm}}

Program {\tt Dgm} se spousti s jednim parametrem, kterym je jmeno 
datoveho souboru, ktery obsahuje parametry 
pro vypocet, tedy napr.

\begin{verbatim}
Dgm 0.ini
\end{verbatim}


 Priklad datoveho souboru '0.ini' je v adresari {\tt data},
 ktery vypada nasledovne:

\begin{verbatim}

* input .grid file
triang

* Poisson constant kappa
1.4

* initial condition (1) or .sol file (2)
* 1 rho v1 v2 v3 p kappa
* 2 file
1 1. 1.0 0 1.5911912 
*2 0.rsol

* output .sol file
0.sol

* convergence file (- to suppress)
0.conv

* statistics file (- to suppress)
0.stat

* stopping criterion: L^infty norm (- to suppress)
1e-5

* stopping criterion: physical time (- to suppress)
2e+01

* numbered solution output physical time step (- to suppress)
-

* integrate proc (euler/ec/rk4)
euler

* local time stepping (global/local)
local
* global

* toleracne for limiting
1.0

*Reynolds and Prandtl number for viscous flow, Re=0 ==> inviscid
0E+04    0.72

* inlet/outlet count
2

* for each inlet/outlet: surfnr physical/fixed rho v1 v2 v3 p
2 physical 1. 1.0 0 1.5911912     ****  M=0.67
1 physical 1. 1.0 0 1.5911912 

* CFL number for time step restriction
0.60

\end{verbatim}

\subsection{Popis datoveho souboru '0.ini' z adresare {\tt data}}

Vsechny znaky '*' a znaky za '*' az do konce radku, program ingoruje.
Lze je tedy pouzit jako komentare, ci ``schovani'' zatim nepotrebnych dat.
Nyni k jednotlivym parametrum uvadeneho souboru
\begin{itemize}
\item {\tt triang}: jmeno souboru, kde je ulozena triangulace dane 
oblasti, na ktere se bude provadet vypocet. Format je shodny jako 
u baliku ANGENER \\
(viz {\tt  http://www.karlin.mff.cuni.cz/\verb|~|dolejsi/angen/angen.htm})\\
s drobnymi zmenami (2. radek), viz prilozeny priklad v adresari {\tt data/}.
\item {\tt 1.4}: hodnota Poissonovy konstanty, 1.4 je bezne uzivana hodnota
pro vzduch.
\item {\it typ pocatecni podminky}:
 V pripade, ze vypocet zacina, tak je na prvnim
miste 1 a pak ctverice realnych cisel znacicich konstatni hodnoty hustoty,
slozek rychlosti a tlaku. V pripade, ze vypocet pokracuje, tak je na prvnim
miste 2 a pak jmeno souboru, odkud se pocatecni podminky nacitaji
(viz zakomentovany radek v souboru '0.ini').
Format tohoto vstupniho souboru je shodny s souborem vystupnich dat, 
viz dalsi bod.
\item {\tt 0.sol}: jmeno souboru, kam se ukladaji vysledna data. Je to soubor
realnych cisel se ctyrmi sloupci (hustota, dve slozky hybnosti a energie).
Pocet radku souboru je pocet trojuhelniku site krat 3. 
Kazdemu elementu odpovidaji 3 radky (nespojita, po castech linearni 
aproximace dava 3 stupne volnosti na kazdem elementu), 
kazdemu radku odpovidaji hodnoty ve {\bf stredu hrany trojuhelnika}
v poradi danem souborem 'triang'.
(Rozdil oproti baliku {\sf ImplDGM} uzivajici hodnoty 
ve vrcholech trojuhelnika.)
\item {\tt 0.conv}: jmeno souboru, kam se zapisuje historie konvergence
ke stacionarnimu stavu (pokud existuje). Tento soubor je primo zobrazitelny
v gnuplotu. Jeho vypisovani lze potlacit znakem '-'.
\item {\tt 0.stat}: jmeno souboru, kam se zapisuji udaje o celkovem 
poctu iteraci, CPU casu, pouzite pameti apod.
Jeho vypisovani lze potlacit znakem '-'.
\item {\tt 1e-5}:  hodnota stopping kriteria pro reziduum. Pokud reziduum
(merici konvergenci ke stacionarnimu stavu) je mensi nez tato hodnota, tak se 
vypocet zastavi.
\item {\tt 2e+01}: hodnota fyzikalniho casu, pri ktere se ma vypocet zastavit.
Vypocet se zastavi, je-li splnena alespon jedna z uvadenych podminek.
\item {\it numbered solution}: Program pravidelne uklada spoctena dat 
(priblizne kaz\-dych 5 minut) do souboru, ktery je uveden vyse jako 4. 
parametr, tzn. ze napr. soubor '0.sol' se pravidelne prepisuje. 
Chceme-li si tyto soubory uchovavat (napr. pro
ilustraci nekterych nestacionarnich jevu, rychlost ci zpusob konvergence), 
tak je  potreba uvest casovy interval (fyzikalni cas, ne CPU), 
pri kterem se maji data uchovavat.
Je-li uvedeno napr. 0.5 a jmeno vystupniho souboru je '0.sol', 
tak pak vznikaji soubory '0.sol0', '0.sol0.5', '0.sol1', '0.sol1.5', atd.
\item {\it integracni procedura}: zpusob diskretizace vzhledem k casu, tri 
moznosti, {\tt euler} (1.rad), {\tt ec} (2. rad, Euler-Cauchyho formula)
a {\tt rk4} (Runge-Kuttova metoda 4. radu).
\item {\it zpusob volby casoveho kroku}: bud {\tt global} (globalni) nebo
{\tt local} (lokalni). Lokalni znamena, ze na kazdem elementu site se voli
jina delka casoveho kroku, pak sice mame nefyzikalni simulaci a hodnota
o fyzikalnim case nema moc smysl, ale kdyz hledame 
stacionarni stav, konvergenci na hodne zjemnenych siti je mnohem rychlejsi
nez-li s pouzitim {\tt global}.
\item {\tt 1.0}: tolerance pro limiting, pokud reseni je nespojite (razove
vlny), tak numericke reseni obsahuje oscilace, ty se potlacuji limitingem,
viz \cite{fedg}. Hodnotu 1.0 je doporuceno prilis nemenit.
\item {\tt 0E+04 \quad   0.72}: hodnoty Reynoldsova a Prandtlova cisla,
pro nevazke proude\-ni se klade prvni hodnota rovna 0 a program automaticky
resi pouze Eulerovy rovnice. Hodnota Prandtlova cisla
0.72 je hodnotou pro vzduch, hodnota Reynoldsova cisla je dana rezimem
proudeni.
\item {\it inlet/outlet count}:
pocet casti hranice, kde predepisujeme vstupni ci
vystupni okrajove podminky. Ostatnich casti hranice se automaticky 
berou jako neprostupne steny. Casti hranice jsou definovany souborem
'triang'.
\item {\it okrajove podminky}: pro kazdou z casti hranice, 
kde predepisujeme vstupni ci vystupni okrajove podminky se uvede napred
jeji cislo ({\tt ibc } ze souboru s 'triang'), pak typ OP
({\tt fixed} nebo {\tt physical} - doporuceno) a pak zase 4 realna
cisla predstavujici hustotu, slozky rychlosti a tlak na vstupni 
ci vystupni stene.
Pocet techto radku musi byt shodny s {\it inlet/outlet count}, viz
predesly bod.
\item {\it CFL cislo}: tato metoda je podminene stabilni, a proto
predepisujeme konstantu omezujici velikost casoveho 
kroku. Tato hodnota 
musi byt z intervalu (0,1), doporuceno maximalne 0.6, u vice 
zjemnenych siti, ci pri ``divokych'' reseni musi byt mensi,
napr. 0.1, 0.2, 0.4.
V pripade, ze vypocet zhavaruje, tak lze doporucit vypocet s mensim CFL.
\end{itemize}

\subsection{Beh programu {\tt Dgm} }

Pokud kompilace byla v poradku, tak
program {\tt Dgm} lze spustit z adresare {\tt data} prikazem

\begin{verbatim}
 ../src/Dgm 0.ini
\end{verbatim}

Pro uspesny beh programu {\tt Dgm} musi v adresari, odkud se program
spousti, byt soubor (viz priklad v adresari {\tt data})
'profiles', ktery popisuje krivou cast hranice.
V pripade polygonalni hranice
soubor 'profiles' obsahuje pouze jednu celociselnou '0'. Format
souboru 'profiles' je stejny jako u baliku ANGENER.

Pri behu programu se napred vypisou nejake komentare ke vstupnim datum a pak
postupne kazda 25. iterace.
Tento vypis obsahuje cislo iterace, celkovy fyzikalni cas, reziduum
(rozdil hustoty ve dvou nasledujich casovych krocich v $L^1$-norme deleny
casovym krokem -- timto se meri konvergence ke stacionarnimu stavu),
maximalni a minimalni hodnoty Machova cisla v cele oblasti a
pocet elementu, kde se provadel limiting.
Beh programu na prilozenych datech by mel dat priblizne nasledujici
vypis:

\begin{verbatim}
Source grid file: triang
438 points, 784 volume elements, 90 surface elements
Initial condition: rho 1, v 1,0, p 1.5911912, kappa 1.4
Output solution file: 0.sol
Convergence file: 0.conv
Statistics file: 0.stat
Stopping criterion: L^infty norm: 1e-05
Stopping criterion: Physical time: 20 s
Numbered solution output physical time step: 0 s
Integrate using Euler formula
Global time stepping
Tolerance for limiting:       1 
Inlet/outlet sides: 2
Side 2: physical, rho 1, v 1,0, p 1.5911912
Side 1: physical, rho 1, v 1,0, p 1.5911912
The 16 nodes detected on curved part of boundary      
 Begin of Linear_Mapping_Computing               
 END of Linear_Mapping_Computing
Solver_Init finished
                                        

    Iter      Time       Reziduum   Mach: minimal maximal    limit 
--------------------------------------------------------------------
      0       0.0007     2.1923e-01      0.6672     0.6730     0(0)
     25       0.0172     2.7604e-01      0.5405     0.7384     0(0)
     50       0.0336     3.5036e-01      0.4725     0.7429     0(0)
     75       0.0501     3.4920e-01      0.4544     0.7281     0(0)
    100       0.0666     3.3826e-01      0.4652     0.7465     0(0)
    125       0.0831     3.5673e-01      0.4546     0.7477     0(0)
    150       0.0996     3.5905e-01      0.4512     0.7606     0(0)
    175       0.1161     3.5273e-01      0.4384     0.7735     0(0)
    200       0.1326     3.7414e-01      0.4292     0.7838     0(0)
.
.
.
\end{verbatim}

Po uspesnem probehnuti programu {\tt Dgm} (na dobrem pocitaci trva prilozeny
priklad zhruba nekolik minut), vzniknou soubory uvedene v souboru '0.ini',
v nasem pripade '0.sol', '0.conv', '0.stat' a soubor 'walls', ktery mel
kdysi pomocny charakter (rozlozeni hustoty podel sten).


\section{Pouziti  programu {\tt Plotdgm}}

Pro vizualizaci spoctenych vysledku se uziva program {\tt Plotdgm},
ktery se spousti se dvema parametry, prvnim je soubor
s triangulaci a druhym soubor s vysledky spoctenymi na teto triangulaci,
t.j. v nasem pripade

\begin{verbatim}
../src/Plotdgm triang 0.sol
\end{verbatim}


V adresari, odkud se program {\tt Plotdgm} spousti 
 musi byt dale obsazen soubor 'plot.dgm' (viz priklad
v adresari {\tt data/}, kam si uzivatel zada
veliciny a typy zobrazeni, ktera chce vykreslit.
Prikladem je soubor z adresare {\tt data/}:

\begin{verbatim}
M  WALL  2  3  4
RO WALL  2  3  4
P  WALL  2  1  2
M  ISO  81 1 0. 2.
RO CUT  -1.  0.2  1.  0.2
EOD
\end{verbatim}

\begin{itemize}
\item Prvni znak(y) 
znaci velicinu, ktera se ma zobrazit, jsou nasledujici
moznosti: RO -- hustota, RV -- velikost momentu sily, V -- velikost rychlosti,
V1, V2 -- slozky rychlosti, P -- tlak, PC -- tlakovy koeficient,
M -- Machovo cislo, E -- energie, T -- teplota, CF -- skin friction
coeficient. EOD znamena konce datoveho souboru, co je za nim se jiz nenacita.
\item Druhy symbol znamena vykreslovany typ:
  \begin{itemize}
    \item WALL : vykresli rozlozeni na stene (stenach), napred se uvadi 
     pocet sten, na kterych se ma soucasne vykreslovat a pak {\tt ibc} 
     techto sten (ze souboru 'triang').
     Defaultove je nastaveno, ze u sten s {\tt ibc} rovno  1 nebo 2 
     (obvykle vstup nebo vystup)
     se vykresluje zavislost 
     veliciny na $x_2$ u ostatnich na $x_1$ ($x_1,x_2$ jsou kartezke 
     souradnice).
    \item ISO : vykresli isokrivky, uvede se pocet (napr. 81) a pak se uvede
     bud 0, pak se isokrivky vykresli od maxima do minima dane veliciny, nebo
     se uvede 1 a minimalni a maximalni hodnota, ktere se maji zobrazit.
     Isokrivky jsou vzdy rozlozeny ekvidistantne.
    \item CUT : vykresli se rez dane veliciny podel osy danou dvema body,
     jejich souradnice se uvedou za znaky CUT, napr. v zde uvedenem prikladu
     se vykresli rez podel osy $x_2=0.2$.
     Vznikly soubor obsahuje tri sloupce, souradnici $x_1$, spoctenou hodnotu
     na rezu a souradnici $x_2$.
  \end{itemize}
\end{itemize}

Vysledkem behu programu {\tt Plotdgm} jsou soubory 'gnu.01', 'gnu.02',
'gnu.03', \dots, pode poradi zadanych vizualizaci v souboru 'plot.dgm'.
Jejich pocet by mel odpovidat poctu radku v 'plt.dgm' pred EOD.
Pokud jiz v adresari nejake soubory 'gnu.*' existovaly,
 tak se automaticky prepisi.
Vsechny tyto soubory jsou snadno zobrazitelne v gnuplotu, napr.
prikazem 

\begin{verbatim}
gnuplot> plot 'gnu.01' w l
\end{verbatim}

pri 3D visualizaci isokrivek lze uzit

\begin{verbatim}
gnuplot> splot 'gnu.03' w l
\end{verbatim}

pri zobrazeni rezu v zavislosti na $x_2$ lze uzit

\begin{verbatim}
gnuplot> plot 'gnu.05' using 3:2 w l
\end{verbatim}


(viz program gnuplot a jeho napoveda).



\section{Zaverecna poznamka}

Balik \DGM predstavuje pouze jakousi vyvojovou verzi, bude zrejme obsahovat 
chyby a neni ani optimalne napsan. Take dokumentace je velmi stroha, ale
pro zacatek by mela stacit. 

\bibliographystyle{plain}
%\bibliographystyle{alpha}
%\bibliography{/usr/users/dolejsi/tex/publikace/ref} 
\bibliography{/home/dolejsi/tex/publikace/ref} 
%\bibliography{/home/vitek/tex/ref} 

\end{document}
