Afouillement sous un cylindre¶
Ce tutoriel est un tutoriel disponible avec l’installation
de sedFoam. Une description détaillée du tutoriel est donnée
sur son site web.
Note
Pour installer sedFoam, rendez-vous sur https://github.com/sedfoam/sedfoam
et suivez les instructions d’installation.
Le script Allrun vous permet de lancer le calcul automatiquement.
Une fonctionnalité intéressante utilisée dans les fichiers de sedFoam
est l’intégration de morceaux de code dans le fichier 0.orig/Ua
par exemple. Cela permet de spécifier un profil de vitesse de type couche limite
en entrée:
inlet
{
type codedFixedValue;
value uniform (0 0 0);
name inlet;
codeInclude
#{
#include "fvCFD.H"
#};
codeOptions
#{
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
#};
codeLibs
#{
-lfiniteVolume \
-lmeshTools
#};
code
#{
const fvPatch& boundaryPatch = patch();
const vectorField& Cf = boundaryPatch.Cf();
vectorField& field = *this;
scalar t = this->db().time().value(); // Accès au temps de simulation
forAll(Cf, faceI) // Parcourir les faces du patch inlet
{
if (Cf[faceI].y() >= -0.025)
{
if (t <= 4.0)
{
field[faceI] = (0.1 + 0.9*(t/4.0))
*vector
(
0.04318/0.41
*log(30*(Cf[faceI].y()+0.025)
/9e-4),
0,
0
);
}
else
{
field[faceI] = vector
(
0.04318/0.41
*log(30*(Cf[faceI].y()+0.025)
/9e-4),
0,
0
);
}
}
else
{
field[faceI] = vector(0,0,0);
}
}
#};
}
La condition limite codedFixedValue permet d’intégrer du code. Notez l’inclusion
d’options de compilation avec codeInclude, de librairies avec codeLibs, et le code
lui-même avec le mot-clé code.
Le code est écrit en C++
L’accès aux éléments sur la face
inletse fait avec:const fvPatch& boundaryPatch = patch();
La ligne
const vectorField& Cf = boundaryPatch.Cf();
permet d’avoir accès aux faces des éléments qui sont sur le patch
inlet, et c’est sur ces faces que nous allons modifier la valeur de la vitesse.Pour avoir accès aux coordonnées de chaque face du patch, utilisez:
Cf[faceI].x(); Cf[faceI].y(); Cf[faceI].z();
Notez que
faceIest l’indice de la face désirée. Vous pouvez parcourir toutes les faces d’un coup à l’aide d’une boucleforAll:forAll(Cf, faceI) { // code }
Le reste est du C++ classique. N’hésitez pas à regarder les liens fournis sur la page principale qui expliquent la programmation sous OpenFOAM.
Warning
La simulation pour ce cas est lancée en parallèle avec 16 processeurs. Vérifiez que vous avez les ressources disponibles, ou diminuez le nombre de processeurs.