Outils pour utilisateurs

Outils du site


prog:openfoam

Cet outil peut être utilisé pour déterminer les coefficients Cp,net d'une structure.

Source v2006

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

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

// 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
(
);

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.

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;
  }
}
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 le fichier constant/transportProperties.

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;

Il y a le contrôle dans le dossier system/controlDict.

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;
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;
}
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;
}
prog/openfoam.txt · Dernière modification : 2020/08/01 23:43 de root