Outils pour utilisateurs

Outils du site


prog:openfoam

Ceci est une ancienne révision du document !


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

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

prog/openfoam.1596174003.txt.gz · Dernière modification : 2020/07/31 07:40 de root