cgx voor dolfyn walkthru (10)

Inhoud


Algemeen
Punten definieren
Lijnen aanmaken
Nog meer punten en lijnen...
Vlakken genereren
Lichamen genereren
Spiegelen
Transleren
Meshen
Conversie naar dolfyn

Conversie naar dolfyn

Het abaqus formaat kan (nog?) niet standaard in de dolfyn preprocessor ingelezen worden. De files moeten eerst nog enigszins aangepast worden. Ik heb gebruik gemaakt van het linux/unix programma awk en van de text editor vi. In principe is elke tekst-editor geschikt, bij grote bestanden groeit de liefde voor vi echter snel door de ongelooflijk snelle manier van werken. Je neemt de enigszins spartaanse user-interface dan graag voor lief. De benodigde vi commando's staan steeds in een apart kadertje zodat zij die "gewone" editors willen gebruiken er snel overheen kunnen skippen.

Ik realiseer me dat voor mensen die geen linux/unix ervaring hebben deze bladzijde enigszins bedreigend over kan komen. In de praktijk valt het echter mee. Ik ben in principe niet uitgegaan van enige linux/unix ervaring en heb alle commando's in de beschrijving opgenomen. En als je het proces een of twee keer doorlopen hebt valt het erg mee. Zo heb ik een verfijning van de mesh in cgx en de bijbehorende conversie naar dolfyn volgens onderstaande procedure in een half uur doorlopen. Dat valt toch mee lijkt me. Als er veel animo ontstaat om cgx als preprocessor voor dolfyn te gebruiken kunnen we Henk misschien overhalen om de preprocessor uit te breiden zodat ie de cgx uitvoer meteen kan converteren...

We nemen een kijkje in de directory om te zien welke bestanden door cgx gegenereerd zijn:

$> ls -lrt


:
:
-rw-r--r-- 1 jos users 0 Jul 30 01:29 all.temp
-rw-r--r-- 1 jos users 311875 Jul 30 01:29 all.msh
-rw-r--r-- 1 jos users 0 Jul 30 01:29 ingang.temp
-rw-r--r-- 1 jos users 4421 Jul 30 01:29 ingang.msh
-rw-r--r-- 1 jos users 0 Jul 30 01:29 uitgang.temp
-rw-r--r-- 1 jos users 14563 Jul 30 01:29 uitgang.msh
-rw-r--r-- 1 jos users 0 Jul 30 01:29 tunnel.temp
-rw-r--r-- 1 jos users 21893 Jul 30 01:29 tunnel.msh
-rw-r--r-- 1 jos users 0 Jul 30 01:29 vloer.temp
-rw-r--r-- 1 jos users 11283 Jul 30 01:29 vloer.msh
-rw-r--r-- 1 jos users 0 Jul 30 01:29 spiegel.temp
-rw-r--r-- 1 jos users 21531 Jul 30 01:29 spiegel.msh
-rw-r--r-- 1 jos users 0 Jul 30 01:30 lucht.temp
-rw-r--r-- 1 jos users 182837 Jul 30 01:30 lucht.msh



knip uit de aangemaakte file "lucht.msh" de connectivity van de HEXA's en sla die op in een bestand "dum.cel". De connectivity is te herkennen aan de regel

*ELEMENT, TYPE=C3D8, ELSET=Elucht

die erboven staat. Kopieer nu het blok getallen daaronder naar de file dum.cel. Let erop dat er geen lege regels aan het begin of einde staan!

1057, 1, 2, 3, 4, 5, 6, 7, 8
1058, 2, 9, 10, 3, 6, 11, 12, 7
1059, 9, 13, 14, 10, 11, 15, 16, 12
:
3158, 2640, 2643, 1545, 1544, 2652, 2655, 1141, 1137
3159, 2641, 1548, 1546, 2642, 2653, 602, 1146, 2654
3160, 2642, 1546, 1545, 2643, 2654, 1146, 1141, 2655


vi:

cp lucht.msh dum.cel
vi dum.cel
/ELEMENT
:0,.d
(delete van begin file tot current line)
:wq
(write & quit)


Nu willen we de comma's vervangen door spaties, de celnummering bij 1 laten beginnen en 2 kolommen toevoegen met een 1 in iedere rij om het formaat te krijgen waar de dolfyn preprocessor mee uit de voeten kan Maak hiertoe een file "proccel.awk" aan met de volgende inhoud:

awk '
BEGIN {FS = ","; n = 1}
{
print n $2 $3 $4 $5 $6 $7 $8 $9 " 1 1"
n = n + 1
}'


zorg dat de file executable is met het commando

chmod +x proccel.awk

converteer de file "dum.cel" naar een file "spiegel.cel":

./proccel.awk <dum.cel >spiegel.cel

dit levert:

1 1 2 3 4 5 6 7 8 1 1
2 2 9 10 3 6 11 12 7 1 1
3 9 13 14 10 11 15 16 12 1 1
:
2102 2640 2643 1545 1544 2652 2655 1141 1137 1 1
2103 2641 1548 1546 2642 2653 602 1146 2654 1 1
2104 2642 1546 1545 2643 2654 1146 1141 2655 1 1


De eerste file voor de dolfyn preprocessor is af!


Nu komen de vertices aan de beurt. Knip met vi of een andere editor de coordinaatdefinities uit "all.msh" en sla ze op in een bestand "dum.vrt":

1, -3.00000e-01, -3.00000e-01, 6.00000e-01
2, -2.40000e-01, -2.40000e-01, 6.00000e-01
:
2569, 6.00000e-01, -1.50000e-01, -3.72529e-09
2570, 6.00000e-01, -1.50000e-01, 1.00000e-01
2571, 6.00000e-01, -1.50000e-01, 1.50000e-01


vi:

cp all.msh dum.vrt

vi dum.vrt

dd
(eerste regel weggooien)
/ELEMENT
(zoek string ELEMENT)
0
(begin regel)
:.,$d
(delete van huidige regel tot einde van de file)
:wq
(write & quit)


hier hoeven wel alleen de comma's weg te halen en in een formaat (i9,6x,3g16.9) te brengen. Dat doen we weer met een awk scriptje. Maak hiertoe een bestand "procvrt.awk" aan met de inhoud:


awk '
BEGIN {FS = ","}
{
printf "%9d %16.9g%16.9g%16.9g\n", $1, $2, $3, $4
}'


maak het executable met chmod +x procvrt.awk en maak "spiegel.vrt" aan:

./procvrt.awk <dum.vrt >spiegel.vrt

Het resultaat wordt dan:

1 -0.07071 -0.07071 -3.72529e-09
2 -0.0831465 -0.0555565 -3.72529e-09
3 -0.13736 -0.0979173 -3.72529e-09
:
2653 -1.86265e-09 0.0061914 0.295571
2654 -1.86265e-09 0.0102861 0.295629
2655 -1.86265e-09 0.0142052 0.295906


eventueel controleren met:

head dum.vrt
head spiegel.vrt
tail dum.vrt
tail spiegel.vrt



Nu nog de randvoorwaarden. Daartoe knippen we de connectivity uit "ingang.msh" in een bestand "ingang.bnd"

17, 109, 110, 108, 107
18, 107, 108, 106, 105
19, 105, 106, 103, 101
:
382, 887, 886, 884, 885
383, 885, 884, 880, 882
384, 882, 880, 881, 883


vi:

cp ingang.msh ingang.bnd

vi ingang.bnd

/ELEMENT
(zoek string ELEMENT)
:0,.d
(delete van begin tot huidige regel)
:wq
(write & quit)


We hebben voor dolfyn een eerste kolom nodig die nummert te beginnen met 1, vervolgens de kolommen 2 t/m 4 en dan nog gevolgd door een kolom met "1 0 INLE" We maken een script procingang.awk met de volgende inhoud:


awk '
BEGIN {FS = ","; n = 1}
{
print n $2 $3 $4 $5 " 1 0 INLE"
n = n + 1
}'


weer executable maken met chmod +x procingang.awk en runnen:

./procingang.awk <ingang.bnd >spiegel.bnd

Dat levert voor "spiegel.bnd":

1 109 110 108 107 1 0 INLE
2 107 108 106 105 1 0 INLE
3 105 106 103 101 1 0 INLE
:
62 887 886 884 885 1 0 INLE
63 885 884 880 882 1 0 INLE
64 882 880 881 883 1 0 INLE



Nu moeten de randvoorwaarden voor de uitgang hieraan toegevoegd worden.

Eerst weer de connectivity uit "uitgang.msh" knippen naar een bestand "uitgang.bnd"

581, 1887, 1889, 2013, 2012
582, 2012, 2013, 2011, 2010
583, 2010, 2011, 2008, 2006
:
790, 2572, 2473, 2481, 2578
791, 2578, 2481, 2489, 2584
792, 2584, 2489, 1598, 2590
vi:

cp uitgang.msh uitgang.bnd

vi uitgang.bnd

/ELEMENT
(zoek string ELEMENT)
:0,.d
(delete van begin tot huidige regel)
:wq
(write & quit)


Maak een kopie van het "procingang.awk" script:

cp procingang.awk procuitgang.awk

pas nu de opdracht n=1 aan naar n=65 om verder te nummeren vanaf de reeds gedefinieerde 64 vlakjes. (opvragen met: tail spiegel.bnd) Verander

"1 0 INLE"

in

"2 0 OUTL".

We krijgen dan:


awk '
BEGIN {FS = ","; n = 65}
{
print n $2 $3 $4 $5 " 2 0 OUTL"
n = n + 1
}'


Sla het script op en run het zodanig dat het resultaat toegevoegd wordt aan de reeds bestaande file "spiegel.bnd"

./procuitgang.awk <uitgang.bnd >>spiegel.bnd

met als resultaat:

1 109 110 108 107 1 0 INLE
2 107 108 106 105 1 0 INLE
3 105 106 103 101 1 0 INLE
:
63 885 884 880 882 1 0 INLE
64 882 880 881 883 1 0 INLE
65 1887 1889 2013 2012 2 0 OUTL
66 2012 2013 2011 2010 2 0 OUTL
:
274 2572 2473 2481 2578 2 0 OUTL
275 2578 2481 2489 2584 2 0 OUTL
276 2584 2489 1598 2590 2 0 OUTL



Nu de tunnelwand die we een SYMP randvoorwaarde willen geven

Eerst weer de connectivity uit "tunnel.msh" knippen naar een bestand "tunnel.bnd"

65, 102, 104, 213, 212
66, 212, 213, 211, 210
67, 210, 211, 208, 206
:
1006, 1906, 209, 215, 1910
1007, 1910, 215, 219, 1912
1008, 1912, 219, 223, 1787


vi:

cp tunnel.msh tunnel.bnd

vi tunnel.bnd

/ELEMENT
(zoek string ELEMENT)
:0,.d
(delete van begin tot huidige regel)
:wq
(write & quit)


Maak vervolgens een kopie van het "procingang.awk" script:

cp procingang.awk proctunnel.awk

pas nu de opdracht n=1 aan naar n=277 om verder te nummeren vanaf de reeds gedefinieerde 276 vlakjes. (opvragen met: tail spiegel.bnd) Verander

"1 0 INLE"

in

"3 0 SYMP".

We krijgen dan:


awk '
BEGIN {FS = ","; n = 277}
{
print n $2 $3 $4 $5 " 3 0 SYMP"
n = n + 1
}'


Sla het script op en voer het uit zodanig dat het resultaat toegevoegd wordt aan de reeds bestaande file "spiegel.bnd"

./proctunnel.awk <tunnel.bnd >>spiegel.bnd

De file "spiegel.bnd" moet er nu als volgt uitzien:

1 109 110 108 107 1 0 INLE
2 107 108 106 105 1 0 INLE
3 105 106 103 101 1 0 INLE
:
63 885 884 880 882 1 0 INLE
64 882 880 881 883 1 0 INLE
65 1887 1889 2013 2012 2 0 OUTL
66 2012 2013 2011 2010 2 0 OUTL
:
274 2572 2473 2481 2578 2 0 OUTL
275 2578 2481 2489 2584 2 0 OUTL
276 2584 2489 1598 2590 2 0 OUTL
277 102 104 213 212 3 0 SYMP
278 212 213 211 210 3 0 SYMP
:
586 1906 209 215 1910 3 0 SYMP
587 1910 215 219 1912 3 0 SYMP
588 1912 219 223 1787 3 0 SYMP



tenslotte de vloer/spiegel die we als een WALL randvoorwaarde gaan modelleren. Eerst de vloer

Maak een bestand "vloer.bnd" door de connectivity uit "vloer.msh" te knippen:

33, 102, 77, 76, 101
34, 101, 76, 80, 105
35, 105, 80, 82, 107
:
1054, 2167, 2166, 2170, 2171
1055, 2171, 2170, 2174, 2175
1056, 2175, 2174, 2026, 2029


vi:

cp vloer.msh vloer.bnd

vi vloer.bnd

/ELEMENT
(zoek string ELEMENT)
:0,.d
(delete van begin tot huidige regel)
:wq
(write & quit)


Maak vervolgens een kopie van het "procingang.awk" script:

cp procingang.awk procvloer.awk

pas nu de opdracht n=1 aan naar n=589 om verder te nummeren vanaf de reeds gedefinieerde 588 vlakjes. (opvragen met: tail spiegel.bnd) Verander

"1 0 INLE"

in

"4 0 WALL".

We krijgen dan:


awk '
BEGIN {FS = ","; n = 589}
{
print n $2 $3 $4 $5 " 4 0 WALL"
n = n + 1
}'


Sla het script op en voer het uit zodanig dat het resultaat toegevoegd wordt aan de reeds bestaande file "spiegel.bnd"

./procvloer.awk <vloer.bnd >>spiegel.bnd

de file "spiegel.bnd" wordt nu:

1 109 110 108 107 1 0 INLE
2 107 108 106 105 1 0 INLE
3 105 106 103 101 1 0 INLE
:
63 885 884 880 882 1 0 INLE
64 882 880 881 883 1 0 INLE
65 1887 1889 2013 2012 2 0 OUTL
66 2012 2013 2011 2010 2 0 OUTL
:
275 2578 2481 2489 2584 2 0 OUTL
276 2584 2489 1598 2590 2 0 OUTL
277 102 104 213 212 3 0 SYMP
278 212 213 211 210 3 0 SYMP
:
587 1910 215 219 1912 3 0 SYMP
588 1912 219 223 1787 3 0 SYMP
589 102 77 76 101 4 0 WALL
590 101 76 80 105 4 0 WALL
:
746 2167 2166 2170 2171 4 0 WALL
747 2171 2170 2174 2175 4 0 WALL
748 2175 2174 2026 2029 4 0 WALL





En nu dezelfde oefening voor de laatste keer: Maak een bestand "spiegeltje.bnd" door de connectivity uit "spiegel.msh" te knippen (let erop dat we de naam "spiegel.bnd" al gebruiken voor alle randvoorwaarden samen. Hier gebruiken we dus andere naam nl: "spiegeltje.bnd"!):

1, 17, 19, 15, 13
2, 13, 15, 11, 9
3, 9, 11, 6, 2
:
578, 2644, 2560, 2564, 2647
579, 2647, 2564, 2568, 2650
580, 2650, 2568, 602, 2653


vi:

cp spiegel.msh spiegeltje.bnd
Gebruik NIET de naam spiegel.bnd!!
vi spiegeltje.bnd

/ELEMENT
(zoek string ELEMENT)
:0,.d
(delete van begin tot huidige regel)
:wq
(write & quit)


Maak vervolgens een kopie van het "procingang.awk" script:

cp procingang.awk procspiegel.awk

pas nu de opdracht n=1 aan naar n=749 om verder te nummeren vanaf de reeds gedefinieerde 748 vlakjes. (opvragen met: tail spiegel.bnd) Verander

"1 0 INLE"

in

"5 0 WALL".

We krijgen dan:


awk '
BEGIN {FS = ","; n = 749}
{
print n $2 $3 $4 $5 " 5 0 WALL"
n = n + 1
}'


Sla het script op maar weer runnen zodanig dat het resultaat toegevoegd wordt aan de reeds bestaande file "spiegel.bnd"

./procspiegel.awk <spiegeltje.bnd >>spiegel.bnd

met als resultaat:

1 109 110 108 107 1 0 INLE
2 107 108 106 105 1 0 INLE
3 105 106 103 101 1 0 INLE
:
63 885 884 880 882 1 0 INLE
64 882 880 881 883 1 0 INLE
65 1887 1889 2013 2012 2 0 OUTL
66 2012 2013 2011 2010 2 0 OUTL
:
275 2578 2481 2489 2584 2 0 OUTL
276 2584 2489 1598 2590 2 0 OUTL
277 102 104 213 212 3 0 SYMP
278 212 213 211 210 3 0 SYMP
:
587 1910 215 219 1912 3 0 SYMP
588 1912 219 223 1787 3 0 SYMP
589 102 77 76 101 4 0 WALL
590 101 76 80 105 4 0 WALL
:
747 2171 2170 2174 2175 4 0 WALL
748 2175 2174 2026 2029 4 0 WALL
749 17 19 15 13 5 0 WALL
750 13 15 11 9 5 0 WALL
:
1054 2644 2560 2564 2647 5 0 WALL
1055 2647 2564 2568 2650 5 0 WALL
1056 2650 2568 602 2653 5 0 WALL



We hebben nu genoeg ingredienten voor de preprocessor van dolfyn, te weten "spiegel.bnd", "spiegel.cel" en "spiegel.vrt"

We runnen nu de preprocessor van dolfyn:

./preprocessor

Dolfyn PreProcessor
Input casename:


spiegel


Using spiegel as input
Opening spiegel.dbg
File spiegel.dbg opened
Opening vertex file
Opening spiegel.vrt
:
Opening spiegel.cel
File spiegel.cel opened
:
Opening spiegel.bnd
File spiegel.bnd opened
:
Dump geometry file
Opening spiegel.geo
File spiegel.geo opened



daarna spiegel.din aanmaken om de berekening te specificeren:


debug= 0
steps= 600
ngradient=1
#
# stuurparameters
#
Gamma,0.5
relax,0.35,0.15,0.35 # urf vel. pres. temp. scal.
rtol,0.1,0.05,0.1
atol,1.e-8,1.e-8,1.e-8
double,p
#double,uvw
#
# stofeigenschappen
#
VisLam=0.000001
Density=1.2
Pref=1

#thermal
turbulence,ke
#transient,0.01
#
# *** randvoorwaarden ***
#
boundary,1 # inlaat
inlet
0.1 0 0
1.2 Dens in
293.0 Tin
#
boundary,2 # uitlaat
outlet
1.0
#
boundary,3 # tunnel muren en dak
symp
#
boundary,4 # vloer
wall
noslip
0. 0.0 0.0
fixed
273
#
boundary,5 # spiegel
wall
noslip
0. 0.0 0.0
fixed
273



En dan kunnen we dolfyn opstarten!. We starten het programma zodanig dat de uitvoer naar een bestand "spiegel.log" gestuurd wordt. Kunnen we later alles nog eens rustig nalezen

$>./dolfyn >spiegel.log

Verder lijkt er niets te gebeuren. Maar dolfyn heeft een vraag gesteld welke case we willen berekenen. Deze vraag staat echter in het logbestand en is niet naar het scherm gegaan. Het antwoord weten we echter wel! We tikken in:
spiegel


Om het proces te volgen openen we een nieuw shell venster, gaan naar de werkdirectory en volgen de logfile met:

tail -f spiegel.log

Na een minuut of drie zijn de gevraagde 600 iteraties klaar. De volgende uitvoerbestanden zijn in de werkdirectory verschenen:

spiegel_Au.ps
matrix.dx
spiegel.res
spiegel.odx
spiegel.log


In de logfile "spiegel.log" kan het convergentieproces bekeken worden. De resultaten staan in de file "spiegel.odx" in een formaat dat rechtstreeks geschikt is voor OpenDX. Voor een echte analyse is het aantal iteraties m.i. nog niet voldoende en bovendien is de elementverdeling nog erg grof. Het verfijnen van de mesh en het converteren naar dolfyn invoer is misschien een goede oefening om het proces nog eens te doorlopen....

We kunnen in ieder geval al wel een plaatje maken met OpenDX:



Aanpassingen in de geometrie kunnen weer grafisch met cgx gedaan worden, hiervoor wordt verwezen naar de uitgebreide HTML documentatie bij het pakket. Ik wil ook nog wijzen op de mogelijkheid om met een teksteditor de *.fbd invoerfile rechtstreeks te bewerken. Het formaat is vrij eenvoudig te doorzien en het verleggen van een paar coordinaten of het aanpassen van het aantal element per lijn gaat zo razendsnel!




de invoer bestanden die bij het beschreven proces gemaakt zijn kunnen hier gedownload worden:

cgx file "spiegel.fbd" (cgx opstarten met: cgx -b spiegel.fbd)

(unzippen met gunzip spiegel.fbd.gz)

awk scripts "proccel.awk", "procspiegel.awk", "procuitgang.awk", "procvrt.awk", "procingang.awk", "proctunnel.awk" en "procvloer.awk"

(uitpakken met gunzip awkscripts.tar.gz gevolgd door tar xvf awkscripts.tar)

netwerkje om OpenDX plots te maken

(uitpakken met gunzip dxnetwerk.tar.gz gevolgd door tar xvf dxnetwerk.tar)




Met dank aan Henk Krüs voor de ondersteuning bij de stromingsberekeningen en aan Frank Bekkers voor de hulp bij het compileren van cgx

Vorige Begin  


Cyclone www.dolfyn.net