###################################################################### # Poiseuille par PYL, sauver dans "pois0.gfs" # 01/10 # definition de 1 boite avec 0 connections 1 0 GfsSimulation GfsBox GfsGEdge{} { # valeur du Reynolds 250 SourceViscosity {} 1./250 # precision 2**(-4.) = 1/16=0.03 Refine 4 # valeurs qui vont sortir pour entrer dans gfsview # tous les 10 pas de calcul OutputSimulation { istep = 10 } stdout } #conditions aux limites GfsBox { # a gauche profil left = GfsBoundary { GfsBcDirichlet U (1 - (y+0.5))*(y+0.5) } # a droite pression imposee, invariance de U en translation right = GfsBoundary { GfsBcDirichlet P 0 GfsBcNeumann U 0 } # en haut vitesse nulle top = GfsBoundary { GfsBcDirichlet U 0 GfsBcDirichlet V 0 } # en bas vitesse nulle bottom = GfsBoundary { GfsBcDirichlet U 0 GfsBcDirichlet V 0 } } # fin de fichier ###################################################################### on le sauve dans pois0.gfs pour le lancer: gerris2D pois0.gfs | gfsview2D la fenêtre de gfsview s'ouvre En cliquant sur "Linear " on a la pression, en cliquant sur "Vectors" on peut obtenir l'image suivante que l'on voit à droite |
![]() oh le beau Poiseuille |
##################################################################### # Poiseuille par PYL, sauver dans "pois0.gfs" # 01/10 # definition de 1 boite avec 0 connections 1 0 GfsSimulation GfsBox GfsGEdge{} { # valeur du Reynolds 250 SourceViscosity {} 1./250 # precision 2**(-4.) = 1/16=0.03 Refine 4 # Poiseuille entre -0.5 et 0.5 donne au temps initial Init {} { U = 0 } # sortie tous les 10 pas de calculs du temps en cours OutputTime { istep = 10 } stderr # valeurs qui vont sortir pour entrer dans gfsview # tous les 10 pas de calcul OutputSimulation { istep = 10 } stdout # arret lorsque la variation de U devient "petite" EventStop { istep = 10 } U 0.5e-8 DU } #conditions aux limites GfsBox { # a gauche profil left = GfsBoundary { GfsBcDirichlet U (1 - (y+0.5))*(y+0.5) } # a droite pression imposee, invariance de U en translation right = GfsBoundary { GfsBcDirichlet P 0 GfsBcNeumann U 0 } # en haut vitesse nulle top = GfsBoundary { GfsBcDirichlet U 0 GfsBcDirichlet V 0 } # en bas vitesse nulle bottom = GfsBoundary { GfsBcDirichlet U 0 GfsBcDirichlet V 0 } } # fin de fichier ###################################################################### |
Dans
le fichier "vue0.gfv
" il y a: # GfsView 2D View { tx = 0 ty = 0 sx = 1 sy = 1 sz = 1 q0 = 0 q1 = 0 q2 = 0 q3 = 1 fov = 30 r = 0.3 g = 0.4 b = 0.6 res = 1 lc = 0.001 reactivity = 0.1 } Vectors { r = 0 g = 0 b = 0 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } U V { scale = 1.219 use_scalar = 0 } Linear { r = 1 g = 1 b = 1 shading = Constant maxlevel = -1 } { n.x = 0 n.y = 0 n.z = 1 pos = 0 } P { amin = 1 amax = 1 cmap = Jet } 0 { reversed = 0 use_scalar = 1 } |
# # ###################################################################### # Poiseuille par PYL, sauver dans "pois1.gfs" # 01/10 # valeurs de dimension Define L0 10 Define H0 1 Define a 0.01 Define Re 750. 1 0 GfsSimulation GfsBox GfsGEdge{} { # attention la boite est L0xL0 PhysicalParams { L = L0 } # on s'arrete au bout du temps 500 quoiqu'il arrive Time {end = 500 } # viscosite Re SourceViscosity {} 1./Re # le domaine est de longuer L0, les deux plans sont entre y=0 et y=H0 # paroi sup Solid (-y+H0-a*H0*exp(-pow((x)/H0,2))) #paroi inf Solid ( y+0.-a*H0*exp(-pow((x)/H0,2))) # au moins 64 cases, soir dx=0.16 Refine 6 # raffinement pour la paroi... RefineSolid 9 # on a Poiseuille entre y=0 et y=H0 Init {} { U = (1 - (y/H0))*(y/H0) } # adaptation automatique de maillage sur la vorticite # dx=L0/2^7=10/128=0.08 AdaptVorticity { istep = 1 } { maxlevel = 7 cmax = 1e-2 } OutputSimulation { istep = 10 } stdout OutputTime { istep = 10 } stderr # sortie des valeurs dans un fichier OutputSimulation { step= 10 } VAL/knd-%f.gfs OutputSimulation { start = end } VAL/end.gfs #test d'arret EventStop { istart = 20 istep = 1} U 5e-3 DU } #condition de vitesse en entree donnee # et pression nulle en sortie ainsi que dx(U)=0 GfsBox { left = GfsBoundary { GfsBcDirichlet U (1 - (y/H0))*(y/H0)} right = GfsBoundary { GfsBcDirichlet P 0 GfsBcNeumann U 0 } } ##################################################################### on le sauve dans pois1.gfs on crée un directory VAL mkdir VAL on lance avec l'option "-m" qui permet de tenir compte des "Define" gerris2D -m pois1.gfs | gfsview2D vue1.gfv |
voila
la pression avec gnuplot![]() on l'obtient grâce à l'utilitaire qui permet de récupérer des valeurs: gfs2oogl2D -c P -o -i < VAL/end.gfs > VAL/a.dat on peut sortir le fichier de pression et le tracer dans gnuplot: gnuplot> p'gerris_par_un_nul/VAL/val.dat' u 1:4,-(x-.5)/750*2*10 attention, il y a un bug, car la sortie de gfs2oogl2D donne une sortie entre -0.5 et 0.5. mais il faut en plus multiplier par 10 |
# # ###################################################################### # Poiseuille par PYL, sauver dans "pois1.gfs" # 01/10 # valeurs de dimension Define L0 10 Define H0 1 Define a 0.01 Define Re 750. 1 0 GfsSimulation GfsBox GfsGEdge{} { # attention la boite est L0xL0 PhysicalParams { L = L0 } # on s'arrete au bout du temps 500 quoiqu'il arrive Time {end = 500 } # viscosite Re SourceViscosity {} 1./Re # le domaine est de longuer L0, les deux plans sont entre y=0 et y=H0 # paroi sup Solid (-y+H0-a*H0*exp(-pow((x)/H0,2))) #paroi inf Solid ( y+0.-a*H0*exp(-pow((x)/H0,2))) # au moins 64 cases, soir dx=0.16 Refine 6 # raffinement pour la paroi... RefineSolid 9 # on a Poiseuille entre y=0 et y=H0 Init {} { U = (1 - (y/H0))*(y/H0) } # adaptation automatique de maillage sur la vorticite # dx=L0/2^7=10/128=0.08 AdaptVorticity { istep = 1 } { maxlevel = 7 cmax = 1e-2 } OutputSimulation { istep = 10 } stdout OutputTime { istep = 10 } stderr # sortie des valeurs dans un fichier OutputSimulation { step= 10 } VAL/knd-%f.gfs OutputSimulation { start = end } VAL/end.gfs # sortie sur une ligne au milieu definie par le fichier "Paroi_bas.dat" OutputLocation { istep = 10 } VAL/Centre.data Paroi_bas.dat #test d'arret EventStop { istart = 20 istep = 1} U 5e-3 DU } #condition de vitesse en entree donnee # et pression nulle en sortie ainsi que dx(U)=0 GfsBox { left = GfsBoundary { GfsBcDirichlet U (1 - (y/H0))*(y/H0)} right = GfsBoundary { GfsBcDirichlet P 0 GfsBcNeumann U 0 } } ##################################################################### on le sauve dans pois1.gfs on crée un directory VAL mkdir VAL on lance avec l'option "-m" qui permet de tenir compte des "Define" on a un autre fichier de vue vue1.gfv gerris2D -m pois1.gfs | gfsview2D vue1.gfv |
On
met ce ceci dans run.sh #!/bin/bash # # export LANG=C echo "lancement du calcul" rm VAL/knd* file="Paroi_bas.dat" awk 'BEGIN{ L0 = 10 H0 = 1 r = 0.*H0 wd = L0/2. xc = -0.*L0/10. print -0.501 * L0 " " 0.0 " " 0.0 for (x = -wd ; x <= wd; x += 0.01) print x " " (H0/2. + r*exp(-(x-xc)/H0*(x-xc)/H0)) " 0 "; print 0.501 * L0 " " 0.0 " " 0.0 }' > $file gerris2D -m pois1.gfs | gfsview2D vue1.gfv echo "fin normale ?" gfs2oogl2D -c P -o -i < VAL/end.gfs > VAL/a.dat On peut mettre ensuite ceci dans le fichier fin.sh #!/bin/bash # # export LANG=C echo "liigne de test dans z.txt" echo "awk '{if (\$1>=tt) print \$0 }' VAL/Centre.data > VAL/Cf.data" > z.txt echo "extrait le temps final mis dans tfinal.txt" tfinal=`tail -n 1 VAL/Centre.data` echo $tfinal > tfinal.txt awk '{print $1}' tfinal.txt > dump.txt echo `cat dump.txt` rm tfinal.txt echo "substit" echo "s/tt/"`cat dump.txt`"/g">b.txt sed `cat b.txt` z.txt>zz.txt echo `head -n 1 VAL/Cf.data` echo "transfer des dernieres donnes dans Cf.data" source zz.txt rm b.txt rm z.txt rm zz.txt gfs2oogl2D -c P -o -i < `ls VAL/* | tail -n 1 ` > VAL/a.dat |
# # ###################################################################### # Poiseuille par PYL, sauver dans "pois2.gfs" # 01/10 # valeurs de dimension Define L0 10 Define H0 1 Define a 0.1 Define Re 750. 1 0 GfsSimulation GfsBox GfsGEdge{} { # attention la boite est L0xL0 PhysicalParams { L = L0 } # on s'arrete au bout du temps 500 quoiqu'il arrive Time {end = 500 } # viscosite Re SourceViscosity {} 1./Re # le domaine est de longuer L0, les deux plans sont entre y=0 et y=H0 # paroi sup Solid (-y+H0-a*H0*exp(-pow((x)/H0,2))) #paroi inf Solid ( y+0.-a*H0*exp(-pow((x)/H0,2))) # au moins 64 cases, soir dx=0.16 Refine 6 # raffinement pour la paroi... RefineSolid 9 # on a Poiseuille entre y=0 et y=H0 Init {} { U = (1 - (y/H0))*(y/H0) } # adaptation automatique de maillage sur la vorticite # dx=L0/2^7=10/128=0.08 AdaptVorticity { istep = 1 } { maxlevel = 7 cmax = 1e-2 } OutputSimulation { istep = 10 } stdout OutputTime { istep = 10 } stderr # sortie des valeurs dans un fichier OutputSimulation { step= 10 } VAL/knd-%f.gfs OutputSimulation { start = end } VAL/end.gfs # sortie sur une ligne au milieu definie par le fichier "Paroi_bas.dat" OutputLocation { istep = 10 } VAL/Centre.data Paroi_bas.dat #test d'arret EventStop { istart = 20 istep = 1} U 5e-3 DU } #condition de vitesse en entree donnee # et pression nulle en sortie ainsi que dx(U)=0 GfsBox { left = GfsBoundary { GfsBcDirichlet U (1 - (y/H0))*(y/H0)} right = GfsBoundary { GfsBcDirichlet P 0 GfsBcNeumann U 0 } } ##################################################################### on le sauve dans pois2.gfs on vérifie que le directory VAL existe tjrs, sinon mkdir VAL on lance avec l'option "-m" qui permet de tenir compte des "Define" gerris2D -m pois2.gfs | gfsview2D vue1.gfv |
On
met ce ceci dans run.sh #!/bin/bash # # export LANG=C echo "lancement du calcul" rm VAL/knd* file="Paroi_bas.dat" awk 'BEGIN{ L0 = 10 H0 = 1 r = 0.1*H0 wd = L0/2. xc = -0.*L0/10. print -0.501 * L0 " " 0.0 " " 0.0 for (x = -wd ; x <= wd; x += 0.01) print x " " (0.001 + r*exp(-(x-xc)/H0*(x-xc)/H0)) " 0 "; print 0.501 * L0 " " 0.0 " " 0.0 }' > $file gerris2D -m pois2.gfs | gfsview2D vue1.gfv echo "fin normale ?" gfs2oogl2D -c P -o -i < VAL/end.gfs > VAL/a.dat On peut mettre ensuite ceci dans le fichier fin.sh #!/bin/bash # # export LANG=C echo "liigne de test dans z.txt" echo "awk '{if (\$1>=tt) print \$0 }' VAL/Centre.data > VAL/Cf.data" > z.txt echo "extrait le temps final mis dans tfinal.txt" tfinal=`tail -n 1 VAL/Centre.data` echo $tfinal > tfinal.txt awk '{print $1}' tfinal.txt > dump.txt echo `cat dump.txt` rm tfinal.txt echo "substit" echo "s/tt/"`cat dump.txt`"/g">b.txt sed `cat b.txt` z.txt>zz.txt echo `head -n 1 VAL/Cf.data` echo "transfer des dernieres donnes dans Cf.data" source zz.txt rm b.txt rm z.txt rm zz.txt gfs2oogl2D -c P -o -i < `ls VAL/* | tail -n 1 ` > VAL/a.dat |