Blog

dim. mars 1, 2026 : Avertissements OpenFOAM® avec les compilateurs récents

Les versions récentes des compilateurs ajoutent de nouveaux diagnostics à l’option -Wall, ce qui peut entraîner l’apparition d’avertissements (warnings) inattendus lors de la compilation :

...
DiagonalMatrix.H:82:38: attention: template-id n'est pas permis pour un constructeur en C++20 [-Wtemplate-id-cdtor]
   82 |         explicit DiagonalMatrix<Type>(const label n);
...

Pour éviter ce comportement, il est possible d’ajouter des drapeaux de suppression d’avertissements dans le fichier Make/options. Cependant, cela peut s’avérer délicat si vous compilez le projet avec des compilateurs plus anciens, car ces derniers généreront des alertes concernant des options inconnues.

La variable d’environnement FOAM_EXTRA_CXXFLAGS offre une solution plus élégante. Par exemple, sur openSUSE Leap 16 avec GCC 15.1.1, l’ajout de cette ligne dans votre fichier ~/.OpenFOAM/prefs.sh permet de supprimer les avertissements non pertinents :

export FOAM_EXTRA_CXXFLAGS="-Wno-template-id-cdtor -Wno-dangling-reference -Wno-overloaded-virtual"

ven. mars 13, 2026 : Noms de champs dans OpenFOAM(R)

Récemment, un problème d’unités est survenu :

--> FOAM FATAL ERROR: (openfoam-2312)
Different dimensions for '(a = b)'
     dimensions : [0 2 -1 0 0 0 0] != [1 -1 -1 0 0 0 0]

Manifestement, il y avait un problème lié à la division par la masse volumique. L’erreur est localisée dans :

#5  Foam::EddyDiffusivity<Foam::ThermalDiffusivity<Foam::CompressibleTurbulenceModel<Foam::multiphaseInter::multiphaseSystem> > >::correctNut()

Il semblait donc que le problème venait des unités de nut. Pourtant, après une analyse plus approfondie, le problème provenait du champ alphat :

template<class BasicTurbulenceModel>
void Foam::EddyDiffusivity<BasicTurbulenceModel>::correctNut()
{
    // Read Prt if provided
    Prt_ = dimensionedScalar("Prt", dimless, 1.0, this->coeffDict());
    alphat_ = this->rho_*this->nut()/Prt_;
    alphat_.correctBoundaryConditions();
}

Cependant, si l’on considère nut comme la diffusivité de la quantité de mouvement et alphat comme la diffusivité thermique, on peut par extension qualifier alphat de “nut thermique”.

Archive