• No results found

Implementace numerick´ eho modelu podzemn´ıho proudˇ en´ı

N/A
N/A
Protected

Academic year: 2022

Share "Implementace numerick´ eho modelu podzemn´ıho proudˇ en´ı"

Copied!
78
0
0

Loading.... (view fulltext now)

Full text

(1)

TECHNICK ´ A UNIVERZITA V LIBERCI Fakulta mechatroniky a mezioborov´ ych inˇzen´ yrsk´ ych

studi´ı

Studijn´ı program: N 2612 – Elektrotechnika a informatika

Studijn´ı obor: Automatick´e ˇr´ızen´ı a inˇzen´ yrsk´ a informatika

Implementace numerick´ eho modelu podzemn´ıho proudˇ en´ı

v objektovˇ e orientovan´ em programovac´ım jazyce

Implementation of a numerical model of groundwater flow in

an object oriented programming language

Diplomov´ a pr´ ace

Vedouc´ı dipl. pr´ ace: Ing. Otto Sever´ yn, Ph.D.

2009 Bc. Tom´ aˇs Chmel

(2)

Byl jsem sezn´amen s t´ım, ˇze na mou diplomovou pr´aci se plnˇe vztahuje z´akon ˇc. 121/2000 o pr´avu autorsk´em, zejm´ena ˇc. 60 (ˇskoln´ı d´ılo).

Beru na vˇedom´ı, ˇze TUL m´a pr´avo na uzavˇren´ı licenˇcn´ı smlouvy o uˇzit´ı m´e pr´ace a prohlaˇsuji, ˇze s o u h l a s ´ı m s pˇr´ıpadn´ym uˇzit´ım m´e diplomov´e pr´ace (prodej, zap˚ujˇcen´ı apod.).

Jsem si vˇedom toho, ˇze uˇz´ıt svoji diplomovou pr´aci ˇci poskytnout licenci k jej´ı vyuˇzit´ı mohu jen se souhlasem TUL, kter´a m´a pr´avo ode mne poˇzadovat pˇrimˇeˇren´y pˇr´ıspˇevek na ´uhradu n´aklad˚u, vynaloˇzen´ych univerzitou na vytvo- ˇren´ı d´ıla (aˇz do jejich skuteˇcn´e v´yˇse).

Diplomovou pr´aci jsem vypracoval s´am s pouˇzit´ım uveden´e literatury a na z´akladˇe konzultac´ı s vedouc´ım diplomov´e pr´ace.

V Liberci 29. kvˇetna 2009 . . . .

(3)

Abstrakt

C´ılem t´eto pr´ace bylo vytvoˇren´ı programu pro modelov´an´ı podzemn´ıho proudˇen´ı pomoc´ı objektovˇe orientovan´eho jazyka. V´ychoz´ım bodem byl jiˇz existuj´ıc´ı program, psan´y pomoc´ı jazyka C strukturovanou formou.

Na zaˇc´atku pr´ace je uveden struˇcn´y ´uvod do probl´emu modelov´an´ı proudˇen´ı kapalin a objektovˇe orientovan´emu n´avrhu programu.

Po vysvˇetlen´ı obecn´ych pojm˚u n´asleduje popis konkr´etn´ı realizaci pro- gramu. Nejprve se zamˇeˇr´ıme na ˇcinnosti programu, pr˚ubˇeh v´ypoˇctu a komu- nikace programu s okol´ım. D´ale je vˇenov´ana pozornost jednotliv´ym tˇr´ıd´am, navrˇzen´ym k ˇreˇsen´ı zadan´eho probl´emu, pˇredevˇs´ım pak jejich metod´am.

Konec pr´ace je vˇenov´an srovn´an´ı nov´eho a p˚uvodn´ıho programu. Srovn´an´ı je provedeno jednak pomoc´ı programu GMSH, kter´ym jsou vypoˇcten´e v´ysledky pˇrevedeny do grafick´e podoby, tak i porovn´an´ım obsahu soubor˚u jako textu.

Kl´ıˇcov´a slova: proudˇen´ı podzemn´ı vody, puklinov´e prostˇred´ı

(4)

Abstract

The main goal of this bachelor thesis is to create a programme for ground- water flow modelling using an object-oriented approach. The starting point was the already existing programm written in the programming language C in a structured form.

At the beginning there is a brief introduction to the problem of ground- water flow modelling and concepts of the object-oriented programming.

After the explanation of the basic terminology we will focus on the specific implementation of the programmme. At first, we will focus on the programme functions, calculation phases and programme communication with its envi- ronment. Then, we will pay attention to the individual classes created to solve the problem, mainly to their methods.

The end of this thesis concentrates on the comparison of the newly created programme with the original one. This comparison is carried out not only by the programme GMSH, which transfers the calculated results into a graphic form, but also by a comparison of the file content as a text.

Keywords: Groundwater flow, Fractured rock

(5)

Obsah

1 Uvod´ 9

2 Proudˇen´ı podzemn´ı vody 10

2.1 Aproximace proudˇen´ı . . . 11

2.2 Slouˇcen´ı 1D, 2D a 3D v´ypoˇctu . . . 12

2.2.1 Konformn´ı a nekonformn´ı propojen´ı element˚u . . . 12

2.2.2 V´ymˇena l´atek pˇres konformn´ı propojen´ı element˚u . . . 13

2.2.3 V´ymˇena l´atek pˇres nekonformn´ı propojen´ı element˚u . . 14

3 Objektovˇe orientovan´e programov´an´ı 16 3.1 Dˇediˇcnost . . . 16

3.2 Polymorfismus . . . 16

3.3 Skl´ad´an´ı objekt˚u . . . 17

3.4 V´yhody a nev´yhody objektov´eho pˇr´ıstupu . . . 17

4 Popis programu flow123d 19 4.1 Reˇzimy programu flow123d . . . 19

4.1.1 Generov´an´ı souboru sousednosti . . . 19

4.1.2 Konverze vstupn´ıch soubor˚u . . . 19

4.1.3 V´ypoˇcet . . . 20

4.2 Vnˇejˇs´ı datov´e struktury . . . 20

4.2.1 R´ıd´ıc´ı souborˇ . . . 20

4.2.2 Soubor s´ıtˇe . . . 20

4.2.3 Soubor materi´alov´ych vlastnost´ı . . . 21

4.2.4 Soubor okrajov´ych podm´ınek . . . 21

4.2.5 Soubor zdroj˚u kapaliny . . . 22

4.2.6 Soubor sousednosti element˚u s´ıtˇe . . . 22

4.2.7 Soubor okrajov´ych podm´ınek transportu . . . 22

4.2.8 Soubor poˇc´ateˇcn´ıch podm´ınek . . . 23

4.2.9 Soubor poˇc´ateˇcn´ıho rozloˇzen´ı koncentrace . . . 23

4.2.10 V´ystupn´ı soubory . . . 23

(6)

5 Vnitˇrn´ı datov´e tˇr´ıdy 24

5.1 ˇSablony . . . 24

5.1.1 Sablona CList nodeˇ . . . 24

5.1.2 Sablona CListˇ . . . 26

5.2 Tˇr´ıdy . . . 30

5.2.1 CProblem . . . 31

5.2.2 CMesh . . . 32

5.2.3 CNode . . . 33

5.2.4 CElement . . . 34

5.2.5 CSide . . . 35

5.2.6 CEdge . . . 35

5.2.7 CMaterial . . . 35

5.2.8 CBoundary . . . 35

5.2.9 CInitial . . . 36

5.2.10 CTransport bcd . . . 36

5.2.11 CConcentration . . . 36

5.2.12 CSource . . . 36

5.2.13 CNeighbour . . . 37

5.2.14 CMatrix . . . 37

5.2.15 CError . . . 38

5.2.16 CSystem . . . 38

6 Testov´an´ı ˇcinnosti programu 43 6.1 Testov´an´ı doby v´ypoˇctu . . . 45

7 Z´avˇer 48 A Pˇr´ıloha 50 A.1 V´ypis tˇr´ıdy CBoundary . . . 50

A.2 V´ypis tˇr´ıdy CConcentration . . . 51

A.3 V´ypis tˇr´ıdy CEdge . . . 52

A.4 V´ypis tˇr´ıdy CElement . . . 53

(7)

A.5 V´ypis tˇr´ıdy CError message . . . 58

A.6 V´ypis tˇr´ıdy CInitial . . . 59

A.7 V´ypis tˇr´ıdy CMaterial . . . 59

A.8 V´ypis tˇr´ıdy CMatrix . . . 60

A.9 V´ypis tˇr´ıdy CMesh . . . 62

A.10 V´ypis tˇr´ıdy CNeighbour . . . 67

A.11 V´ypis tˇr´ıdy CNode . . . 69

A.12 V´ypis tˇr´ıdy CProblem . . . 70

A.13 V´ypis tˇr´ıdy CSide . . . 73

A.14 V´ypis tˇr´ıdy CSource . . . 75

A.15 V´ypis tˇr´ıdy CSystem . . . 76

A.16 V´ypis tˇr´ıdy CTransport bcd . . . 78

(8)

Seznam obr´ azk˚ u

1 Propojen´ı prvk˚u niˇzˇs´ı a v´yˇs´ı dimenze . . . 12

2 Sch´ema l´atkov´e v´ymˇeny pˇres konformn´ı propojen´ı . . . 13

3 Zaveden´ı konformn´ıho a nekonformn´ıho propojen´ı v glob´aln´ı matici . . . 14

4 Sch´ema l´atkov´e v´ymˇeny pˇres nekonformn´ı propojen´ı . . . 14

5 V´ypis tˇr´ıdy CList node . . . 25

6 V´ypis tˇr´ıdy CList . . . 29

7 Pouˇzit´ı statick´e metody . . . 38

8 Testovac´ı s´ıt’ pro dvojrozmˇern´y model . . . 43

9 Testovac´ı s´ıt’ pro trojrozmˇern´y model . . . 44

10 Zn´azornˇen´ı rozd´ıl˚u mezi v´ysledky . . . 44

11 Testovac´ı s´ıt’ pro trojrozmˇern´y model . . . 45

12 V´ysledek v´ypoˇctu pro p˚uvodn´ı program 2D modelu . . . 46

13 V´ysledek v´ypoˇctu pro nov´y program 2D modelu . . . 46

14 V´ysledek v´ypoˇctu pro p˚uvodn´ı program 3D modelu . . . 47

15 V´ysledek v´ypoˇctu pro nov´y program 3D modelu . . . 47

(9)

1 Uvod ´

C´ılem pr´ace bylo inovace jiˇz existuj´ıc´ıho programu flow123d, kter´y slouˇz´ı k si- mulaci proudˇen´ı podzemn´ıch vod horninov´ym prostˇred´ım a transportu l´atek rozpuˇstˇen´ych ve vodˇe.

P˚uvodnˇe byl program ps´an strukturovanˇe, ˇc´ımˇz je myˇsleno, ˇze byly vy- tvoˇreny glob´aln´ı promˇenn´e ke kter´ym se pˇristupovalo pomoc´ı glob´aln´ıch funkc´ı. Nev´yhodou tohoto pˇr´ıstupu se st´av´a jeho sloˇzitost, kter´a ne´umˇernˇe roste s velikost´ı programu. Program se tak st´av´a h˚uˇre udrˇzovateln´ym. Kaˇzd´a netrivi´aln´ı zmˇena programu se projev´ı na v´ıce m´ıstech k´odu a je n´aroˇcn´e a zdlouhav´e tato m´ısta identifikovat.

Naproti tomu objektov´y pˇr´ıstup, kter´y byl zvolen, sluˇcuje data a metody, kter´e k nim pˇristupuj´ı. Pˇristup k dat˚um se uskuteˇcˇnuje pˇres tyto metody a program se tak dˇel´ı do menˇs´ıch celk˚u, kter´e je snaˇzˇs´ı spravovat.

V prvn´ı ˇc´asti t´eto pr´ace se vˇenujeme matematicko-fyzik´aln´ımu popisu probl´emu proudˇen´ı podzemn´ıch vod v horninov´em prostˇred´ı. Budou vysvˇetleny z´akladn´ı vztahy nutn´e k vytvoˇren´ı programu. Pot´e budou vysvˇetleny z´akladn´ı ideje objektov´eho programov´an´ı a pak se jiˇz budeme zab´yvat programem.

N´aslednˇe se sezn´am´ıme s ˇcinnost´ı programu a pop´ıˇseme vnˇejˇs´ı datov´e struktury, kter´e slouˇz´ı programu jako vstupn´ı data a tak´e jako v´ystup.

Dalˇs´ı ˇc´ast je vˇenov´ana popisu nov´ych tˇr´ıd a jejich metod. Nejprve jsou pops´any dvˇe nov´e parametrick´e tˇr´ıdy slouˇz´ıc´ı k vytv´aˇren´ı line´arn´ıho seznamu.

N´asleduje popis tˇr´ıd, kter´e odpov´ıdaj´ı datov´ym struktur´am v p˚uvodn´ım pro- gramu. Nakonec je pops´ana tˇr´ıda slouˇz´ıc´ı k zajiˇstˇen´ı komunikace programu s okol´ım.

V posledn´ı kapitole je porovn´an´ı p˚uvodn´ıho programu a programu nov´eho z hlediska jejich funkce.

(10)

2 Proudˇ en´ı podzemn´ı vody

Souˇc´ast´ı t´eto kapitoly bude sezn´amit ˇcten´aˇre s pouˇzit´ym modelem pro v´ypo- ˇ

cty proudˇen´ı v horninov´em prostˇred´ı.

V horninov´em prostˇred´ı se m˚uˇzeme setkat s nˇekolika rozd´ıln´ymi typy objekt˚u, kter´e maj´ı rozd´ıln´e charakteristiky.

1. Sedimenty. Typick´ymi z´astupci jsou p´ıskovce ˇci v´apence. Tyto ma- teri´aly umoˇzˇnuj´ı, d´ıky sv´e porozitˇe, proudˇen´ı kapalin cel´ym objemem.

2. Vyvˇrel´e nebo pˇremˇenˇen´e horniny naz´yvan´e kristalinikum (napˇr. ˇzuly) . I pˇres tyto materi´aly m˚uˇze kapalina prot´ekat pˇres cel´y objem, ale je za- potˇreb´ı mnohem vˇetˇs´ıch tlak˚u neˇz v pˇredeˇsl´em pˇr´ıpadˇe. Dominantn´ım je zde tok po puklin´ach a dalˇs´ıch tektonick´ych poruch´ach.

Pukliny v horninov´em prostˇred´ı m˚uˇzeme rozdˇelit podle jejich vlastnost´ı.

1. Mal´e pukliny. Jejich v´yskyt je velmi hojn´y, ale dosahuj´ı jen mal´ych rozmˇer˚u (m´enˇe neˇz jeden metr). Modelov´an´ı kaˇzd´e pukliny je pro sou- ˇ

casn´y v´ykon poˇc´ıtaˇc˚u nerealizovateln´e na ´uzem´ı vˇetˇs´ım neˇz ˇr´adovˇe stovky metr˚u ˇctvereˇcn´ıch v p˚udoryse a proto se tyto pukliny v mod- elov´an´ı nahrazuj´ı por´ezn´ım materi´alem ekvivalentn´ıch hydraulick´ych vlastnost´ı.

2. V´yznamn´e pukliny. Jejich v´yskyt je relativnˇe ˇridˇs´ı a jejich charakter- istiky b´yvaj´ı zn´am´e. Tyto pukliny nen´ı moˇzn´e nahradit v modelov´an´ı por´ezn´ım materi´alem. Ve v´ypoˇctech je uvaˇzujeme jako 2D objekty.

3. Kˇr´ıˇzen´ı velk´ych puklin. Na tˇechto m´ıstech je moˇzn´e pozorovat velk´e toky podzemn´ıch vod. Tyto ˇc´ary se chovaj´ı jako jak´esi potrub´ı v pod- zemn´ım prostˇred´ı.

Z v´yˇse uveden´eho v´yˇctu je moˇzn´e pro proudˇen´ı podzemn´ıch vod zahrnout 3D por´ezn´ı bloky, 2D zlomy a 1D pukliny.

(11)

2.1 Aproximace proudˇ en´ı

Nejprve zavedeme aproximaci proudˇen´ı v kaˇzd´em typu nez´avisle na ostatn´ıch.

Zaved’me oblast Ωi, kde index i ∈ {1, 2, 3}. Ω1 je mnoˇzina ´useˇcek um´ıstˇe- n´ych ve 3D prostoru, Ω2 je mnoˇzina polygon˚u a Ω3 mnoˇzina 3D oblast´ı.

Vˇsechny oblasti jsou podmnoˇzinou tˇr´ıdimenzion´aln´ıho prostoru. Pro tyto oblasti m˚uˇzeme definovat potenci´al, ˇr´ıd´ıc´ı proudˇen´ı kapaliny. Pomoc´ı rovnice kontinuity a line´arn´ıho Darcyho z´akona (kter´y definuje rychlost pr˚utoku ka- paliny pevn´ym por´ezn´ım tˇelesem) z´ısk´ame:

ui = −Ki· ∇pi na Ωi, (1)

∇ · ui = qi na Ωi, (2)

kde ui je intenzita proudˇen´ı, pi je tlakov´a v´yˇska, Ki je tenzor hydraulick´e vodivosti a qi je funkce popisuj´ıc´ı hustotu zdroj˚u kapaliny.

Pˇri ˇreˇsen´ı uvaˇzujeme tˇri moˇzn´e okrajov´e podm´ınky - Dirichetovu, Neu- manovu a Newtnovu, vyj´adˇren´e vztahy:

pi = piD na ∂ΩiD, (3) ui· ni = uiN na ∂ΩiN, (4) ui· ni− σ(pi− piD) = uiN na ∂ΩiW. (5) Diskretizac´ı z´ısk´ame soustavu line´arn´ıch algebraick´ych rovnic. Pro tento pˇr´ıpad byla pouˇzita sm´ıˇsen´a-hybridn´ı formulace MKP (v´ıce o diskretizaci v [5] ). V´ysledn´a soustava m´a tvar:

Sixi = ri, (6)

kde xi = [ui, pi, λi]T, ri = [ri1, ri2, ri3]T a matice

Si =

Ai Bi Ci

BTi

CTi Fi

(7)

(12)

2.2 Slouˇ cen´ı 1D, 2D a 3D v´ ypoˇ ctu

Nyn´ı pˇrikroˇc´ıme k propojen´ı jednotliv´ych ˇc´ast´ı v´ypoˇctu probl´emu. Zaˇcneme t´ım, ˇze vytvoˇr´ıme jeden velk´y syst´em obsahuj´ıc´ı vˇsechny ˇc´asti

Sx = r, (8)

kde xi = [x1, x2, x3]T, ri = [r1, r2, r3]T a matice

S =

 S1

S2

S3

. (9)

2.2.1 Konformn´ı a nekonformn´ı propojen´ı element˚u

Ve v´ypoˇctu m˚uˇzeme uvaˇzovat dva druhy propojen´ı jednotliv´ych element˚u r˚uzn´e dimenze.

Prvn´ım druhem je konformn´ı propojen´ı. V tomto pˇr´ıpadˇe prvky niˇzˇs´ı dimenze leˇz´ı pouze na hran´ach ˇci stˇen´ach prvk˚u vyˇsˇs´ı dimenze. Tento zp˚usob je velmi n´aroˇcn´y na vytv´aˇren´ı s´ıtˇe pˇri sloˇzitˇejˇs´ıch tvarech zkouman´ych oblast´ı.

Druh´y zp˚usob, naz´yvan´y nekonformn´ı propojen´ı, nepoˇzaduje ˇz´adn´e spe- ci´aln´ı um´ıstˇen´ı prvk˚u niˇzˇs´ı dimenze vzhledem k ostatn´ım prvk˚um.

N´azorn´a uk´azka jednotliv´ych moˇznost´ı propojen´ı je zn´azornˇena na obr´azku 1.

Obr´azek 1: Konformn´ı a nekonformn´ı propojen´ı prvk˚u s r˚uznou dimenz´ı.

Pˇrevzato z [2].

(13)

2.2.2 V´ymˇena l´atek pˇres konformn´ı propojen´ı element˚u

Pro odvozen´ı je pouˇzito propojen´ı 1D a 2D element˚u, jak je nakresleno na obr´azku 2. Propojen´ı o ˇr´ad vyˇsˇs´ıch element˚u se provede analogicky.

Obr´azek 2: Sch´ema l´atkov´e v´ymˇeny pˇres konformn´ı propojen´ı. Elementy jsou pro n´azornost nakresleny posunut´e ve smˇeru ˇc´arkovan´ych ˇcar. Pˇrevzato z [2]

Propojen´ı se chov´a jako nehomogen´ı okrajov´a podm´ınka pro element s vyˇsˇs´ı dimenz´ı a jako zdroj pro element s niˇzˇs´ı dimenz´ı.

u11+ u12= uc (10)

Pˇri urˇcen´ı toku mezi jednotliv´ymi elementy se pˇredpokl´ad´a, ˇze tok je pˇr´ımo

´

umˇern´y velikosti gradientu tlak˚u mezi jednotliv´ymi elementy

−uC = σC2− p1), (11) kde λ2 je tlak na stranˇe 2D elementu, p1 je tlak uprostˇred 1D elementu a σC je koeficient pˇrestupu.

Zapsan´ı podm´ınek dostaneme vztahy

−uC − σCλ2− σCp1 = 0 (12) σCλ2− u1,1− u1,2− σCp1 = 0. (13) Porovn´an´ım p˚uvodn´ıch rovnic a odpov´ıdaj´ıc´ıch rovnic nov´ych m˚uˇzeme urˇcit potˇrebn´e zmˇeny matice S. Tyto zmˇeny jsou zn´azornˇeny v lev´e ˇc´asti obr´azku 3.

(14)

Obr´azek 3: Zaveden´ı konformn´ıho (vlevo) a nekonformn´ıho (vpravo) propo- jen´ı element˚u v glob´aln´ı matici. Pˇrevzato z [2]

2.2.3 V´ymˇena l´atek pˇres nekonformn´ı propojen´ı element˚u

Nyn´ı si odvod´ıme proudˇen´ı mezi dvˇema elementy s nekonformn´ı vazbou.

Stejnˇe jako v pˇredeˇsl´em pˇr´ıpadˇe se zamˇeˇr´ıme na vazbu mezi 1D a 2D elemen- ty. Vztahy pro ostatn´ı propojen´ı jsou odvozeny analogicky. Sch´ema moˇzn´e vazby je na obr´azku 4.

Obr´azek 4: Sch´ema l´atkov´e v´ymˇeny pˇres nekonformn´ı propojen´ı 1D a 2D element˚u. Pˇrevzato z [2]

Tok mezi elementy je moˇzn´e popsat vztahem

u1 = σI(p2− p1), (14)

(15)

eficient σI je z´avisl´y na vzd´alenosti stˇred˚u a velikosti kˇr´ıˇzen´ı jednotliv´ych element˚u.

Rovnice zachov´an´ı hmoty pro 2D element je

−u2,1− u2,2− u2,3− uI = 0, (15) podobnˇe je ud´an i vztah pro 1D element

−u1,1− u1,2+ uI = 0. (16) Spojen´ım tˇechto rovnic z´ısk´ame v´ysledn´e vztahy

−u2,1− u2,2− u2,3− σIp2+ σIp1 = 0 (17)

−u1,1− u1,2+ σIp2− σIp1 = 0. (18) Je vidˇet, ˇze propojen´ı jednotliv´ych element˚u lze zajistit pˇriˇcten´ım nebo ode- ˇ

cten´ım σI v matici S jak n´azornˇe ukazuje prav´a ˇc´ast obr´azku 3.

(16)

3 Objektovˇ e orientovan´ e programov´ an´ı

K programu lze z hlediska v´yvoje pˇristupovat nˇekolika r˚uzn´ymi zp˚usoby.

V t´eto kapitole se zamˇeˇr´ıme na z´akladn´ı vlastnosti objektovˇe orientovan´eho pˇr´ıstupu. V´ıce o objektov´em programov´an´ı je v [1].

Z´akladem objektov´eho pˇr´ıstupu je modelov´an´ı jednotliv´ych prvk˚u ˇreˇsen´e

´

ulohy, jak dat, tak i souvisej´ıc´ıch funkc´ı do jedn´e entity, naz´yvan´e objekt.

Objekt je schopen mˇenit sv˚uj stav a poskytuje operace, kter´e jej mohou zmˇenit nebo informovat o jeho stavu.

Abstrakce objektu, kter´a popisuje jeho tvar v r´amci programovac´ıho jazyka se ˇr´ık´a tˇr´ıda. Tˇr´ıda obsahuje instrukce jak dan´y objekt vytvoˇrit, jak´e m´a atributy (datov´e promˇenn´e) a metody (procedury a funkce). Objektem je naz´yv´ana konkr´etn´ı instance t´eto tˇr´ıdy.

3.1 Dˇ ediˇ cnost

Pˇri vytv´aˇren´ı objekt˚u se m˚uˇzeme rozhodnout, ˇze nov´y objekt bude m´ıt vlast- nosti jiˇz existuj´ıc´ıho objektu, jelikoˇz obˇe re´aln´e pˇredlohy pro dan´y model jsou podobn´e, ale nov´y objekt bude m´ıt nˇekolik vlastnost´ı nav´ıc. M˚uˇzeme vytvoˇrit novou tˇr´ıdu a dan´e metody a atributy do n´ı pˇrepsat. V tomto pˇr´ıpadˇe vˇsak bude probl´em pˇri dalˇs´ı zmˇenˇe, jelikoˇz bychom museli zdrojov´y k´od upravovat na dvou m´ıstech. Proto objektov´e programov´an´ı umoˇzˇnuje vytv´aˇret potomky tˇr´ıdy. Tento potomek dˇed´ı vˇsechny atributy a metody pˇredchoz´ı tˇr´ıdy, kter´e budou st´ale zaps´any na jednom m´ıstˇe v programu a v pˇr´ıpadˇe ´upravy je staˇc´ı pˇrepsat pouze tam. Odvozen´a tˇr´ıda pˇritom st´ale funguje jako objekt p˚uvodn´ı tˇr´ıdy a na m´ıstˇe, kde je oˇcek´av´ana p˚uvodn´ı tˇr´ıda se m˚uˇze vyskytovat i jej´ı potomek.

3.2 Polymorfismus

Je vlastnost objektov´eho programov´an´ı spojen´a s dˇediˇcnost´ı. Umoˇzˇnuje pˇre- kryt´ı metody b´azov´e tˇr´ıdy metodou odvozen´e tˇr´ıdy.

(17)

Jeˇstˇe d´ale se dostaneme pomoc´ı virtu´aln´ıch metod. Ty jsou propojeny dynamicky za bˇehu programu. Lze tedy pomoc´ı ukazatele na b´azovou tˇr´ıdu ukazovat na odvozenou tˇr´ıdu a pˇri vol´an´ı virtu´aln´ı metody se zavol´a metoda deklarovan´a v odvozen´e tˇr´ıdˇe.

3.3 Skl´ ad´ an´ı objekt˚ u

Dalˇs´ım vyuˇzit´ım objekt˚u je moˇznost rozloˇzit program na jednotliv´e ˇc´asti, vykon´avaj´ıc´ı jednotliv´e ´ulohy. Tyto ˇc´asti maj´ı definovan´e vstupy a v´ystupy, ale postup ˇreˇsen´ı, nebo-li to co je uvnitˇr, je z hlediska jejich pouˇzit´ı nepod- statn´e.

Jeden objekt m˚uˇze vlastnit odkazy na jin´e objekty a vyuˇz´ıvat tak jejich metody, bez nutnosti zn´at konkr´etn´ı implementaci. Pˇri ´udrˇzbˇe programu pak m˚uˇze b´yt napˇr´ıklad ve vnoˇren´em objektu zmˇenˇen zp˚usob uloˇzen´ı dat. Pokud si objekt zachov´a stejn´e rozhran´ı nen´ı nutn´e upravovat dalˇs´ı ˇc´asti programu.

3.4 V´ yhody a nev´ yhody objektov´ eho pˇ r´ıstupu

Objektovˇe orientovan´y program b´yv´a pˇrehlednˇejˇs´ı, srozumitelnˇejˇs´ı a proto je snaˇzˇs´ı ho spravovat a inovovat. Pˇred objektov´ym programov´an´ım se pouˇz´ıval procedur´aln´ı pˇr´ıstup, kter´y spoˇc´ıval ve vytvoˇren´ı glob´aln´ıch dat, ke kter´ym se pˇristupovalo pomoc´ı glob´aln´ıch funkc´ı. Zde plyne hlavn´ı nev´yhoda z glo- b´aln´ıho pˇr´ıstupu k dat˚um. Pˇrestoˇze je v´yvoj takov´ychto program˚u z poˇc´atku rychl´y, s rostouc´ı velikost´ı a sloˇzitost´ı, a tedy i velikost´ı zdrojov´ych k´od˚u se zvyˇsuje nepˇrehlednost. Pˇri zmˇenˇe programu nast´av´a nutnost upravovat program na v´ıce m´ıstech.

Pˇri v´yvoji objektov´eho programu je vˇsak kladen d˚uraz na zapouzdˇren´ı, kter´e umoˇzˇnuje pˇr´ıstup k dat˚um jen metod´am dan´e tˇr´ıdy a program je tak moˇzn´e udrˇzovat pˇrehledn´y a tedy je snaˇzˇs´ı prov´adˇet ´udrˇzbu ˇci vylepˇsov´an´ı programu.

Nev´yhodou tohoto pˇr´ıstupu vˇsak b´yv´a vˇetˇs´ı ˇcasov´a n´aroˇcnost, jelikoˇz k pˇr´ıstupu k dat˚um se pouˇz´ıvaj´ı funkce a program se prodluˇzuje o n´aklady

(18)

spojen´e s vol´an´ım funkc´ı. To se d´a vˇsak minimalizovat pouˇzit´ım ˇr´adkov´ych funkc´ı, kdy pˇrekladaˇc m´ısto vytvoˇren´ı vol´an´ı funkce vloˇz´ı pˇr´ıkazy z funkce do m´ısta vol´an´ı. T´ım se uˇsetˇr´ı ˇcas na vol´an´ı funkce, ale zvˇetˇs´ı se velikost pro- gramu, jelikoˇz dan´y obsah funkce je vloˇzen tolikr´at, kolikr´at je dan´a funkce volan´a.

(19)

4 Popis programu flow123d

V t´eto kapitole se budeme zab´yvat popisem programu a jeho vnˇejˇs´ımi da- tov´ymi strukturami.

Nejprve pˇredstav´ıme z´akladn´ı koncepci programu flow123d, d´ale pak po- p´ıˇseme jeho vstupn´ı a v´ystupn´ı form´aty.

4.1 Reˇ zimy programu flow123d

Cel´y program byl realizov´an jako jedna aplikace, umoˇzˇnuj´ıc´ı pouˇzit´ı tˇr´ı m´od˚u ˇ

cinnost´ı:

1. Reˇzim generov´an´ı souboru sousednost´ı 2. Reˇzim konverze vstupn´ıch soubor˚u 3. Reˇzim v´ypoˇctu

Pro spuˇstˇen´ı programu je nutn´e zadat dva parametry v pˇr´ıkazov´e ˇr´adce.

Prvn´ım parametrem je druh ˇcinnosti, kterou m´a program vykonat a druh´ym je ˇr´ıd´ıc´ı soubor.

4.1.1 Generov´an´ı souboru sousednosti

Bˇehem tohoto reˇzimu dojde k vytvoˇren´ı souboru sousednosti, kter´y obsahuje informaci o topologii s´ıtˇe. Jeho vytvoˇren´ı je ˇcasovˇe n´aroˇcn´e (kvadratick´a n´aroˇcnost na ˇcase) a proto je v´yhodn´e tuto ˇcinnost oddˇelit.

4.1.2 Konverze vstupn´ıch soubor˚u

Tento m´od sloˇz´ı jako pomoc pˇri tvorbˇe modelu. Bˇehem bˇehu programu jsou naˇcteny vstupn´ı soubory, kter´e jsou pˇrevedeny do form´atu POS. Ten je moˇzn´e zobrazit pomoc´ı programu GMSH.

(20)

4.1.3 V´ypoˇcet

Po naˇcten´ı vstupn´ıch soubor˚u je provedena vlastn´ı simulace proudˇen´ı a trans- portu.

4.2 Vnˇ ejˇ s´ı datov´ e struktury

Ve vˇsech pˇr´ıpadech jde o textov´e soubory kter´e jsou postupnˇe, v z´avislosti na druhu ˇcinnosti programu, naˇcteny po spuˇstˇen´ı.

4.2.1 R´ıd´ıc´ı souborˇ

R´ıd´ıc´ı soubor slouˇˇ z´ı konfiguraci ˇcinnosti programu. Jeho form´at je shodn´y s form´atem konfiguraˇcn´ıch INI soubor˚u syst´emu MS Windows.

Soubor je sloˇzen ze sekc´ı, ve kter´ych obsahuje ˇr´adky typu kl´ıˇc = hodnota.

Pˇrednost´ı tohoto form´atu je snadn´a editace a moˇznost pˇrid´av´an´ı nov´ych sekc´ı pˇri rozˇs´ıˇren´ı programu.

4.2.2 Soubor s´ıtˇe

Slouˇz´ı k prostorov´emu popisu s´ıtˇe. Pro tento soubor byl zvolen form´at syst´emu GMSH. Jde o velmi obecn´y form´at a program flow123d vyuˇz´ıv´a pouze nˇekolik moˇznost´ı tohoto form´atu. Podrobnou specifikaci tohoto form´atu je moˇzn´e naj´ıt v [3]. Standardnˇe se pro tento soubor pouˇz´ıv´a pˇr´ıpona .MSH. Ostatn´ı vstupn´ı soubory jsou podobn´eho stylu a proto se mu budeme vˇenovat trochu v´ıce.

Jde o textov´y soubor, rozˇclenˇen´y na sekce. Prvn´ı sekce ˇcasto slouˇz´ı k zaz- namen´an´ı informace o typu souboru a jeho verzi. Ostatn´ı pak obsahuj´ı data.

Informace je organizov´ana po ˇr´adc´ıch. Kaˇzd´y ˇr´adek nese informaci o jed- nom objektu. Objekt je definov´an jednoznaˇcnˇe sv´ym identifikaˇcn´ım ˇc´ıslem v r´amci typu. Identifikaˇcn´ı ˇc´ıslo patˇr´ı do nez´aporn´ych, cel´ych ˇc´ısel. Pomoc´ı nˇej se na tento objekt mohou odkazovat ostatn´ı objekty. Na uspoˇr´adan´ı ob- jekt˚u v r´amci souboru nen´ı kladena ˇz´adn´a podm´ınka.

(21)

Kromˇe identifikaˇcn´ıch ˇc´ısel mohou jednotliv´e objekty obsahovat tagy.

Jde o mnoˇzinu cel´ych nez´aporn´ych ˇc´ısel. Jejich poˇcet a v´yznam je voliteln´y a z´aleˇz´ı na uˇzivateli jak je pouˇzije. Je moˇzn´e m´ıt r˚uzn´y poˇcet tag˚u i v r´amci jednoho typu. Program flow123d definuje nˇekter´e tagy jako povinn´e a pˇridˇe- luje jim konkr´etn´ı vlastnosti.

To bylo k obecn´emu form´atu a nyn´ı se pod´ıv´ame konkr´etnˇe na soubor s´ıtˇe. Ten obsahuje dvˇe datov´e sekce. Prvn´ı je urˇcena pro uzly a druh´a pro elementy. Obsahem uzlu je jeho pozice pomoc´ı kart´ezsk´ych souˇradnic. Ele- ment obsahuje informaci o sv´em typu, identifikaˇcn´ı ˇc´ısla uzl˚u ze kter´ych je tvoˇren a sv´e tagy. Prvn´ı tag je definov´an jako odkaz na materi´al, ze kter´eho se element skl´ad´a.

4.2.3 Soubor materi´alov´ych vlastnost´ı

Soubor je oznaˇcov´an pˇr´ıponou .MTR. Obsahuje informace o jednotliv´ych materi´alech v oblasti, kde simulace prob´ıh´a. Soubor je rozdˇelen do sekc´ı, kde kaˇzd´a sekce popisuje jednu fyzik´aln´ı veliˇcinu, urˇcenou jm´enem sekce.

V sekci jsou d´ale definov´any jednotliv´e materi´aly a jim je pˇriˇrazen´a konkr´etn´ı hodnota.

4.2.4 Soubor okrajov´ych podm´ınek

Dan´y model proudˇen´ı umoˇzˇnuje definovat okrajov´e podm´ınky Dirichletova, Neumannova a Newtonova typu. Implicitnˇe je na kaˇzd´e hranici uvaˇzov´ana homogenn´ı podm´ınka Neumanova typu. Ta je pˇredpokl´ad´ana vˇsude, kde nen´ı uvedena explicitnˇe jin´a podm´ınka.

Vˇsechny okrajov´e podm´ınky v souboru maj´ı definovan´y sv˚uj typ. Na nˇem z´avis´ı poˇcet a v´yznam dalˇs´ıch uveden´ych hodnot. Dalˇs´ı informace je o ob- jektu, kde je podm´ınka zavedena (uzel ˇci stˇena) a tento objekt je identi- fikov´an. Nakonec definice okrajov´e podm´ınky jsou uvedeny tagy, kde prvn´ı urˇcuje skupinu. Model proudˇen´ı pak sˇc´ıt´a objem kapaliny proˇsl´e skrz hranici pro jednotliv´e skupiny.

(22)

4.2.5 Soubor zdroj˚u kapaliny

Soubor oznaˇcovan´y pˇr´ıponou .SRC, slouˇz´ı k urˇcen´ı zdroj˚u uvnitˇr oblasti.

Zdroje jsou spojeny s konkr´etn´ım elementem a urˇcuj´ı intenzitu vtlaˇcen´ı ˇci ˇ

cerp´an´ı objemu za ˇcas. Zaveden´a konvence je, kladn´a hodnota pro vtlaˇcen´ı a z´aporn´a pro ˇcerp´an´ı.

Tento soubor je voliteln´y a pokud nen´ı uveden v ˇr´ıd´ıc´ım souboru, v´ypoˇcet bude prob´ıhat bez uvaˇzov´an´ı vnitˇrn´ıch zdroj˚u.

4.2.6 Soubor sousednosti element˚u s´ıtˇe

Tento soubor je odliˇsn´y od ostatn´ıch. Pˇredevˇs´ım je tento soubor generov´an ve speci´aln´ım bˇehu programu flow123d. Druh´a odliˇsnost spoˇc´ıv´a v tom, ˇze tento soubor nen´ı pro bˇeh programu nutn´y, jelikoˇz vˇsechny informace jsou jiˇz obsaˇzeny v souboru s´ıtˇe.

Zpracov´an´ı a zjiˇstˇen´ı sousednosti je ˇcasovˇe n´aroˇcn´a ´uloha. ˇCasto ji staˇc´ı zjistit jen jednou pro r˚uzn´e v´ypoˇcty, kde se mˇen´ı materi´alov´e ˇci okrajov´e podm´ınky na stejn´e s´ıti. Vytvoˇren´ım tohoto souboru tedy lze v´yraznˇe sn´ıˇzit ˇ

cas v´ypoˇctu.

Soubor m´a jednu datovou sekci, kde na kaˇzd´em ˇr´adku je definovan´a mnoˇzina propojen´ych stˇen a/nebo element˚u. Pˇr´ıpona souboru je .NGH.

4.2.7 Soubor okrajov´ych podm´ınek transportu

Soubor oznaˇcovan´y pˇr´ıponou .TRB zav´ad´ı hodnoty poˇc´ateˇcn´ıch koncentrac´ı na hranici oblasti. Tyto hodnoty jsou spojeny s okrajov´ymi podm´ınkami proudˇen´ı. Podobnˇe jako okrajov´e podm´ınky proudˇen´ı i zde je implicitnˇe pˇredepsan´a podm´ınka a to nulov´a. Jinak ˇreˇceno, pokud nen´ı pˇredepsan´a jin´a podm´ınka, uvaˇzuje se nulov´a koncentrace l´atek ve vt´ekaj´ıc´ı kapalinˇe. Pokud je podm´ınka pˇredepsan´a v m´ıstˇe kde kapalina opouˇst´ı oblast je tato podm´ınka ignorov´ana.

(23)

4.2.8 Soubor poˇc´ateˇcn´ıch podm´ınek

Soubor s pˇr´ıponou .ICD je zpravidla generov´an v´ypoˇctem. Pouˇz´ıv´a se pˇri v´ypoˇctu neust´alen´eho proudˇen´ı a transportu. Soubor obsahuje promˇenn´y poˇcet sekc´ı, pro nˇekolik ˇcasov´ych okamˇzik˚u. V kaˇzd´e sekci jsou vyps´any hod- noty tlak˚u v tˇeˇziˇsti element˚u a stˇen a hodnoty objemov´ych tok˚u pˇres stˇeny elementu.

4.2.9 Soubor poˇc´ateˇcn´ıho rozloˇzen´ı koncentrace

Tento soubor obsahuje poˇc´ateˇcn´ı rozloˇzen´ı koncetrac´ı. Informace je zaps´ana pro kaˇzd´y element s´ıtˇe a ud´av´a hodnoty koncentrac´ı pro zaˇc´atek simulace.

Tento soubor m´a pˇr´ıponu .CON.

4.2.10 V´ystupn´ı soubory

Program flow123d generuje tˇri druhy v´ystupn´ıch soubor˚u. Prvn´ı soubor s pˇr´ı- ponou .POS slouˇz´ı k vizualizaci v´ysledk˚u. Druh´e dva je pak moˇzn´e pouˇz´ıt jako vstupn´ı hodnoty pro dalˇs´ı simulaci.

POS-soubory jsou urˇcen´e k vizualizaci pomoc´ı programu GMSH. V´ysledky jsou uloˇzeny pomoc´ı zadan´ych bod˚u v prostoru a vypoˇcten´e hodnoty jsou zad´any formou souˇradnic. Tento form´at nen´ı vhodn´y pro dalˇs´ı pouˇzit´ı ve v´ypoˇctu, jelikoˇz se ztratila vazba na s´ıt’.

Proto byly zavedeny dalˇs´ı dva soubory kter´e jsou form´alnˇe totoˇzn´e se soubory poˇc´ateˇcn´ıch podm´ınek (ICD-soubor) a poˇc´ateˇcn´ıho rozloˇzen´ı kon- centrace (CON-soubor).

(24)

5 Vnitˇ rn´ı datov´ e tˇ r´ıdy

V n´asleduj´ıc´ı ˇc´asti budou pops´any jednotliv´e tˇr´ıdy v programu. Pˇredt´ım neˇz se zaˇcneme vˇenovat tˇr´ıd´am odpov´ıdaj´ıc´ım struktur´am v p˚uvodn´ım pro- gramu, budeme se vˇenovat parametrizovan´ym typ˚um neboli ˇsablon´am. Pot´e se pod´ıv´ame na dvˇe ˇsablony pouˇzit´e k vytvoˇren´ı propojen´ych seznam˚u.

5.1 ˇ Sablony

Sablony jsou zabudovan´ˇ e n´astroje jazyka C++ a umoˇzˇnuj´ı vytv´aˇret parametri- zovan´e typy. Tyto typy mohou mˇenit svoje chov´an´ı dle parametr˚u zadan´ych pˇri jejich vytvoˇren´ı. Jejich pouˇzit´ı je v´yhodn´e zejm´ena tam, kde se opakuje t´emˇeˇr shodn´y k´od. Jedn´ım z tˇechto pˇr´ıpad˚u je vytv´aˇren´ı seznamu tˇr´ıd, jelikoˇz se z velk´e ˇc´asti mˇen´ı jen typ ukl´adan´e tˇr´ıdy.

Ve vytv´aˇren´em programu bylo pouˇzito dvojice ˇsablon k vytvoˇren´ı obou- smˇern´eho line´arn´ıho seznamu. Prvn´ı parametrizovan´y typ slouˇz´ı k uloˇzen´ı jedn´e tˇr´ıdy. Druh´y pak k obsluze metod cel´eho seznamu, jako napˇr´ıklad pˇrid´av´an´ı nov´ych prvk˚u ˇci jejich vyhled´av´an´ı.

5.1.1 Sablona CList nodeˇ

Je z´akladn´ım stavebn´ım prvkem seznamu. Jako parametr obsahuje ukazatel na ukl´adanou tˇr´ıdu. Ve v´ypisu 5 je uvedena jej´ı deklarace.

Na prvn´ım ˇr´adku je uvedena definice parametru pouˇzit´eho v t´eto tˇr´ıdˇe. Na ˇr´adc´ıch ˇctyˇri aˇz ˇsest jsou definovan´a data objektu. Ve vˇsech tˇrech pˇr´ıpadech jde o ukazatele. Prvn´ı dva jsou urˇceny k vytv´aˇren´ı seznamu. Posledn´ı pak ukazuje na ukl´adan´a data.

Na ostatn´ıch ˇr´adc´ıch jsou definovan´e metody umoˇzˇnuj´ıc´ı nastavov´an´ı a pˇr´ı- stup k tˇemto dat˚um.

CList node() je konstruktor tˇr´ıdy. Je vol´an pˇrekladaˇcem vˇzdy, kdyˇz je vytvoˇrena nov´a instance tˇr´ıdy. Slouˇz´ı k nastaven´ı dat na poˇc´ateˇcn´ı hod- noty. V tomto pˇr´ıpadˇe nastav´ı vˇsechny ukazatele na hodnotu NULL.

(25)

Obr´azek 5: V´ypis tˇr´ıdy CList node

1 : template <class T_class>

2 :class CList_node{

3 : private:

4 : CList_node * Next;

5 : CList_node * Prev;

6 : T_class * Data;

7 : public:

8 : CList_node();

9: CList_node(const CList_node & );

10: ~CList_node();

11: CList_node *next();

12: CList_node *prev();

13: T_class *data();

14: void set(T_class* );

15: void next(CList_node *);

16: void prev(CList_node *);

17: void free();

18:};

CList node(const CList node &) je kop´ırovac´ı konstruktor. Slouˇz´ı k na- staven´ı chov´an´ı pˇri kop´ırov´an´ı instanc´ı tˇr´ıd.

CList node() je destruktor. Je vol´an kompil´atorem vˇzdy kdyˇz doch´az´ı k likvidaci instance. Datov´a instance uloˇzen´a v tomto uzlu nen´ı ruˇsena.

*next() vrac´ı ukazatel na dalˇs´ı prvek v seznamu.

*prev() vrac´ı ukazatel na pˇredchoz´ı prvek v seznamu.

*data() vrac´ı ukazatel na parametrizovan´y typ.

set(T class* ) slouˇz´ı k nastaven´ı ukazatele na objekt, kter´y m´a b´yt vloˇzen do seznamu.

(26)

next(CList node *) je pouˇzit pˇri vytv´aˇren´ı seznamu, kdy se nastav´ı n´a- sleduj´ıc´ı prvek seznamu. Pokud je tento prvek posledn´ım, nenastavuje se nic a implicitnˇe z˚ust´av´a hodnota NULL.

prev(CList node *) je pouˇzit pˇri vytv´aˇren´ı seznamu, kdy se nastav´ı pˇred- choz´ı objekt.

free() slouˇz´ı k destrukci objektu kter´y je uloˇzen v ukazateli Data. Po jeho likvidaci je ukazateli pˇriˇrazena hodnota NULL.

5.1.2 Sablona CListˇ

Tato ˇsablona byla navrˇzena jako spr´avce seznamu. Parametrem je opˇet ukl´a- dan´a tˇr´ıda. Kromˇe vytvoˇren´ı a spr´avy seznamu umoˇzˇnuje tato ˇsablona pˇr´ıstup k jednotliv´ym prvk˚um pomoc´ı jejich identifikaˇcn´ıho ˇc´ısla. Identifikaˇcn´ı ˇc´ıslo mus´ı b´yt jiˇz souˇc´ast´ı ukl´adan´e tˇr´ıdy a mus´ı b´yt typu int.

Jelikoˇz se jedn´a o ˇsablonu mus´ı deklarace zaˇc´ınat definov´an´ım parametru.

Na dalˇs´ıch ˇr´adc´ıch jsou pak definov´any jednotliv´a data. Tato data se daj´ı rozdˇelit do dvou skupin. Tou prvn´ı jsou data nutn´a k funkˇcnosti seznamu.

Tˇemi jsou jen ukazatel´e na prvn´ı a posledn´ı prvek seznamu.

Ostatn´ı data slouˇz´ı pouze k urychlen´ı nebo zjednoduˇsen´ı ˇcinnosti. Sem patˇr´ı napˇr´ıklad ukazatel na aktu´aln´ı prvek, kter´y usnadˇnuje proch´azen´ı cel´eho seznamu.

V deklaraci je opˇet definov´an konstruktor, destruktor a metoda k uvolnˇen´ı dat v cel´em seznamu (free()). D´ale pak odkazy na prvn´ı a posledn´ı prvek seznamu a jejich indexy. Dalˇs´ı metody se budou pops´any podrobnˇeji:

add(T class *, int =0 ) slouˇz´ı k pˇrid´an´ı prvku do seznamu. Nov´y prvek je pˇrid´an na konec seznamu.

init(int) vytv´aˇr´ı nov´y seznam prvk˚u. Pˇred´avan´ym argumentem je poˇcet ˇ

clen˚u seznamu. Pˇri vytv´aˇren´ı jsou vytvoˇreny i jednotliv´e prvky.

init empty(int) vytv´aˇr´ı nov´y seznam prvk˚u. Pˇred´avan´ym argumentem je

(27)

seznam. T´ım je myˇsleno vytvoˇren´ı a propojen´ı jednotliv´ych uzl˚u sez- namu, kter´e ovˇsem neobsahuj´ı ˇz´adn´a data.

set(int,T class *) nastav´ı uzlu na dan´e pozici zadanou tˇr´ıdu.

make hash() vytvoˇr´ı pole ukazatel˚u na parametry dan´e instance. Pole je uloˇzen´e v datov´e poloˇzce Hash. Poˇcet ukazatel˚u je d´an maxim´aln´ım identifikaˇcn´ım ˇc´ıslem v jiˇz existuj´ıc´ım seznamu. Pˇri vytv´aˇren´ı pole jsou vˇsechny ukazatel´e nastaveny na hodnou NULL. Po vytvoˇren´ı pole se projde cel´y seznam a kaˇzd´emu prvku se podle jeho identifikaˇcn´ıho ˇ

c´ısla pˇriˇrad´ı pozice ve vytvoˇren´em poli. Nakonec je nastaven pˇr´ıznak Hash init. Tento pˇr´ıznak je vynulov´an pˇri zmˇenˇe struktury seznamu (pˇrid´an´ı nov´eho prvku).

operator [ ](int) - tato definice deklaruje oper´ator, pomoc´ı kter´eho lze pˇris- tupovat k jednotliv´ym prvk˚um pole pˇres index. Pˇred navr´acen´ım ukaza- tele na dan´y prvek je ovˇeˇreno, ˇze dan´y prvek m˚uˇze existovat (index nen´ı menˇs´ı neˇz nula a vˇetˇs´ı neˇz maxim´aln´ı poˇcet prvk˚u).

Po t´eto kontrole se urˇc´ı, odkud je nejlepˇs´ı proch´azet seznam k ne- jrychlejˇs´ımu nalezen´ı dan´e pozice. Nejprve je zkontrolov´ano, zda poz- ice hledan´eho prvku nen´ı o jednu vˇetˇs´ı neˇz je pozice aktu´aln´ı. To je prov´adˇeno kv˚uli maxim´aln´ımu zrychlen´ı pˇri proch´azen´ı seznamu prvek po prvku. Pokud to nen´ı splnˇeno zjist´ı se kter´y ze tˇr´ı ukazatel˚u je nejbl´ıˇz (prvn´ı, aktu´aln´ı nebo posledn´ı) a od nˇej se zaˇcne proch´azet seznam.

Ukazatel na aktu´aln´ı prvek je pak pˇresunut na hledan´y prvek.

operator ()(int) - pomoc´ı t´eto definice je vytvoˇren oper´ator umoˇzˇnuj´ıc´ı pˇr´ıstup k jednotliv´ym poloˇzk´am pomoc´ı jejich identifikaˇcn´ıho ˇc´ısla.

Tato metoda je pouˇziteln´a pouze aˇz po vytvoˇren´ı pole. Pˇred navr´acen´ım ukazatele se kontroluje, jestli dan´y prvek m˚uˇze existovat a pak je vr´acena hodnota na pozici odpov´ıdaj´ıc´ı zadan´e hodnotˇe. Dalˇs´ı kontrola v tomto oper´atoru neprob´ıh´a takˇze je moˇzn´e, ˇze vr´acen´a hodnota bude NULL (prvek dan´eho ˇc´ısla nen´ı v tomto seznamu).

(28)

next() vrac´ı ukazatel na prvek nach´azej´ıc´ı se za aktu´aln´ım prvkem v sez- namu. Z´aroveˇn dojde k posunu aktu´aln´ıho prvku. D´ıky tomuto lze rychleji pˇristupovat k prvk˚um nach´azej´ıc´ım se v seznamu za sebou.

Nebezpeˇc´ı pouˇzit´ı spoˇc´ıv´a ale v tom, ˇze aktu´aln´ı prvek je tak´e zmˇenˇen pˇri vyhled´av´an´ı pomoc´ı oper´atoru [ ], nebo pˇri vloˇzen´ı nov´ych dat.

Pokud je aktu´aln´ı prvek na konci seznamu je vr´acena hodnota NULL.

prev() pracuje podobnˇe jako pˇredchoz´ı metoda, jen vrac´ı ukazatel na pˇred- ch´azej´ıc´ı prvek.

(29)

Obr´azek 6: V´ypis tˇr´ıdy CList

1 :template <class T_class>

2 :class CList{

3 : private:

4 : CList_node<T_class> * First;

5 : CList_node<T_class> * Last;

6 : CList_node<T_class> * Aktual;

7 : T_class **Hash;

8 : long int Max_id;

9 : bool Hash_init;

10: unsigned int Flag;

11: long int N_list_node;

12: long int Aktual_poz;

13:

14: void add_empty();

15:public:

16: CList();

17: ~CList();

18: void free();

19: void add(T_class *, int =0 );

20: void init(int);

21: void init_empty(int);

22: void set(int,T_class *);

23: void make_hash();

24: T_class * operator [](int poz);

25: T_class * operator ()(int poz_id);

26: T_class * next() ; 27: T_class * prev() ; 28: T_class * first() ; 29: T_class * last() ;

30: int first_index() const;

31: int last_index() const;

32: int max_id() const;

33: bool data_init()const;

34:};

(30)

5.2 Tˇ r´ıdy

V programu flow123d v popisovan´e verzi jsou implementov´any n´asleduj´ıc´ı tˇr´ıdy:

• ´Uloha (CProblem)

• S´ıt’ (CMesh)

• Uzel (CNode)

• ELement (CElement)

• Stˇena (CSide)

• Hrana (CEdge)

• Materi´al (CMaterial)

• Okrajov´a podm´ınka (CBoundary)

• Poˇc´ateˇcn´ı podm´ınka (CInitial)

• Okrajov´a podm´ınka transportu (CTransport bcd)

• Poˇc´ateˇcn´ı rozloˇzen´ı koncentrace (CConcentration)

• Zdroj (CSource)

• Soused (CNeighbour)

• Matice (CMatrix)

• Chyba (CError)

• Syst´em (CSystem)

Vˇetˇsina tˇechto tˇr´ıd m´a pˇr´ımou vazbu na vstupn´ı soubory (vnˇejˇs´ı datov´e struk- tury), ze kter´ych jsou hodnoty kop´ırov´any do pˇr´ısluˇsn´ych datov´ych ˇclen˚u.

Kromˇe ´Ulohy, S´ıtˇe, Matice a Syst´emu existuj´ı v´yˇse uveden´e tˇr´ıdy v mnoha

(31)

instanc´ıch. Pro jejich uloˇzen´ı byla pouˇzita v´yˇse popsan´a ˇsablona (mimo tˇr´ıdu Chyby, jej´ıˇz instance jsou uloˇzeny pomoc´ı pole a zad´any jsou pˇr´ımo ve zdro- jov´em k´odu).

5.2.1 CProblem

Jde o datovou tˇr´ıdu kter´a v programu flow123d m´a jedinou instanci. Tˇr´ıda je vytvoˇren´a jeˇstˇe pˇred spuˇstˇen´ım hlavn´ı procedury, coˇz zaruˇcuje, ˇze pˇri n´ahl´em ukonˇcen´ı programu, ke kter´emu doch´az´ı pˇri programov´em zjiˇstˇen´ı chyby, do- jde po vyps´an´ı ´udaj˚u k zavol´an´ı destruktoru t´eto tˇr´ıdy. Obsahuje vˇsechny

´

udaje z INI-souboru, podle kter´ych se pak odv´ıj´ı cel´y bˇeh programu.

Deklarace t´eto tˇr´ıdy je znaˇcnˇe obs´ahl´a a proto zde nebude uveden kom- pletn´ı v´ypis (ten je uveden v hlaviˇckov´em souboru problem.hpp), ale zm´ın´ım se jen o nˇekolika podstatn´ych metod´ach t´eto tˇr´ıdy.

get params slouˇz´ı ke kontrole vstupn´ıch argument˚u pˇredan´ych v pˇr´ıkazov´e ˇr´adce. Pokud jsou zad´any neadekv´atnˇe, program vyp´ıˇse oˇcek´avan´y vstup a po stisknut´ı kl´avesy ENTER se ukonˇc´ı.

make slouˇz´ı k naˇcten´ı ˇr´ıd´ıc´ıho souboru. Cel´a metoda je rozdˇelena do dvou ˇ

c´asti ˇreˇsen´ych pomoc´ı priv´atn´ıch metod:

1. Metoda read ini file urˇcen´a k naˇcten´ı ˇr´ıd´ıc´ıho souboru.

2. Metoda check ini values slouˇz´ı ke kontrole, zda byly zad´any vˇsech- ny potˇrebn´e vstupn´ı soubory a jestli z´akladn´ı konstanty jsou zad´any ve spr´avn´em rozsahu moˇzn´ych hodnot.

make mesh slouˇz´ı k naˇcten´ı vstupn´ıch soubor˚u a vytvoˇren´ı seznam˚u os- tatn´ıch tˇr´ıd. To, kter´e seznamy budou vytvoˇreny, z´avis´ı na typu ´ulohy.

D´ale pak jsou vytvoˇren´a indexov´a pole (pomoc´ı parametrizovan´e tˇr´ıdy Clist popsan´e v 5.1.2).

topology slouˇz´ı k propojen´ı jednotliv´ych tˇr´ıd pomoc´ı ukazatel˚u m´ısto iden- tifikaˇcn´ıch ˇc´ısel, kter´a byla zad´ana ve vstupn´ıch souborech. V t´eto

(32)

metodˇe je d˚uleˇzit´e zachovat spr´avn´e poˇrad´ı pˇr´ıkaz˚u (jde ve vˇetˇsinˇe pˇr´ıpadech o metody tˇr´ıdy CMesh) jelikoˇz nˇekter´e metody jiˇz pˇredpo- kl´adaj´ı zadan´e ukazatele pomoc´ı pˇredeˇsl´ych metod.

preprocess slouˇz´ı k nastaven´ı poˇc´ateˇcn´ıch hodnot do jednotliv´ych eleme- ment˚u.

process vˇetv´ı program podle zadan´e ´ulohy. Pro kaˇzdou je vytvoˇrena pˇr´ı- sluˇsn´a metoda poˇc´ıtaj´ıc´ı dan´y ´ukol.

posprocess pˇrev´ad´ı vypoˇcten´e v´ysledky z matice do dan´ych tˇr´ıd a poˇc´ıt´a transport koncentrac´ı (jestliˇze to je souˇc´ast´ı zad´an´ı). Na rozd´ıl od pˇred- choz´ıch metod je tato metoda soukrom´a.

output je posledn´ı uvedenou metodou. Slouˇz´ı k pˇreveden´ı hodnot uloˇzen´ych v jednotliv´ych tˇr´ıd´ach do v´ystupn´ıch soubor˚u.

5.2.2 CMesh

Stejnˇe jako pˇredeˇsl´a tˇr´ıda i tato m´a bˇehem programu jen jednu instanci. Tˇr´ıda slouˇz´ı ke skladov´an´ı ostatn´ıch instanc´ı tˇr´ıd, pˇredevˇs´ım v podobˇe seznamu realizovan´eho pomoc´ı v´yˇse zm´ınˇen´e ˇsablony CList. Pro kaˇzd´y druh existuje jedna instance t´eto parametrizovan´e tˇr´ıdy.

Metody t´eto tˇr´ıdy lze rozdˇelit do nˇekolik skupin podle ˇcinnosti, kterou vykon´avaj´ı:

1. Z´akladn´ı metody. Slouˇz´ı k nastaven´ı ˇci k dotazu na konkr´etn´ı data v tˇr´ıdˇe. Jde pˇredevˇs´ım o nastaven´ı jmen soubor˚u, ze kter´ych jsou pak naˇc´ıt´ana data. Mezi dotazy pak patˇr´ı pˇredevˇs´ım poˇcet prvk˚u nˇejak´e instance (element˚u, uzl˚u . . . ). Tyto metody jsou vˇetˇsinou velmi jedno- duch´e.

2. Metody pro naˇcten´ı dat. Slouˇz´ı pro naˇcten´ı dat ze soubor˚u. Pˇri naˇc´ıt´an´ı je nejprve zjiˇstˇen a pot´e vytvoˇren potˇrebn´y poˇcet instanc´ı dan´eho typu.

(33)

Pot´e se kaˇzd´e instanci pˇred´a jeden ˇr´adek ze vstupn´ıho souboru k nas- taven´ı dat.

Do t´eto skupiny patˇr´ı i metody, kter´e nemaj´ı vstupn´ı soubory, jelikoˇz potˇrebn´e informace jsou jiˇz naˇcteny. Jde o metody pro vytvoˇren´ı sez- namu Stˇen a Hran (v´ıce o tom co je myˇsleno stˇenou a hranou je po- jedn´ano v 5.2.6 a 5.2.5). Vˇsechny metody z t´eto skupiny jsou vol´any pˇri vytv´aˇren´ı s´ıtˇe jiˇz zmiˇnovanou metodou make mesh pˇredeˇsl´e tˇr´ıdy.

3. Metody pro vytvoˇren´ı indexov´eho pole. Tyto metody jsou opˇet velmi jednoduch´e, jelikoˇz se vˇzdy jedn´a jen o zavol´an´ı metody parametrizo- van´e tˇr´ıdy CList.

4. Metody topologie. Metody t´eto skupiny slouˇz´ı k propojen´ı instanc´ı po- moc´ı ukazatel˚u odpov´ıdaj´ıc´ıch identifikaˇcn´ım ˇc´ısl˚um. V pr˚ubˇehu tˇechto metod se nejˇcastˇeji objev´ı chyba n´avrhu s´ıtˇe. T´ım je myˇsleno napˇr´ıklad identifikaˇcn´ı ˇc´ıslo odkazuj´ıc´ı na neexistuj´ıc´ı materi´al.

5. Metody v´ypisu. Jde o metody konverguj´ıc´ı vnitˇrnˇe uloˇzen´a data do v´ystupn´ıch form´at˚u. Jsou dˇelena podle tˇr´ıdy, kter´a se m´a vypsat a vˇet- ˇsinou jde o proch´azen´ı cel´eho seznamu a postupn´e vol´an´ı vypisuj´ıc´ı funkce pro danou tˇr´ıdu.

6. Metody v´ypoˇctu. Jde o pomocn´e v´ypoˇcty slouˇz´ıc´ı k vytvoˇren´ı potˇrebn´ych

´

udaj˚u pro dosazen´ı do hlavn´ı matice a n´aslednˇe pro vyˇcten´ı dat ze z´ıskan´ych v´ysledk˚u a jejich pˇriˇrazen´ı do vnitˇrn´ıch datov´ych struktur.

7. Metody pro tvorbu sousednosti. Posledn´ı skupinou jsou metody pro zjiˇstˇen´ı sousednosti jednotliv´ych prvk˚u.

5.2.3 CNode

Tˇr´ıda urˇcen´a k nesen´ı informace o poloze v prostoru. Kromˇe sv´e polohy obsahuje informaci o velikosti koncentrace v dan´em m´ıstˇe, skal´arn´ı veliˇcinˇe v tomto i pˇredeˇsl´em kroku v´ypoˇctu. Skal´arn´ı veliˇcinou je v modelu tlak.

(34)

Tato tˇr´ıda muˇze b´yt v jin´e formulaci mnohem d˚uleˇzitˇejˇs´ı.

Kromˇe tˇechto veliˇcin urˇcen´ych pˇr´ımo k v´ypoˇctu jsou souˇc´ast´ı tˇr´ıdy dvˇe dy- namicky alokovan´a pole, obsahuj´ıc´ı ukazatele na elementy a stˇeny ke kter´ym tato tˇr´ıda n´aleˇz´ı.

Metody t´eto tˇr´ıdy umoˇzˇnuj´ı pˇr´ıstup k datov´ym ˇclen˚um. Pokud se jedn´a o dynamicky alokovan´a data, je provedena kontrola, zda je dan´y index platn´y.

5.2.4 CElement

Je nejvˇetˇs´ı a nejd˚uleˇzitˇejˇs´ı tˇr´ıdou z hlediska v´ypoˇctu. V t´eto tˇr´ıdˇe se pˇred v´ypoˇctem shromaˇzd’uje vˇetˇsina potˇrebn´ych dat. Nav´ıc obsahuje znaˇcn´y poˇcet odkaz˚u na ostatn´ı objekty.

Metody t´eto tˇr´ıdy se daj´ı rozdˇelit do nˇekolika skupin:

1. Metody urˇcen´e ke ˇcten´ı stavu tˇr´ıdy. Poskytuj´ı pouze jednosmˇern´y pˇr´ıstup k dat˚um a to ˇcten´ı. Pokud jde o data, kter´a jsou ukl´adan´a do pole, je prov´adˇen test, jestli dotaz na hodnotu nen´ı mimo toto pole.

2. Metody urˇcen´e k nastaven´ı dat. Tyto metody ukl´adaj´ı zadanou hod- notu. Ve vˇsech pˇr´ıpadech zaˇc´ınaj´ı slovem set. Pokud se jedn´a o hodnoty ukl´adan´e do pole je provedena kontrola, zda zadan´a pozice nen´ı mimo vytvoˇren´e pole. Spolu s pˇredchoz´ı skupinou tvoˇr´ı nejpoˇcetnˇejˇs´ı metody t´eto tˇr´ıdy.

3. V´ypoˇctov´e metody. Slouˇz´ı k nastaven´ı promˇenn´ych z jiˇz uloˇzen´ych dat nebo pomoc´ı odkaz˚u na jin´e objekty. Jde napˇr´ıklad o v´ypoˇcet tenzoru hydraulick´e vodivosti a jeho inverzi, velikost elementu, v´ypoˇcet stˇredu elementu, . . . .

4. Metody k nastaven´ı odkaz˚u. Jde o metody slouˇz´ıc´ı k propojen´ı vrchol˚u (CNode) se stˇenami (CSide).

5. Metody k vytv´aˇren´ı lok´aln´ı matice a glob´aln´ı matice.

(35)

5.2.5 CSide

Podobnˇe jako pˇredchoz´ı nese tato tˇr´ıda ˇcetn´e odkazy na souvisej´ıc´ı tˇr´ıdy.

D´ale obsahuje geometrick´e ´udaje a ˇc´ast v´ysledk˚u z glob´aln´ı matice. Stˇenou je v tomto programu myˇslena souˇc´ast hranice elementu, jej´ıˇz geometrick´y tvar z´avis´ı na tvaru elementu. Konkr´etnˇe jde o body v pˇr´ıpadˇe ˇcar, ´useˇcky v pˇr´ıpadˇe ploch a troj´uheln´ık˚u v pˇr´ıpadˇe ˇctyˇrstˇen˚u.

Tˇr´ıda stˇeny nem´a ˇz´adn´y zdrojov´y soubor a je vytvoˇrena pomoc´ı jiˇz na- ˇ

cten´ych informac´ı v elementech a uzlech s´ıtˇe. Metody t´eto tˇr´ıdy souvis´ı se z´akladn´ı manipulac´ı s priv´atn´ımi datov´ymi promˇenn´ymi jako je nastaven´ı a pˇred´an´ı hodnoty promˇenn´e. D´ale pak k v´ypoˇctu potˇrebn´ych geometrick´ych vlastnost´ı jako je velikost, pozice stˇredu, apod.

5.2.6 CEdge

Podobnˇe jako pˇredchoz´ı tˇr´ıda neodpov´ıd´a pˇr´ımo t´eto tˇr´ıdˇe ˇz´adn´y vstupn´ı soubor. Jednotliv´e hrany jsou generov´any podle informac´ı z jiˇz hotov´ych stˇen. Hranou je v popisovan´em programu myˇslena mnoˇzina stˇen t´ehoˇz typu, kter´e zauj´ımaj´ı shodnou pozici v prostoru.

5.2.7 CMaterial

Struktura slouˇz´ıc´ı k naˇcten´ı informac´ı ze vstupn´ıho souboru. Pozdˇeji jsou materi´alov´e koeficienty pˇresunuty pˇr´ımo do elementu.

Jedin´ym moˇzn´ym nastaven´ım datov´ych promˇenn´ych t´eto tˇr´ıdy je naˇcten´ı ze souboru. Ostatn´ı metody pak slouˇz´ı pouze k z´ısk´ani konkr´etn´ıch hodnot tˇechto promˇenn´ych.

5.2.8 CBoundary

Tato tˇr´ıda slouˇz´ı k naˇcten´ı a uchov´an´ı potˇrebn´ych ´udaj˚u ke klasifikaci okra- jov´e podm´ınky. Kromˇe koeficient˚u potˇrebn´ych k pops´an´ı podm´ınky obsahuje tato tˇr´ıda odkaz na stˇenu, na kter´e je okrajov´a podm´ınka uplatnˇena a pˇr´ıpadnˇe na pˇr´ısluˇsnou okrajovou podm´ınku transportu.

(36)

Jako v pˇredeˇsl´em pˇr´ıpadˇe nen´ı moˇzn´e konkr´etn´ı promˇenn´e pˇriˇradit libo- volnou hodnotu. Pro vˇetˇsinu promˇenn´ych je jedinou moˇznost´ı, jak zmˇenit jejich hodnotu naˇcten´ı dat ze souboru. Jinak je pˇr´ıstup k promˇenn´ym pouze jednosmˇern´y a je umoˇznˇeno je pouze ˇc´ıst.

5.2.9 CInitial

Pomoc´ı seznamu tˇechto tˇr´ıd jsou naˇcteny poˇc´ateˇcn´ı podm´ınky. Po vytvoˇren´ı topologie v programu jsou jednotliv´e hodnoty poˇc´ateˇcn´ıch podm´ınek nahr´any do pˇr´ısluˇsn´ych promˇenn´ych dan´eho elementu.

Metody t´eto tˇr´ıdy jsou vesmˇes urˇceny pouze pro ˇcten´ı zadan´ych hodnot.

Hodnoty jsou nastaveny pˇri ˇcten´ı ze vstupn´ıho souboru.

5.2.10 CTransport bcd

V t´eto tˇr´ıdˇe je uloˇzen jeden ˇr´adek z TRB-souboru (koncentrace l´atek na hranici studovan´e oblasti). Nastaven´ı tˇechto hodnot se prov´ad´ı pouze pˇri naˇc´ıt´an´ı dat ze vstupn´ıho souboru. Ostatn´ı metody jsou urˇcen´e pouze pro ˇ

cten´ı dan´ych promˇenn´ych.

5.2.11 CConcentration

Seznam tˇechto tˇr´ıd reprezentuje CON-soubor. Po vyˇreˇsen´ı topologie jsou naˇcten´e hodnoty pˇreps´any do pˇr´ısluˇsn´ych promˇenn´ych tˇr´ıdy CElement.

Metody t´eto tˇr´ıdy opˇet slouˇz´ı pouze k z´ısk´an´ı hodnot a nastaven´ı jejich hodnot prob´ıh´a jen pˇri naˇc´ıt´an´ı ze souboru.

5.2.12 CSource

Obsahuje informaci o velikost´ı vtlaˇcen´ı nebo s´an´ı a odkaz na pˇr´ısluˇsn´y ele- ment, kde se tato informace uplatˇnuje.

Metody se neliˇs´ı od pˇredchoz´ıch a slouˇz´ı opˇet k naˇcten´ı hodnot ze souboru a d´ale pak umoˇzˇnuj´ı jednosmˇern´y pˇr´ıstup k dat˚um.

(37)

5.2.13 CNeighbour

Seznam tˇr´ıd CNeighbour je d˚uleˇzit´y pro ˇreˇsen´ı topologie a urˇcen´ı propojen´ı jednotliv´ych stran a element˚u.

Metody tˇr´ıdy lze rozdˇelit podle jejich pouˇzit´ı do nˇekolika skupin:

• Metody urˇcen´e pro ˇcten´ı promˇenn´ych. Slouˇz´ı k z´ısk´an´ı pˇr´ıstup˚u k pro- mˇenn´ym. U nˇekter´ych (jde pˇredevˇs´ım o nastaven´e ukazatele na ostatn´ı tˇr´ıdy) je prov´adˇena kontrola, zda dan´y prvek m˚uˇze existovat, jelikoˇz je uloˇzen v dynamicky alokovan´ych pol´ıch.

• Metody urˇcen´e k naˇcten´ı dat ze souboru.

• Metody urˇcen´e k vytv´aˇren´ı sousednosti. Jde sp´ıˇse o pomocn´e metody, jelikoˇz o hled´an´ı sousednosti se star´a tˇr´ıda CMesh, kter´a m´a lepˇs´ı pˇr´ıstup k ostatn´ım tˇr´ıd´am.

• Metody urˇcen´e k nastaven´ı vnitˇrn´ıch promˇenn´ych. U promˇenn´ych, kter´e jsou dynamicky alokovan´e je prov´adˇena kontrola, jestli je nov´a hodnota vkl´ad´ana do existuj´ıc´ı pozice. Tyto metody se pˇredevˇs´ım pouˇz´ıvaj´ı pˇri vytv´aˇren´ı sousednosti a tvorbˇe topologie.

5.2.14 CMatrix

Tato tˇr´ıda slouˇz´ı k uchov´an´ı glob´aln´ı matice syst´emu, jej´ı prav´e strany a jej´ıho ˇreˇsen´ı. Promˇenn´e t´eto tˇr´ıdy jsou pˇred´avan´e ˇreˇsiˇci soustavy line´arn´ıch rovnic.

Matice soustavy je ukl´ad´ana v komprimovan´e formˇe naz´yvan´e CRS. K uloˇzen´ı je potˇreba tˇr´ı pol´ı. Prvn´ı dvˇe maj´ı tolik ˇclen˚u, kolik je v matici nenulov´ych prvk˚u. Tˇret´ı pole m´a n + 1 hodnot, kde n je poˇcet ˇr´adk˚u. Prvn´ı pole slouˇz´ı k uloˇzen´ı hodnot, Druh´e k uloˇzen´ı index˚u sloupc˚u ve kter´ych se vyskytuj´ı nenulov´e prvky. Tˇret´ı pole ud´av´a zaˇc´atek nov´eho ˇr´adk˚u.

Metody tˇr´ıdy lze rozdˇelit do tˇr´ı skupin podle ˇcinnosti kterou vykon´avaj´ı:

1. Metody pˇr´ıstupu k promˇenn´ym. Jde jak o nastaven´ı dan´ych hodnot, tak i o jejich ˇcten´ı.

(38)

2. Metody k pˇrevodu pro konkr´etn´ı ˇreˇsiˇc. Slouˇz´ı k pˇrevodu do tvaru, kter´y je vyˇzadov´an konkr´etn´ım ˇreˇsiˇcem pouˇzit´ym k v´ypoˇctu ˇreˇsen´ı.

3. Metody ˇcten´ı v´ysledk˚u z ˇreˇsiˇce. Pomoc´ı tˇechto metod jsou v´ystupn´ı data z ˇreˇsiˇce line´arn´ı soustavy pˇrevedena do vnitˇrn´ıch promˇenn´ych t´eto tˇr´ıdy.

5.2.15 CError

Tato tˇr´ıda slouˇz´ı k uchov´an´ı identifikaˇcn´ıho ˇc´ısla chyby, textov´e zpr´avy a urˇcen´ı, zda se jedn´a o program´atorskou chybu ˇci uˇzivatelskou. Pole tˇechto tˇr´ıd je jednou z promˇenn´ych n´asleduj´ıc´ı tˇr´ıdy a je deklarov´ano pˇr´ımo ve zdrojov´em k´odu.

Na rozd´ıl od ostatn´ıch tˇr´ıd jsou promˇenn´e t´eto tˇr´ıdy veˇrejn´e a tato tˇr´ıda nem´a ˇz´adn´e metody k obsluze tˇechto dat.

5.2.16 CSystem

Tato tˇr´ıda neodpov´ıd´a ˇz´adn´e datov´e struktuˇre v p˚uvodn´ım programu a na rozd´ıl od vˇsech ostatn´ıch tˇr´ıd je deklarov´ana ˇcistˇe staticky. To umoˇzˇnuje pouˇz´ıt jejich metod bez nutnosti vytv´aˇret instanci tˇr´ıdy. Pˇr´ıstup k jednotliv´ym metod´am se pak dˇeje pomoc´ı vyps´an´ı cel´eho jm´ena, dvojic´ı dvojteˇcek a n´a- slednˇe jm´ena metody. Uk´azka je uvedena ve v´ypisu (7).

Obr´azek 7: Pouˇzit´ı statick´e metody

CSystem::jmeno_metody(argument1, ...)

Tˇr´ıda CSystem byla vytvoˇrena jako rozhran´ı mezi programem a okol´ım.

Star´a se o otev´ır´an´ı, zav´ır´an´ı, ˇcten´ı a z´apis do souboru, v´ypis zpr´av a v ne- posledn´ı ˇradˇe i o ukonˇcen´ı programu v pˇr´ıpadˇe v´yskytu chyby.

Nyn´ı se bl´ıˇze pod´ıv´ame na jednotliv´e metody:

(39)

print usage() Slouˇz´ı k vyps´an´ı n´avodu na pouˇz´ıv´an´ı. Tato funkce je vol´ana v pˇr´ıpadˇe, ˇze nebyly rozpozn´any argumenty zadan´e pomoc´ı pˇr´ıkazov´e ˇr´adky. Po vyps´an´ı n´avodu program ˇcek´a na potvrzen´ı a pak se ukonˇc´ı.

print info() Slouˇz´ı k v´ypisu dat obsaˇzen´ych v t´eto tˇr´ıdˇe. Tato data byla p˚uvodnˇe ve struktuˇre Problem, avˇsak vzhledem k jejich pouˇzit´ı byly pˇriˇrazeny k t´eto tˇr´ıdˇe. Jde pˇredevˇs´ım o jm´eno LOG-souboru a ˇc´ısla z´achytn´ych bod˚u (argumenty metody checkpoint, viz. n´ıˇze), kter´e se maj´ı vypisovat.

Tato metoda je vol´ana pˇri v´ypisu dat tˇr´ıdy CProblem, jelikoˇz data byla p˚uvodnˇe obsaˇzena ve struktuˇre, ze kter´e byla odvozena.

checkpoint(int) Tato metoda slouˇz´ı pro lad´ıc´ı ´uˇcely. V programu je vol´ana z r˚uzn´ych m´ıst s jin´ym argumentem. Porovn´an´ım hodnoty zadan´eho argumentu s ´udaji z´ıskan´ymi z inicializaˇcn´ıho souboru se zjist´ı, jestli se m´a prov´est v´ypis vnitˇrn´ıch datov´ych struktur. Pokud dan´a hod- nota z´achytn´ych bod˚u nebyla uvedena v INI-souboru, nic se neprovede a program pokraˇcuje jakoby tato metoda nic nedˇelala.

Pˇri zjiˇstˇen´ı shodnosti se spust´ı v´ypis vˇsech vnitˇrn´ıch datov´ych veliˇcin do souboru. Kaˇzd´e datov´e skupinˇe (elementy, stˇeny, . . . ) n´aleˇz´ı jeden soubor, jehoˇz jm´eno je generov´ano automaticky a skl´ad´a se z ˇc´ısla z´achytn´eho bodu, celkov´eho ˇc´ısla po kolik´at´e je v´ypis prov´adˇen a zkratky z n´azvu datov´e tˇr´ıdy, jej´ıˇz seznam je vypisov´an do dan´eho souboru.

fopen( char *,int ) Metoda urˇcena ke zpˇr´ıstupnˇen´ı soubor˚u pro ˇcten´ı nebo z´apis.

Pˇr´ıstup k soubor˚um je ˇreˇsen pomoc´ı proud˚u. Jde o tˇr´ıdy definovan´e mimo tento program (v knihovnˇe iostream ˇci fstream). Proud je ch´ap´an jako posloupnost bajt˚u. C´ılem proud˚u je zapouzdˇren´ı pˇreveden´ı dat z disku a kl´avesnice na obrazovku nebo na disk. V tomto programu jsou pro pˇr´ıstup k soubor˚um pouˇz´ıv´any dvˇe tˇr´ıdy:

(40)

• ofstream pro z´apis do souboru

Metoda fopen pˇrij´ım´a dva argumenty. Prvn´ım je cesta k souboru a dru- h´ym typ otv´ıran´eho souboru. Soubor lze otevˇr´ıt pro:

1. ˇcten´ı - ukazatel urˇcuj´ıc´ı pozici v souboru je nastaven na zaˇc´atek souboru.

2. z´apis - pokud soubor jiˇz existuje je jeho obsah vymaz´an. Pokud neexistuje je vytvoˇren. Vˇzdy je ukazatel na pozici v souboru nas- taven na zaˇc´atek souboru.

3. pˇrid´av´an´ı - obsah souboru je zachov´an a ukazatel je um´ıstˇen na konec souboru.

Pˇrestoˇze by bylo moˇzn´e realizovat ˇcten´ı a z´apis do souboru souˇcasnˇe (existuj´ı instance tˇr´ıdy ifstream i ofstream) nen´ı tato moˇznost v pro- gramu nikde vyuˇzita a proto nebyla realizov´ana.

fclose() Metoda slouˇz´ıc´ı k uzavˇren´ı naposled otevˇren´eho souboru. Pokud nen´ı ˇz´adn´y soubor otevˇren vede vol´an´ı t´eto metody k chybˇe a ukonˇcen´ı programu.

myprintf(int,const char*,...) Metoda urˇcen´a k v´ypisu hl´aˇsen´ı jak na obra- zovku tak do LOG-souboru. Metoda m˚uˇze pˇrij´ımat v´ıce argument˚u, minim´alnˇe vˇsak dva. Prvn´ı slouˇz´ı k urˇcen´ı priority sdˇelen´ı. Priorita m˚uˇze nab´yvat hodnot od jedniˇcky do ˇsestky. Pˇri vypisov´an´ı zpr´av se zadan´a hodnota porovn´a s hodnotou z´ıskanou z INI-souboru. Pokud je hodnota zpr´avy menˇs´ı zpr´ava je vyps´ana. Porovn´an´ı se prov´ad´ı jak pro v´ypis na obrazovku tak pro v´ypis do souboru.

Druh´ym argumentem je text zpr´avy. Text m˚uˇze obsahovat form´atovac´ı znaky umoˇzˇnuj´ıc´ı vloˇzen´ı hodnoty. Pokud jsou form´atovac´ı znaky obsa- hem zpr´avy, je nutn´e jako dalˇs´ı argumenty pˇridat poˇzadovan´e hodnoty.

printf(const char*,...) Slouˇz´ı k z´apisu dat do souboru. Pro pouˇzit´ı t´eto

(41)

moc´ı v´yˇse zm´ınˇen´e metody fopen), jinak vol´an´ı zp˚usob´ı chybu a ukonˇc´ı program. Metoda m˚uˇze jako pˇredchoz´ı pˇrij´ımat v´ıce argument˚u. Prvn´ı je ukazatel na text zpr´avy. Poˇcet ostatn´ıch je z´avisl´y na tvaru textu, konkr´etnˇe jestli jsou v textu pouˇzity form´atovac´ı znaky vyˇzaduj´ıc´ı ukaza- tele na odpov´ıdaj´ıc´ı hodnoty, kter´e budou pˇrevedeny v text a vloˇzeny m´ısto form´atovac´ıch znak˚u.

fgets( char *s, int n) Slouˇz´ı k naˇcten´ı jednoho ˇr´adku z jiˇz otevˇren´eho sou- boru. Metoda pˇrij´ım´a dva argumenty. Prvn´ı je ukazatel na pole, kam se uloˇz´ı naˇcten´y text. Druh´y pak ud´av´a maxim´aln´ı velikost pole.

use system(char*) Metoda slouˇz´ıc´ı ke spouˇstˇen´ı extern´ıch ˇreˇsiˇc˚u pomoc´ı pˇr´ıkazov´e ˇr´adky. Argumentem metody je textov´y ˇretˇezec, kter´y je pˇred´an pˇr´ıkazov´e ˇr´adce.

terminate(char*,int,int,...) Metoda urˇcen´a k pˇreruˇsen´ı vykon´av´an´ı ˇcin- nosti programu. Nejˇcastˇejˇs´ım d˚uvodem je zjiˇstˇen´ı chybov´eho stavu.

Pˇred´avan´e argumenty jsou textov´y ˇretˇezec, ve kter´em je oˇcek´av´an n´azev souboru, odkud je dan´a metoda vol´ana, ˇr´adek na kter´em je vol´an´ı metody uvedeno a posledn´ı povinn´y argument ud´av´a, o jakou chybu se konkr´etnˇe jedn´a. Podle zadan´eho ˇc´ısla se proch´az´ı pole instanc´ı CError a pˇri shodˇe zadan´eho ˇc´ısla a identifikaˇcn´ıho ˇc´ısla chyby je vyps´ana dan´a chyba. Ostatn´ı argumenty jsou z´avisl´e na konkr´etn´ım typu chyby.

V´ypis je prov´adˇen jak na obrazovku tak do LOG-souboru pokud jiˇz byl zad´an jeho n´azev. Po vyps´an´ı chyby se program ukonˇc´ı.

generov´an´ı souboru Na konec se zmiˇnme o skupinˇe metod slouˇz´ıc´ı k vy- generov´an´ı ˇr´ıd´ıc´ıho souboru pro v´ypoˇcet, kter´y je pˇred´an extern´ımu ˇreˇsiˇci. Sem patˇr´ı metody:

1. write rid ghp gi8 2. write rid ghp si2 3. write gm6 in

(42)

4. write m file

Kromˇe v´yˇse uveden´ych metod jsou v t´eto tˇr´ıdˇe definov´any dalˇs´ı, kter´e slouˇz´ı k jednoduch´emu nastaven´ı datov´ych poloˇzek.

(43)

6 Testov´ an´ı ˇ cinnosti programu

V t´eto kapitole se budeme vˇenovat srovn´an´ı novˇe vytvoˇren´eho programu a jeho pˇredlohy.

Pro testov´an´ı funkˇcnosti byly zvoleny dva testovac´ı modely, kter´e jsou souˇc´ast´ı pˇriloˇzen´eho CD. V prvn´ım pˇr´ıpadˇe se jedn´a o dvojrozmˇernou s´ıt’

zn´azornˇenou na obr´azku (8). Tato s´ıt’ obsahuje 677 element˚u a 300 vrchol˚u.

Propojen´ı element˚u s odliˇsnou dimenz´ı je konformn´ı. 1D elementy maj´ı de- setkr´at vˇetˇs´ı hydraulickou vodivost neˇz 2D elementy. Na horn´ım a spodn´ım okraji je zad´ana homogenn´ı Neumanova podm´ınka. Na boˇcn´ıch stˇen´ach je zad´ana Dirichetova podm´ınka, pˇriˇcemˇz na prav´e stranˇe je tlakov´a v´yˇska vˇetˇs´ı.

Obr´azek 8: Testovac´ı s´ıt’ pro dvojrozmˇern´y model

Pro druh´y model byla zvolena trojrozmˇern´a s´ıt’ zn´azornˇen´a na obr´azku (9).

Tato s´ıt’ obsahuje 1 444 element˚u a 322 vrchol˚u. Propojen´ı element˚u s odliˇsnou dimenz´ı je konformn´ı. Hydraulick´a vodivost 1D element˚u je de- setkr´at vˇetˇs´ı neˇz 2D element˚u, kter´e j´ı maj´ı vˇetˇs´ı neˇz 3D elementy. Okrajov´a podm´ınka je na obr´azku (11).

Pro oba modely byly vyzkouˇseny vˇsechny reˇzimy ˇcinnosti programu a po- rovn´any jejich v´ysledky. Srovn´an´ı probˇehlo pomoc´ı programu GMSH, kde bylo srovn´an´ı provedeno graficky. V´ysledky pro dvojrozmˇern´y pˇr´ıpad jsou na

(44)

Obr´azek 9: Testovac´ı s´ıt’ pro trojrozmˇern´y model obr´azc´ıch (13) a (12).

Pro lepˇs´ı n´azornost je u tˇr´ırozmˇern´eho modelu zn´azornˇena jen velikost toku (obr´azky (15) a (14) ).

Druh´e srovn´an´ı probˇehlo pomoc´ı porovn´an´ı obsahu souboru. Pˇri tomto porovn´an´ı je se zjistily rozd´ıly. Ve vˇetˇsinˇe pˇr´ıpadech ˇslo o jinak zaokrouhlenou posledn´ı ˇc´ıslici.

Obr´azek 10: Zn´azornˇen´ı rozd´ıl˚u mezi v´ysledky

1: VP (0.5 , 0.5 , 0.300000000001 ) {0 , 0 , 0.000591382210608 };

2:

3: VP (0.5 , 0.5 , 0.300000000001 ) {0 , 0 , 0.000591382210609 };

Ve v´ypisu (10) je zn´azornˇen myˇslen´y rozd´ıl. Jde o ˇr´adky z vypoˇcten´ych POS souboru pro trojrozmˇern´y model (konkr´etnˇe jde o ˇr´adek 2 897 ). Na

(45)

Obr´azek 11: Testovac´ı s´ıt’ pro trojrozmˇern´y model

6.1 Testov´ an´ı doby v´ ypoˇ ctu

Kromˇe porovn´an´ı v´ystup˚u probˇehlo i srovn´an´ı z hlediska ˇcas˚u v´ypoˇctu, kde si vˇsak nov´y program vedl h˚uˇre. Pˇri dvacetin´asobn´em spouˇstˇen´ı v´ypoˇctu v cyklu, kter´y byl realizov´an pomocn´ym programem, byl namˇeˇren ˇcas jed- noho v´ypoˇctu ˇctyˇri a p˚ul vteˇriny pro p˚uvodn´ı program a pˇet vteˇrin pro pro- gram nov´y. Test byl proveden na dvojrozmˇern´em modelu. Pˇri v´ypoˇctech byl pouˇzit procesor Core 2 duo na 2.33Ghz.

(46)

Obr´azek 12: V´ysledek v´ypoˇctu pro p˚uvodn´ı program 2D modelu

Obr´azek 13: V´ysledek v´ypoˇctu pro nov´y program 2D modelu

(47)

Obr´azek 14: V´ysledek v´ypoˇctu pro p˚uvodn´ı program 3D modelu

Obr´azek 15: V´ysledek v´ypoˇctu pro nov´y program 3D modelu

(48)

7 Z´ avˇ er

Na z´avˇer shrˇnme v´ysledky pr´ace a nejpodstatnˇejˇs´ı rozd´ıly mezi nov´ym a p˚u- vodn´ım programem do nˇekolika bod˚u:

• Nov´y program je ps´an objektovˇe.

• Line´arn´ı obousmˇern´y seznam je implementov´an do parametrick´e tˇr´ıdy.

T´ım doˇslo k oddˇelen´ı zp˚usobu ukl´ad´an´ı dat od dat samotn´ych.

• K soubor˚um se pˇristupuje pomoc´ı proud˚u.

Pˇri pˇrekladu zdrojov´ych k´od˚u obou program˚u (nov´eho i p˚uvodn´ıho), nebyla nalezena spr´avn´a knihovna pro pˇripojen´ı intern´ıho ˇreˇsiˇce a pro vˇetˇsinu extern´ıch ˇreˇsiˇc˚u nepracoval spr´avnˇe ani p˚uvodn´ı program. V uveden´e verzi pracuje program pouze s extern´ım ˇreˇsiˇcem Matlab.

Pˇreveden´ım na objektovˇe orientovan´y program nen´ı v´yvoj ukonˇcen. D´ale je moˇzn´e se zamˇeˇrit:

• Na odstranˇen´ı probl´emu s ˇreˇsiˇci, pˇredevˇs´ım pak s pˇripojen´ım intern´ıho ˇreˇsiˇce nalezen´ım vhodn´e knihovny nebo zmˇenou pˇrekladaˇce.

• Prohlouben´ı objektov´eho pˇr´ıstupu vytvoˇren´ı b´azov´e tˇr´ıdy obsahuj´ıc´ı opakuj´ıc´ı se metody (napˇr. pr´ace s identifikaˇcn´ım ˇc´ıslem ).

• Aplikovat dˇediˇcnost a polymorfismus na tˇr´ıdy, u kter´ych mohou jed- notliv´e instance pˇredstavovat objekty r˚uzn´ych dimenz´ı.

(49)

Reference

[1] Jesse Liberty Nauˇcte se C++ za 21 dn´ı ;Computer Press, Praha, 2002 [2] Maryˇska J., Sever´yn O., Tauchman M., Tondr D.: Modelling of pro-

cesses in fractured rock using FEM/FVM on multidimensional domains.

Journal of Computational and Applied Mathematics, 215/2, 2008, pp.

495-502. ISSN: 0377-0427

[3] C. Geuzaine, J.-F. Remacle, Gmsh Reference Manual, 2008.

[4] Otto Sever´y flow123D hp.pdf

[5] ˇSembera J., Maryˇska J., Kr´alovcov´a J., Sever´yn O.: A novel approach to modelling of flow in fractured porous medium, Kybernetika, Vol. 43/4, pp. 577-588, 2007. ISSN 0023-5954

References

Related documents

Po vytvoˇ ren´ı jednoduch´ eho regresn´ıho modelu metodou nejmenˇ s´ıch ˇ ctverc˚ u zaˇ c´ın´ a f´ aze statistick´ e verifikace a dalˇ s´ıho testov´ an´ı hypot´ ez

Pr´ ace navazuj´ıc´ı na tuto by se mohly zab´ yvat vlivem r˚ uzn´ ych pˇredpomiˇ novaˇ c˚ u na ˇ casovou n´ aroˇ cnost ˇreˇsen´ı pˇri pouˇ zit´ı monolitick´

Pˇredloˇ zen´ a disertaˇ cn´ı pr´ ace se zab´ yv´ a adaptac´ı existuj´ıc´ıho syst´ emu automatick´ eho rozpozn´ av´ an´ı ˇreˇ ci (ASR) pro dalˇs´ı jazyky.. Zamˇ eˇruje

Kromˇ e fin´ aln´ı verze, kter´ a komplexnˇ e zpracov´ av´ a veˇsker´ e dan´ e poˇ zadavky, vzni- kala souˇ casnˇ e i verze, kter´ a fungovala bez pouˇ zit´ı detektoru

Karta je k poˇ c´ıtaˇ ci pˇripojena pomoc´ı sbˇ ernice USB a komunikuje se softwarem FDT CN, ten slouˇ z´ı jako komunikaˇ cn´ı uzel a pˇrev´ ad´ı komunikaci z

Ke kaˇ zd´ emu videu pouˇ zit´ emu pˇri testov´ an´ı byly hod- noty poˇ ctu osob, kter´ e proˇsly a poˇ ctu unik´ atn´ıch osob, kter´ e se ve videu objevily tak´ e

Mezi data ukl´ adan´ a do datab´ aze patˇr´ı informace o pool serveru, ke kter´ emu je tˇ eˇ zebn´ı klient aktu´ alnˇ e pˇripojen, informace o dobˇ e tˇ eˇ zby aktu´

Pokud na vl´ akno kamery doraz´ı poˇ zadavek na odesl´ an´ı zpr´ avy na IM klienta uˇ zivatele, doch´ az´ı k jeho zpracov´ an´ı (viz obr´ azek ˇ c... V prvn´ı f´