Outils pour utilisateurs

Outils du site


prog:openfoam

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
prog:openfoam [2020/07/30 11:52] – Création rootprog:openfoam [2020/08/01 23:43] (Version actuelle) – [Modélisation] : fix typo root
Ligne 11: Ligne 11:
 Le lieur doit être ''ld.bfd'' et non pas ''ld.gold''. Le lieur doit être ''ld.bfd'' et non pas ''ld.gold''.
  
-Le seul prérequis est ''cgal'' et ''scotch''. Il est possible que des messages de type ''==> skip scotch (no header)'' apparaissent mais sans conséquence. C'est le même message ''scotch'' que ce soit la librarie qui soit manquante ou seulement la partie MPI.+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é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.
Ligne 23: Ligne 27:
 Et lancer la compilation : Et lancer la compilation :
  
-  ./Allwmake -s -l+  ./Allwmake -s -l -j 
 + 
 +====Modélisation==== 
 + 
 +===Programmes=== 
 + 
 +''blockMesh'' : générateur de maillage. 
 + 
 +''icoFoam'' : solveur pour des fluides laminaires, isothermes et incompressibles. 
 + 
 +''pisoFoam'' : solveur pour des fluides turbulents, isothermes et incompressibles. 
 + 
 +===Configuration du maillage=== 
 + 
 +Il faut remplir le fichier ''system/blockMeshDict'' 
 + 
 +<code> 
 +// 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 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) 
 +    ); 
 +  } 
 +); 
 + 
 +// Pour connecter deux blocs. 
 +mergePatchPairs 
 +
 +); 
 + 
 +</code> 
 + 
 +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''
 + 
 +===Définition d'un fluide incompressible, isotherme et laminaire=== 
 + 
 +Il faut se baser sur les exemples fournis dans les tutoriels et les adapter. Ici : ''incompressible/icoFoam/cavity/cavity''
 + 
 +  * Conditions initiales 
 + 
 +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élocité via le fichier ''U''. Sous Linux, bien respecter la casse. 
 + 
 +<file txt 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; 
 +  } 
 +
 +</file> 
 + 
 +<file txt 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; 
 +  } 
 +
 +</file> 
 + 
 +La propriété physique est dans le fichier ''constant/transportProperties''
 + 
 +<file txt constant/transportProperties> 
 +FoamFile 
 +
 +  version     2.0; 
 +  format      ascii; 
 +  class       dictionary; 
 +  location    "constant"; 
 +  object      transportProperties; 
 +
 + 
 +// nu est la viscosité cinématique. 
 +// 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; 
 +</file> 
 + 
 +Il y a le contrôle dans le dossier ''system/controlDict''
 + 
 +<file txt 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)/
 +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; 
 +</file> 
 + 
 +<file txt 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; 
 +
 +</file> 
 + 
 +<file txt 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;
 +}
 +</file>
prog/openfoam.1596102769.txt.gz · Dernière modification : 2020/07/30 11:52 de root