Nahajate se tukaj

Primer: Lid-driven cavity

Za  test delovanja kopiramo vse primere iz navodil in izberemo osnovni primer Lid-driven cavity.

[test03@prelog OpenFOAM]$ mkdir -p $FOAM_RUN
[test03@prelog OpenFOAM]$ cp -r $FOAM_TUTORIALS $FOAM_RUN 

                      U  =  1 m/s
                        x







d = 0.1 m


               y

                    x
\relax \special {t4ht=

 

Figure 2.1: Geometrija  za primer lid driven cavity.

Premaknemo se v imenik s primerom, naredimo mrežo in poženemo simulacijo

[test03@prelog OpenFOAM]$ cd $FOAM_RUN/tutorials/incompressible/icoFoam/cavity
[test03@prelog cavity]$ blockMesh
[test03@prelog cavity]$ icoFoam

Povečajmo gostoto mreže popravkom datoteke constant/polyMesh/blockMeshDict tako, da mrežo 20x20x1 povečamo na 500x500x1

blocks
(
    hex (0 1 2 3 4 5 6 7) (500 500 1) simpleGrading (1 1 1)
);

S tem se je velikost celice zmanjšala za 25 krat in tudi 625 krat večje število celic. Ker želimo ohraniti osnovni primer kar najbolj nedotaknjen, je potrebno prilagoditi še število korakov, da zadostimo Courantovem kriteriju. To naredimo tako, da popravimo datoteko system/controlDict in popravimo števio korakov z 20 na 1000 ter pogostost zapisov na

deltaT 0.0001;
writeControl timeStep;
writeInterval 1000;

Ponovimo mreženje in poženemo simulacijo

[test03@prelog cavity]$ blockMesh
[test03@prelog cavity]$ icoFoam > log &

Čas se sedaj bistveno poveča in je zanj potrebno več kote en dan medtem ko je bilo za izhodiščni primer potrebno manj kot sekunda. Izvajanju v ozadju lahko sledimo z

[test03@prelog cavity]$ tail -f log

Za skrajšanje časa problem paraleliziramo z razdelitvijo območja na povezana podobmočja, ki se potem izvajajo na ločenih procesorjih. Za razdelitev na podobmočja uporabimo datoteko primera razlitja jezu, ki razdeli mrežo na štiri podombočja.

[test03@prelog cavity]$ cp $FOAM_RUN/tutorials/multiphase/interFoam/ras/damBreak/system/decomposeParDict system/

Za razdelitev na podobmočja uporabimo ukaz

[test03@prelog cavity]$ decomposePar

Pri tem se izdelajo podimeniki processor[0-3], ki so osnova za računanje posameznih procesov. Paralelno simulacijo poženemo z ukazom:

[test03@prelog cavity]$ bsub -n 4 mpirun icoFoam -parallel

Za povečanje števila procesov, je potrebno razdeliti na še več poddomen. Za avtomatsko razdelitev zahtevnejših območij se lahko uporabijo tudi orodja kot je metis ali scotsh. V primeru kavitacije je razdeljevanje enostavno. Za spremembo na 12 procesorjev je potrebno popraviti datoteko system/decomposeParDict na

numberOfSubdomains 12;

method          simple;

simpleCoeffs
{
    n               ( 3 4 1 );
    delta           0.001;
}

Pred ponovno razdelitvijo na podobmočja je potrebno pobrisati datoteko procesorjev in zagnati z novim številom procesov

[test03@prelog cavity]$ rm -rf processor* 
[test03@prelog cavity]$ decomposePar
[test03@prelog cavity]$ bsub -n 12 mpirun icoFoam -parallel