Milieu poreux¶
Description de la situation
Ce tutoriel est une introduction aux milieux poreux sous OpenFOAM.
L’ensemble des commandes à lancer est donné dans les fichiers Allrun.case.laminaire ou
Allrun.case.turbulent selon le type de simulation que vous voulez lancer. Voici un
extrait du fichier Allrun.case.turbulent:
#!/bin/bash
# Lancer le maillage
Allmesh -c
# Générer la houle irrégulière
genHouleIrreguliere
# Copier le fichier turbulence à utiliser
cp constant/turbulenceProperties.turbulent constant/turbulenceProperties
# Lancer le calcul. L'option -s lance setFields
Allrun -ts &
# Attendre 2 secondes avant de lancer le monitoring
sleep 2
# Suivre la progression du calcul et lancer la commande
# ls lorsque le calcul est terminé
AllpostProcess ls
Maillage
Le maillage est le même que pour le tutoriel de obstacle_zone.
Lancez l’outil blockMesh avec la commande:
$ blockMesh
Vous pouvez visualiser ce maillage avec ParaView.
Génération de houle
La condition de houle est la même que pour le tutoriel de houle irrégulière.
Milieu poreux
Pour prendre en compte les enrochements, nous allons utiliser une modélisation de Darcy-Forchheimer. Pour plus de détails, consultez la documentation sur le modèle de porosité. Si vous y avez accès, mon rapport de stage présente les théories de modélisation en milieu poreux.
Dans un premier temps, il faut créer la zone poreuse. Pour cela,
nous allons utiliser l’utilitaire topoSet. L’obstacle sera exactement
le même que dans le tutoriel de mesure de pression.
Configurez le fichier topoSetDict comme suit:
actions
(
// * * * * * * Zone d'enrochements * * * * * * * * * *
{
name c0;
type cellSet;
action new;
source boxToCell;
sourceInfo
{
box (10 -99 -99) (15 99 1); // Edit box bounds as required
}
}
{
name obstacle_zone;
type cellZoneSet;
action new;
source setToCellZone;
set c0;
}
);
Le premier sous-dictionnaire sélectionne la zone qui correspond à l’obstacle,
sous la forme d’un cellSet. Le deuxième sous-dictionnaire permet de convertir
ce cellSet en une cellZone. Nommons cette zone obstacle_zone. C’est
avec ce nom que nous y ferons référence désormais.
Lancez topoSet avec la commande:
topoSet
Les paramètres du milieu poreux sont donnés dans le fichier constant/fvOptions:
porosity1
{
type explicitPorositySource;
explicitPorositySourceCoeffs
{
selectionMode cellZone;
cellZone obstacle_zone;
type DarcyForchheimer;
d (2111.7 2111.7 2111.7);
f (0.0 0.0 0.0);
coordinateSystem
{
origin (0 0 0);
e1 (1 0 0);
e2 (0 1 0);
}
}
}
On y précise le type de modèle avec type explicitPorositySource. La zone poreuse
s’indique avec le mot-clé cellZone obstacle_zone. Les coefficients
du modèle de Darcy-Forchheimer sont les vecteurs d et f. Ce sont
des vecteurs car vous pouvez préciser des coefficients différents selon chaque direction.
Nous considérons un matériau homogène et isotrope, donc nos coefficients sont les mêmes
dans chaque direction.
Solveur
Les conditions limites sont inchangées par rappport au tutoriel houle irrégulière,
mais vous pouvez aller les vérifier dans le dossier 0.orig.
Pensez à bien créer le dossier 0 en copiant le dossier 0.orig avant de lancer setFields:
cp -r 0.orig 0
setFields
Notez que nous avons rajouté un point de mesure de pression dans system/controlDict:
points
{
type sets;
libs ("libsampling.so");
enabled true; // Mettre à false pour désactiver les sondes
// Contrôle d'écriture :
// - timeStep : pas de temps
// - adjustable : temps (si pas de temps adaptatif)
// - runTime : temps (si pas de temps constant)
writeControl timeStep;
writeInterval 2;
fixedLocations false;
interpolationScheme cellPoint;
setFormat raw;
sets
(
point1
{
type cloud;
axis distance;
points
(
(10 0 1)
);
}
);
fields
(
p
);
}
Ce point est le même que pour le tutoriel de mesure de pression sur un ouvrage.
Vous êtes maintenant prêt(e) à lancer la simulation. Ajustez vos paramètres de
simulation dans system/controlDict. Lancez interFoam et redirigez
la sortie dans un fichier log:
interFoam > log.interFoam &
Note
Toutes ces étapes peuvent être effectuées avec la commande:
Allrun -st &
Surveillance du statut de la simulation et post-traitement
La commande AllpostProcess permet de lancer des scripts une fois
que la simulation sera terminée. En attendant, vous pourrez
voir le statut de simulation. Lancez la commande:
AllpostProcess lirePoints.py
Lorsque la simulation sera finie, le script lirePoints.py
va lire les données de pression, et les écrira dans un fichier .csv.
Utilisez la commande suivante pour tracer la mesure de pression:
traceSondes.py points1.csv
Ou en remplaçant points1.csv par le nom de votre fichier de mesures.