Ceci est une ancienne révision du document !
Cet outil peut être utilisé pour déterminer les coefficients Cp,net d'une structure.
Installation
Installer Gentoo sous Windows via WSL.
La procédure d'installation est accessible en ligne. Archive du 28/07/2020 le 30/07/2020
Le lieur doit être ld.bfd
et non pas ld.gold
.
La librairie nécessaire est cgal
.
Il est possible d'avoir en plus metis
, scotch
(sinon des messages d'erreur apparaîtront dans les log).
Il est possible que des messages de type ==> skip scotch (no header)
apparaissent malgré son installation. C'est le même message scotch
que ce soit la librarie qui soit manquante ou seulement la partie MPI.
Décompresser les sources dans un dossier de la partition Linux. Ne pas décompresser dans un disque dur Windows (/mnt/*
). Il y a des noms de fichiers qui ne diffèrent que de la casse.
Désactiver MPI dans etc/bashrc
:
export WM_MPLIB=
Faire un source etc/bashrc
Et lancer la compilation :
./Allwmake -s -l -j
Modélisation
icoFoam : solver for laminar, isothermal, incompressible flow pisoFoam : solver will be used for turbulent, isothermal, incompressible flow
blockMesh mesh generator A besoin d'un fichier : system/blockMeshDict dont le format est : Entête FoamFile { version 2.0; format ascii; class dictionary; object blockMeshDict; } Coefficient réducteur de la position des sommets. scale 0.1; Les sommets de la forme où le fluide circulera. vertices ( (0 0 0) Sommet 0
(1 0 0) (1 1 0) (0 1 0) (0 0 0.1) // Une épaisseur égale à scale indique une modélisation 2D. (1 0 0.1) (1 1 0.1) (0 1 0.1) // Sommet 7
); Définition du bloc à mailler blocks ( Cube à mailler.
// Nombre de discrétisation du maillage en x, y, z. // En mettant z à 1, on modélise en 2D. // uniform expansions en x, y et z // https://www.openfoam.com/documentation/user-guide/blockMesh.php hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)
); Si on souhaite que des bords ne soient pas forcément droit. edges ( ); On définit les 8 faces. Un type par condition initiale. boundary (
// L'entrée du fluide. movingWall { type wall; faces ( (3 7 6 2) ); } // Les 3 faces qui ferment le rectangle. fixedWalls { type wall; faces ( (0 4 7 3) (2 6 5 1) (1 5 4 0) ); } // Les deux faces qui font le devant et derrière // Mais comme on modélise en 2D, elles sont vides. frontAndBack { type empty; faces ( (0 3 2 1) (4 5 6 7) ); }
); TODO : pour connecter deux blocs. mergePatchPairs ( ); Après création de ce fichier, on exécute le programme blockMesh. Cela va créer le dossier constant/polyMesh avec les fichiers boundary, faces, neighbour, owner et points. On définit les conditions initiales dans le dossier “0”. Dans ce dossier, on définit la pression via le fichier “p” et la véolcité via le fichier “u” 0/p FoamFile { version 2.0; format ascii; class volScalarField; object p; } L'unité SI [kg m s K mol A cd]. Ici la pression cinétique m^2/s^2 dimensions [0 2 -2 0 0 0 0]; Le champ de pression est uniforme. Le type étant incompressible, la valeur n'a pas d'importance. internalField uniform 0; On définit le type de condition initiale boundaryField {
// Le mur bougeant est celui d'où le vent circule. movingWall { type zeroGradient; } // Les murs fixes sont ceux qui ferment la boite. fixedWalls { type zeroGradient; } // Pas de condition pour les deux faces 3D puisqu'on veut travailler en 2D. frontAndBack { type empty; }
}
Le fichier 0/U
FoamFile {
version 2.0; format ascii; class volVectorField; object U;
} Unité : m/s dimensions [0 1 -1 0 0 0 0]; Champ uniforme. internalField uniform (0 0 0); https://www.openfoam.com/documentation/user-guide/standard-boundaryconditions.php boundaryField { On fait circuler du vent horizontalement au plafond.
movingWall { type fixedValue; // 1 m/s value uniform (1 0 0); } // Les murs n'autorisent pas le glissement (vélocité à 0) fixedWalls { type noSlip; } // le devant et derrière n'existent pas. frontAndBack { type empty; }
}
La propriété physique est dans constant/transportProperties FoamFile {
version 2.0; format ascii; class dictionary; location "constant"; object transportProperties;
} nu est la kinematic viscosity. Le nombre de Reynolds vaut d*abs(U)/nu d est la longueur (0.1) et U la viscosité du fluide (1 ici). nu 0.01;
Et il y a le contrôle dans le dossier système : fichier system/controlDict
FoamFile {
version 2.0; format ascii; class dictionary; location "system"; object controlDict;
} application icoFoam; startFrom startTime; startTime 0; stopAt endTime; endTime 0.5; Co*d/n/U = (constante)1*0.1(scale)/20(discrétisation)/1 deltaT 0.005; writeControl timeStep; On enregistre les résultats tous les deltaT*20 soit 0.1s. Les résultats intermédiaires seront enregistrés dans un dossier “0.1”, “0.2”, … writeInterval 20; purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable true; fichier system/fvSchemes On laisse les valeurs par défaut. FoamFile {
version 2.0; format ascii; class dictionary; location "system"; object fvSchemes;
} ddtSchemes {
default Euler;
} gradSchemes {
default Gauss linear; grad(p) Gauss linear;
} divSchemes {
default none; div(phi,U) Gauss linear;
} laplacianSchemes {
default Gauss linear orthogonal;
} interpolationSchemes {
default linear;
} snGradSchemes {
default orthogonal;
}
fichier system/fvSolution
FoamFile {
version 2.0; format ascii; class dictionary; location "system"; object fvSolution;
} solvers {
p { solver PCG; preconditioner DIC; tolerance 1e-06; relTol 0.05; }
pFinal { $p; relTol 0; }
U { solver smoothSolver; smoother symGaussSeidel; tolerance 1e-05; relTol 0; }
}
PISO {
nCorrectors 2; nNonOrthogonalCorrectors 0; // Le fluide étant incompressible, les deux valeurs n'ont pas d'importance. pRefCell 0; pRefValue 0;
}
PDRblockMeshDict blockMeshDict