OpenFOAM

Cette rubrique a pour but d'illustrer les post-traitements que l'on a utilisé à l'aide des outils OpenFOAM. En effet, OpenFOAM dispose d'un certain nombre d'outils, majoritairement regroupé sous le nom de "Post-processing - Standard Utilities", qui permet d'analyser l'écoulement simulé.

 

foamCalc

foamCalc est un outil simple qui permet de calculer des grandeurs nécessaires au post-traitement. Pour la détermination de la vitesse en norme, on pourra utiliser la commande suivante.

rmartin@tanche : /work/rmartin/MaSimulation/system$    foamCalc mag U

Pour l'examination des composantes du tenseur des contraintes, on pourra utiliser la commande suivante.

rmartin@tanche : /work/rmartin/MaSimulation/system$    foamCalc sigmaxx

Pour connaître toutes les possibilités de l'utility foamCalc, on peut utiliser la commande suivante.

rmartin@tanche : /work/rmartin/MaSimulation/system$    foamCalc xxx

 

 

Sample

L'utility "sample" permet d'enregistrer des données de calcul le long de lignes pour tracer des graphes ou sur des surfaces pour l'affichage  d'isograndeurs en deux dimensions.
Pour bénéficier de cet outil, il suffit de spécifier les éléments nécessaires dans un fichier nommé "sampleDict" à placer dans le dossier "system".
Comme pour la plupart des fichiers OpenFOAM, il est intéressant d'aller chercher un exemplaire "sampleDict" dans les tutoriels proposés par OpenFOAM. Pour éviter de perdre du temps à chercher ce "dictionary", la commande suivante permet de recenser tous les fichiers du même nom, c'est une commande de recherche.

rmartin@tanche : /mnt/hmf/OpenFOAM/OpenFOAM-2.1.0$    find -name sampleDict

 

Une fois le fichier placé dans le répertoire /work/MaSimulation/system, ouvrir le fichier avec gedit.

rmartin@tanche : /work/rmartin/MaSimulation/system$    gedit sampleDict &

 

Le "SampeDict" ci-dessous permet de créer un répertoire /MaSimulation/sets contenant la grandeur spécifiée, ici Umag, sur les 3 lignes line_R=0.*m.

 

/*--------------------------------*- 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      sampleDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

interpolationScheme       cellPoint;              //choix d'interpolation des grandeurs demandées
                                                                // cellPoint : interpolation linéaire basée sur la taille des cellules

setFormat                     raw;                      //choix du format d'écriture 1D : raw - format ASCII en colonne                                                                           //exploitable sur matab. surfaceFormat pour une écriture 2D
sets                                                         //nom du répertoire dans lequel sera écrit les données
(

    line_R=0.2m                                          //nom d'écriture des fichiers
    {
        type         uniform;                             //répartition uniforme des 146 points sur la ligne
        axis          z;                                      //coordonnées de référence
        start         ( 0 0.2 -0.25 );                   //coordonnées du premier et du dernier point de la ligne
        end          ( 0 0.2 0.75 );
        nPoints     146;                                  //nombre de points sur la ligne
    }

    line_R=0.3m
    {
        type         uniform;
        axis          x;
        start         ( 0 0.3 -0.25 );
        end          ( 0 0.3 0.75 );
        nPoints     134;
    }

    line_R=0.4m
    {
        type         uniform;
        axis          x;
        start         ( 0 0.4 -0.25 );
        end          ( 0 0.4 0.75 );
        nPoints     135;
    }
);

fields          (magU);                               //liste des grandeurs à enregistrer sur les lignes

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

 

 

L'image ci-dessus illustre bien la position de ces trois lignes dans la cuve agitée.

 

Dans le cas de l'hélice en cuve réelle, nous tracerons les données selon quatre lignes horizontales à différentes hauteurs selon l'image suivante.

 

 

 

stressComponents

Comme nous avons expliqué dans la partie Caractérisation des Mobiles, nous pouvons calculer la puissance dissipée par la formule ci-dessous :

\begin{equation}
 P=\iiint\limits_V  \mu \phi_v \, dv
\end{equation}

Dans les coordonées cartésiennes, nous pouvons impliciter le terme de $ \phi_v $ comme suivant :

\begin{equation}
 \phi_v = [2 {\tau_{xx}} ^2+ 2 {\tau_{yy}} ^2 + 2 {\tau_{zz}} ^2 + {\tau_{xz}} ^2 + {\tau_{yz}} ^2 + {\tau_{xy}} ^2] / {\mu ^2}
\end{equation}

Avec :

\begin{equation}
{\tau_{xx}}= - 2 {\mu} \frac { \partial U} {\partial x}
\end{equation}

\begin{equation}
{\tau_{yy}}= - 2 {\mu} \frac { \partial V} {\partial y}
\end{equation}

\begin{equation}
{\tau_{zz}}= - 2 {\mu} \frac { \partial W} {\partial z}
\end{equation}

\begin{equation}
{\tau_{xy}}= - {\mu} (\frac { \partial U} {\partial y}+\frac { \partial V} {\partial x})
\end{equation}

\begin{equation}
{\tau_{xz}}= - {\mu} (\frac { \partial W} {\partial x}+\frac { \partial U} {\partial z})
\end{equation}

\begin{equation}
{\tau_{yz}}= - {\mu} (\frac { \partial V} {\partial z}+\frac { \partial W} {\partial y})
\end{equation}

Pour pouvoir calculer le puissance, il faut demander à OpenFOAM à sortir les valeurs des contraintes. Il existe une fonction auxiliaire sur l'OpenFOAM : stressComponents qui permet de sortir toutes les valeurs de $ \sigma_{ij} $.

L'équation qui relie $ \sigma_{ij} $ et $ \tau_{ij} $ est comme suit :

\begin{equation}
\sigma_{ij} = -p I_{ij}+\lambda (div U_i) I_{ij} +2 \mu D_{ij}
\end{equation}

avec :

$ I_{ij} $ est la matrice d'indentité

$ div (U_i) = 0 $ car c'est incompressible

$ D_{ij} = \frac {1} {2} (grad U_i + grad^t U_i) $

Pour sortir les composantes du tenseur sigma, lancez la commande suivante :

rmartin@tanche : /work/rmartin/MaSimulation$    stressComponents

 

Afin de mieux comprendre comment OpenFoam calcule $ \sigma_{ij} $ à partir des gradients de vitesse, nous allons sur la librairie d'OpenFOAM :

/mnt/hmf/OpenFOAM/OpenFOAM-2.1.0/applications/utilities/postProcessing/stressField/stressComponents/

 

Essayons de comprendre le script de stressComponents.C :

volSymmTensorField sigma
            (
                IOobject
                (
                    "sigma",
                    runTime.timeName(),
                    mesh,
                    IOobject::NO_READ,
                    IOobject::AUTO_WRITE
                ),
                laminarTransport.nu()*2*dev(symm(fvc::grad(U)))   // sigma est le produit de $ \nu $ et des gradients de U. OpenFoam
            );                                                                               

L'unité de la puissance est le Watt et sa dimension est $ [M{L^2} {T^{-3}}] $. La dimension de la viscosité dynamique est $ [M L^{-1} T^{-1}] $ et la dimension de volume est $ [L^3] $. A l'aide de l'analyse dimensionnelle, on peut déduire que la dimension de $ \phi_v $ est $ [T^{-2}] $. 

Nous pouvons donc déduire qu'il suffit de normaliser le terme de $ \sigma_{ij} $ obtenu avec OpenFOAM par $ \nu $ pour avoir le terme de $ \tau_{ij} $.

Sur paraview, afin d'obtenir le terme de $ \phi_v $, il faut normaliser le terme de $ \sigma_{ij} $ calculé par OpenFOAM comme suit :

$$ \phi_v= [2 \sigma_{xx}^2 +2 \sigma_{yy}^2 + 2 \sigma_{zz}^2 + \sigma_{xy}^2 +\sigma_{xz}^2 + \sigma_{yz}^2 ]/ {\nu^2}  $$

 

 

pyFoamPlotWatcher

pyFoamPlotWatcher.py est un script python très utile puisqu'il peut afficher les résidus et la continuité d'une simulation en cours avec gnuplot.

Pour une visualisation des résidus, il faut rentrer les deux commandes suivantes.

rmartin@tanche : /work/rmartin/MaSimulation/system$ MRFSimpleFoam > log &
rmartin@tanche : /work/rmartin/MaSimulation/system$ pyFoamPlotWatcher.py log &

 

Voici ce que l'on peut obtenir :