"Gerris par un nul" page 2

Rappel: calculer l'écoulement dans un tuyau avec une constriction. Comparer à FreeFem++ et aux calculs de l'article Lagrée Chouly.


5)  Exemple FINAL, comparaison RNSP et FF++

On augmente maintenant la taille de la bosse de manière à obtenir séparation derrière la bosse, on modifie run.sh et pois2.gfs

# #

######################################################################
# Poiseuille par PYL, sauver dans "pois2.gfs"
# 01/10
# valeurs de dimension
Define L0 10
Define H0 1
Define a 0.3
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) }
# pour essayer de recupere le frottement, ca ne marche pas!
   Init { istep = 1 } {
             TU = dy("U") }
# 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 "P
aroi_bas.dat"
  OutputLocation { istep = 10 } VAL/Centre.data  Paroi_bas.dat
#test d'arret affaibli
  EventStop { istart = 20 istep = 1} U 1e-1 DU
#
  OutputScalarStats { istep = 5 } {
       awk '{
          print $3,$5;
          fflush (stdout);
          }' > d2} { v = D2 }

}
#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  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 ceci dans run.sh (on le sauve  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.3*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/k* | tail -n 1 ` > VAL/a.dat


 le fichier run.sh crée un fichier Parois_bas.dat (le bas du canal en fait). Les champs sont sauvés le long des points définis dans ce fichier et mis dans le fichier
VAL/Centre.data
suivant:
# 1:T 2:X 3:Y 4:Z 5:P 6:Pmac 7:U 8:V 9:DU
Ils sont tous sauvés. Mais on ne veut que le temps final. Avec fin.sh on extrait le temps final et on met le dernier paquet dans le fichier Cf.data que l'on trace.
on trace la pression calculée et la pression calculée avec RNSP FD et NS

p[-5:5][-.05:.1]'VAL/a.dat'u ($1*10):($2) t 'wall/10',''u ($1*10):($4)t'gerris' w d\
  ,'../RNSP/kag/T.OUT' u ($1-5):($3-.02)t'RNSP'w l,'VAL/Cf.data'u 2:5t'gerris'w d,'../RNSP/p0_RNS_a0p3Re750.txt' u ($1-5):2t'FF++' w l

A droite on trace le frottement pariétal qui n'est toujours pas calculable facilement par gerris.

s j



j


page précédente


Cas suivant ...