Paraview

Une partie du post-traitement des données calculées par OpenFOAM peut se faire à l'aide de paraview, notamment pour la détermination des nombres adimensionnels caractéristiques.

En effet, d'après la définition des nombres adimensionnels de débit, l'utilisation de paraview peut se révéler utile pour la création de surfaces à travers desquelles peuvent être déterminés des débits.

Cette rubrique a pour but d'illustrer la méthode employée pour la détermination grandeurs globales.

 

Méthode à suivre :

Commencer par ouvrir un terminal et aller dans le répertoire ou se trouve l'ensemble des fichiers de la simulation OpenFOAM :

rmartin@tanche :   cd /work/rmartin/MaSimulation
rmartin@tanche : /work/rmartin/MaSimulation$   ls
0   10   20   30   40   constant   system   log

Pour pouvoir lancer les commandes OpenFOAM depuis n'importe quel répertoire :

rmartin@tanche : /work/rmartin/MaSimulation$    source /mnt/hmf/OpenFoam/OF21.sh

Pour bénéficier de tous les outils de Paraview, on préférera lancer Paraview avec les deux commandes suivantes plutôt que paraFoam directement :

rmartin@tanche : /work/rmartin/MaSimulation$   touch .OpenFoam
rmartin@tanche : /work/rmartin/MaSimulation$   /usr/local/bin/paraview

Pour pouvoir exploiter les données OpenFOAM avec paraview, il faut convertir les données dans un format que peut lire Paraview. Le format .vtk est adapté. Pour convertir les données en .vtk il suffit de lancer la commande suivante.

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

Ouverture de paraview avec la commande suivante.

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

L'ouverture des fichiers .vtk se fait manuellement dans un premier temps : => Files => Open => *.vtk

Pour la suite des commandes, on divisera les cas en fonction du type de pompage de l'agitateur : axial ou radial.

 

 

Calcul du débit de pompage

 

Cas des mobiles d'agitation à pompage axial :

Afin de déterminer le débit de pompage d'un agitateur à pompage axial, il faut créer une surface spécifique qui servira de support à l'intégration de la vitesse axiale. La détermination de ce débit de pompage se divise en 3 parties.

Voici le cas d'une cuve à agitation axiale (une hélice qui tourne selon l'axe-y) qui servira d'illustration :

 

Création d'un cylindre avec le Programmable Filter (attention, cette option n'est pas disponible dans paraFoam)

L'outil Programmable Filter est un outil puissant puisqu'il permet de créer un filtre coder en python correspondant à la fonction recherchée. Nous allons créer un Clip Cylinder, filtre qui n'existe pas dans la version utilisée, à savoir la 12.6.0 :

Pour bénéficier de l'outil Programmable Filter : => Filters => Alphabetical => Programmable Filter

Une fenêtre permet de rentrer l'ensemble des lignes de code nécessaire. Pour ce qui concerne la création d'un cylindre par un Clip, nous avons rentré l'ensemble des lignes de code suivante :

input = self.GetInputDataObject(0, 0)
inp_copy = input.NewInstance()
inp_copy.ShallowCopy(input)
inp_copy.UnRegister(None)

transf = vtk.vtkTransform()
transf.RotateY(90)

cyl = vtk.vtkCylinder()
cyl.SetCenter(0,0,0)
cyl.SetRadius(1)
cyl.SetTransform(transf)

clipper = vtk.vtkClipDataSet()
clipper.SetClipFunction(cyl)
clipper.SetInput(inp_copy)
clipper.InsideOutOn()
clipper.Update()

self.GetOutputDataObject(0).ShallowCopy(clipper.GetOutputDataObject(0))

Ce programme permet de créer un cylindre  de dimension infini selon Y grâce à une fonction implicite.

Le paramètrage des dimensions du cylindre dans les deux autres directions se fait via les deux commandes suivantes :

cyl.SetCenter(0,0,0) permet de fixer le centre du cylindre
cyl.SetRadius(1) permet de choisir le rayon du cylindre

On obtient la visualisation suivante :

C'est bien un cylindre de rayon de 0.95 m ayant un diamètre plus petit que celui de la cuve.

 

Création du slice disque :

Le Clip_Cylindre précédent a permis de délimiter la zone dans les plans normaux à Y. La création de la surface en forme de disque se fait à l'aide du filtre Slice :

=> Filters => Alphabetical => Slice

On choisit de créer un Slice_plane qui, délimité par le Clip_cylindre, revient à la création d'un disque.

Il faut bien choisir la bonne normale qui est selon l'axe Y pour créer un disque.

On obtient la visualisation suivante dans le cas d'un slice fait trop prêt de l'hélice :

 

Calcul de l'intégrale de la vitesse verticale sur le disque avec Integrate Variables

On peut utiliser la fonction IntegrateVariables sur paraview pour calculer le débit volumique de fluide qui passe à travers le disque défini dans la partie précédent.

=> Filters => Alphabetical => Integrate Variables

La fonction Integrate Variables est capable de calculer la grandeur souhaitée sur une surface ou un volume prédéfini. Attention à bien appliqué le filtre IntegrateVariables sur le Slice : ceci se fait en cochant le Slice défini dans la colonne de droite avant d'utiliser le filtre.

Le calcul par IntegrateVariables montre que le débit de fluide qui passe par le disque selon l'axe Y est d'environ  0,21 $ m^3 /s $.

 

 

Cas des mobiles d'agitation à pompage radial :

 

Afin de déterminer le débit de pompage d'un agitateur à pompage radial qui tourne selon l'axe-Z, il faut créer une surface d'un cylindre de la même hauteur de l'agitateur qui servira de support à l'intégration de la vitesse radiale.

La géométrie du cas test 3D sera utilisée pour l'illustration de la procédure à suivre dans le cas des agitateurs à pompage radial.

 

Calcul de vitesse radiale avec calculator

Le logiciel de l'OpenFOAM travaille dans un système de coordonnées cartésiennes. Afin de calculer le débit de pompage à travers la surface d'un cylindre, il nous faut tout d'abord la vitesse radiale à l'aide de l'outil calculator sur paraview.

=> Filters => Alphabetical => Calculator

On a des équations comme ci_dessous qui nous permettent de passer du système de coordonées cartesiennes au système de coordonées cylindriques :

\begin{equation}
U_r=U_x cos (\theta)+U_y sin(\theta)
\end{equation}

\begin{equation}
U_\theta=- U_x sin (\theta) +U_y cos(\theta)
\end{equation}

avec :

$$ \theta= arctg (\frac {coordY} {coordX} ) $$

Attention à la fonction non définie pour coord-x $ =0 $ car la valeur de $ \theta $ tend vers l'infini. Pour éviter ce problème, on peut définir les équations de $ U_r $ et $ U_{\theta} $ autrement :

\begin{equation}
U_r=U_x \frac {coordX} {\sqrt {{coordX}^2+{coordY}^2}} +U_y \frac {coordY} {\sqrt {{coordX}^2+{coordY}^2}}
\end{equation}

\begin{equation}
U_\theta=- U_x \frac {coordY} {\sqrt {{coordX}^2+{coordY}^2}} +U_y \frac {coordX} {\sqrt {{coordX}^2+{coordY}^2}}
\end{equation}

On peut modifier la nouvelle variable qu'on définit par la fonction calculatrice comme U_r (la vitesse radiale).

 

Création d'un cylindre avec le Programmable Filter (attention, cette option n'est pas disponible dans paraFoam)

input = self.GetInputDataObject(0,0)

inp_copy = input.NewInstance()

inp_copy.ShallowCopy(input)

inp_copy.UnRegister(None)

cutter = vtk.vtkCutter()

transf = vtk.vtkTransform()

transf.RotateX(90)

cyl = vtk.vtkCylinder()

cyl.SetCenter(0,0,0)

cyl.SetRadius(0.26)

cyl.SetTransform(transf)

cutter.SetCutFunction(cyl)

cutter.SetInput(inp_copy)

cutter.Update()

self.GetOutputDataObject(0).ShallowCopy(cutter.GetOutputDataObject(0))

Ce script de python ne marche que sur Paraview 6.14.

On obtient la visualistion suivante :

 

Création d'une boîte d'une hauteur 0.5m contenant l'hélice

On se rappelle qu'on veut faire l'intégral de la vitesse radiale sur la surface transversale d'un cylindre ayant la même hauteur que les pâles d'agitateur. Il faut donc enlever la partie haute et la partie basse de la cuve où il n'y pas d'agitateur à l'aide de la fonction clip sur paraview:

=> Filters => Alphabetical => Clip

On choisit le clip type : box et il faut absolument cocher Inside Out pour garder la partie contenant l'hélice.

On obtient donc la visualisation suivante :

 

Calcul de l'intégrale de la vitesse radiale sur la surface transversale du cylindre avec Integrate Variables

On peut utiliser la fonction Integrate Variables sur paraview pour calculer le débit volumique de fluide qui passe la surface transversale du cylindre.

=> Filters => Alphabetical => Integrate Variables

 

 

Calcul de la puissance pour des mobiles à pompage axial ou radial

 

Comme nous avons expliqué dans la partie OpenFOAM, il faut intégrer le champ de sigma (les contraintes de cisaillement) ou $ \phi_v $ avec la viscosité dynamique sur tout le volume de la cuve.

 

 

Calcul de $ \mu \phi_v $ à l'aide de calculator

Afin de pouvoir utiliser la fonction Integrate Variables pour calculer l'intégral sur tout le volume, il faut calculer abord le produit du terme de $ \phi_v $ normalisé avec la viscosité dynamique à l'aide de la calculator. Il faut rentrer la formule ci-dessous sur la fonction de calculator :

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

Avec : $ \mu=0,04 SI $ et $ \nu=2,67.10^{-5} SI $

L'image illustre la formule de $ \mu \phi_v $ entrée sur la fonction calculator sur Paraview.

 

Calcul de l'intégrale de $ \mu \ phi_v$ sur tout le volume avec Integrate Variables

Une fois le produit de $ \mu \phi_v $ calculé, nous utilisons la fonction Integrate Variables pour calculer l'intégrale de $ \mu \phi_v $ sur tout le volume de la cuve.

=> Filters => Alphabetical => Integrate Variables