Cas Test 3D

Pour le Cas Test 3D, le modèle k-epsilon est choisi comme modèle de fermeture pour résoudre l'équation de Navier-Stokes moyennée. A noter que le modèle k-Epsilon n'est pas adapté à notre situation puisqu'il est utilisé pour des écoulements parallèles pleinement turbulent (typiquement un écoulement en conduite). Néanmoins, pour disposer de vitesses de convergence rapide il sera choisi. Préférez le Reynolds Stress Model ou le k-omega SST pour l'obtention de résultats plus cohérents.

La suite est destinée à l'explicitation des divers fichiers à paramètrer pour lancer la simulation.

 

 

Turbulent-Stationnaire

0

Puisque nous choisissons de simuler un écoulement turbulent, il est nécessaire de définir les conditions aux limites pour trois grandeurs en plus de la pression et de la vitesse. Il s'agit de la viscosité turbulente, du taux de dissipation visqueux et de l'énergie cinétique turbulente.

 

 

P

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "0";
    object       p;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
dimensions             [0 2 -2 0 0 0 0]        // attention, P est normalisé par la densité du fluide

internalField           uniform 0;        // le champ de pression relatif intérieur est nul

boundaryField
{
     disque_haut
     {
          type                      zeroGradient;        //pas de gradient normal pour toutes les grandeurs
      }
     pourtour_externe
     {
          type                      zeroGradient;    
      }
     disque_externe
     {
          type                      zeroGradient;    
      }
     helice                              
     {                                     
          type                      zeroGradient;
      }
}
 

/ / ******************************************************************************** / /

 

 

U

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "0";
    object       U;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
dimensions                  [0 1 -1 0 0 0 0]

internalField                uniform (0 0 0);       // le champ de vitesse intérieur est nul

boundaryField
{
     disque_haut
     {
          type                      fixedValue;    
          value                    uniform (0 0 0);
      }
     pourtour_externe
     {
          type                      fixedValue;    
          value                    uniform (0 0 0);
      }
     disque_externe
     {
          type                      fixedValue;    
          value                    uniform (0 0 0);
      }
     helice                        // le vecteur vitesse est nul sur disque_haut, pourtour_externe,
     {                               // disque_bas et helice, on considère la condition de non glissement
          type                      fixedValue;    
          value                    uniform (0 0 0);
      }
}
 

/ / ******************************************************************************** / /

 

 

Les trois grandeurs supplémentaires à configurer.

 

nut

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "0";
    object       nut;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
dimensions                   [0 2 -1 0 0 0 0]

internalField                 uniform 0;      

boundaryField
{
     disque_haut
     {
          type                      nutkWallFunction;       //traitement de la viscosité à la paroi
          value                    uniform 0;
      }
     pourtour_externe
     {
          type                      nutkWallFunction;    
          value                    uniform 0;
      }
     disque_externe
     {
          type                      nutkWallFunction;    
          value                    uniform 0;
      }
     helice             
     {                              
          type                      nutkWallFunction;    
          value                    uniform 0;
      }
}
/ / ******************************************************************************** / /

 

 

k

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "0";
    object       k;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
dimensions               [0 2 -2 0 0 0 0]

internalField             uniform 1;      

boundaryField
{
     disque_haut
     {
          type                      kqWallFunction;    
          value                    uniform 0;
      }
     pourtour_externe
     {
          type                      kqWallFunction;    
          value                    uniform 0;
      }
     disque_externe
     {
          type                      kqWallFunction;    
          value                    uniform 0;
      }
     helice                  
     {                                   
          type                      kqWallFunction;    
          value                    uniform 0;
      }
}
 

/ / ******************************************************************************** / /

 

 

epsilon

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "0";
    object       epsilon;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /
dimensions                     [0 2 -3 0 0 0 0]

internalField                   uniform 20;      

boundaryField
{
     disque_haut
     {
          type                      epsilonWallFunction;    
          value                    uniform 0;
      }
     pourtour_externe
     {
          type                      epsilonWallFunction;    
          value                    uniform 0;
      }
     disque_externe
     {
          type                      epsilonWallFunction;    
          value                    uniform 0;
      }
     helice                         
     {                                 
          type                      epsilonWallFunction;    
          value                    uniform 0;
      }
}
 

/ / ******************************************************************************** / /

 

 

Constant

 

RASProperties

Comme expliqué dans la partie précédente : on modifie le fichier RASProperties pour activer le modèle de k-epsilon comme ci-dessous :

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "constant";
    object      RASProperties;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /

RASModel         kEpsilon;      // Le modèle de fermeture utilisé est k-epsilon

turbulence          on;                // L'option turbulent est activée

printCoeffs          on;              // Affichage des coefficients de turbulence dans le shell
 

/ / ******************************************************************************** / /

Pour plus d'information sur les modèles de turbulence disponibles dans les librairies OpenFOAM, voir le site à l'URL suivante : http://www.openfoam.org/features/RAS.php

 

 

transportProperties

C'est dans ce fichier qu'est paramétré les propriétés du fluide présent dans la cuve, pour nous il sera newtonien avec une viscosité cinémétique de 1e-5 m²/s.

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version       2.0;
    format         ascii;
    class          dictionary;
    location     "constant";
    object         transportProperties;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /

transportModel     Newtonian;

nu                           nu [ 0 2 -1 0 0 0 0  ] 1e-5;  // La viscosité cinématique de fluide ( $ m^2 s^{-1} $)

 

/ / ******************************************************************************** / /

 

 

MRFZones

C'est dans ce fichier qu'est spécifiée la zone tournante MRF. La zone tournante est, comme son nom l'indique une zone. Elle doit être définie dans /constant/polyMesh/cellZones.

 

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version       2.0;
    format         ascii;
    class          dictionary;
    location     "constant";
    object         MRFZones;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /

1
(
     zone_mrf
     {
          
/ / Fixed patches (by default they 'move' with the MRF zone)

          nonRotatingPatches ();
          origin      origin      [0 1 0 0 0 0 0 ]    (0 0 0);     // Le centre de la cuve tournante
          axis         axis        [0 0 0 0 0 0 0 ]    (0 0 1);     // L'axe de rotation : ici, la rotation se fait selon l'axe  Z
          omega    omega   [0 0 -1 0 0 0 0 ]   40;           // la vitesse de rotation de la pale en radians par seconde
!!
     }

)
/ / ******************************************************************************** / /

 

 

 

System

 

fvSchemes

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version       2.0;
    format         ascii;
    class          dictionary;
    location     "system";
    object         fvSchemes;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /

ddtSchemes
{
    default         steadyState;        // pour le régime stationnaire
}

gradSchemes                             // les schémas de discrétisation des différents termes dans les équations
{
    default         Gauss linear;
    grad(p)         Gauss linear;
    grad(U)         Gauss linear;
}

divSchemes
{
    default         none;
    div(phi,U)      Gauss limitedLinearV 1;
    div(phi,k)      Gauss limitedLinear 1;
    div(phi,epsilon) Gauss limitedLinear 1;
    div((nuEff*dev(T(grad(U))))) Gauss linear;
}

laplacianSchemes
{
    default         none;
    laplacian(nuEff,U) Gauss linear corrected;
    laplacian((1|A(U)),p) Gauss linear corrected;
    laplacian(DkEff,k) Gauss linear corrected;
    laplacian(DepsilonEff,epsilon) Gauss linear corrected;
}

interpolationSchemes
{
    default         linear;
    interpolate(U)  linear;
}

snGradSchemes
{
    default         corrected;
}

fluxRequired
{
    default         no;
    p               ;
}

/ / ******************************************************************************** / /

 

 

fvSolution

/*--------------------------------*- C++ -*--------------------------------------------------------*\
| ======                        |                                                                                       
| \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
|  \\      /   O peration      | Version:          2.1.0                                                   
|   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
|    \\/     M anipulation  |                                                                                       
\*----------------------------------------------------------------------------------------------------*/
FoamFile
{
    version       2.0;
    format         ascii;
    class          dictionary;
    location     "system";
    object         fvSolution;

/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /

solvers
{
    p
    {
        solver          GAMG;
        tolerance       1e-08;
        relTol          0.001;
        smoother        GaussSeidel;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 20;
        agglomerator    faceAreaPair;
        mergeLevels     1;
    }

    U
    {
        solver          smoothSolver;
        smoother        GaussSeidel;
        nSweeps         5;
        tolerance       1e-07;                      //valeur sous laquelle le solveur doit descendre dans la convergence
                                                                //
des calculs   res < tolerance
        relTol          0.001;                        //ou alors,  relTol < residu_initial
    }                                                         // la première condition atteinte stoppe la simulation

    k
    {
        solver          smoothSolver;
        smoother        GaussSeidel;
        nSweeps         10;
        tolerance       1e-07;
        relTol          0.001;
    }

    epsilon
    {
        solver          smoothSolver;
        smoother        GaussSeidel;
        nSweeps         10;
        tolerance       1e-07;
        relTol          0.001;
    }
}

SIMPLE
{
    nNonOrthogonalCorrectors 5;     // Quand les centres de cellules sont pas alignés, cela permet de corriger les
    pRefCell        0;                              // gradients
    pRefValue       0;
}

relaxationFactors
{
    fields
    {
        p               0.3;
    }
    equations
    {
        U               0.3;
        k               0.1;
        epsilon         0.1;
    }
}

/ / ******************************************************************************** / /

 

 

Turbulent-Instationnaire

Pour faire la même simulation mais instationnaire, il faut modifer le schéma de discrétisation du terme dt dans le fichier fvSchemes :

ddtSchemes
{
    default         Euler;
}

 

 

Laminaire-Stationnaire

Pour faire une simulation pour un très petit nombre de Reynolds (on est dans un régime laminaire), il faut modifier le fichier RASProperties comme ci-dessous :

// RASModel         kEpsilon;  
RASModel           laminar     

turbulence          off;                // L'option turbulent est déactivée car on est dans le régime laminaire

printCoeffs          off;             

 

Pour les conditions aux limites et conditions initiales, il suffit juste de définir les deux paramètres de $ P $ et $ U $ .