Tutorial - Moving Mesh

Ce petit tutorial a pour but de convertir les maillages du fluent sous un format d'OpenFOAM et aussi de les fusionner afin de pouvoir faire Moving Mesh :

  • Tout d'abord, prenons un tutorial de mixerVesselAMI2D dans le PimpleDyMFoam en 2 copies (pour maillage-fluide et maillage-mrf) dans un dossier appelé "moving_mesh".
     
  •  Identifiez d'abord le rotor (la zone MRF) et stator (la partie du fluide). Renommons le tutorial de mixerVesselAMI2D en rotor et l'autre en stator.
     
  •  Créez un dossier sui s'appelle Moving_Mesh et copions les deux maillages  (que j'ai appelé comme : cuve_fluide.msh et cuve_mrf.msh) dans le dossier de stator/constant/polyMesh/ et rotor/constant/polyMesh/ .
     
  • Afin de pouvoir lancer la commande sur le terminale :
     
      rMartin@tanche : fluent3DMeshToFoam constant/polyMesh/ *.msh 

                                  Il faut se mettre dans le répertoire où se trouvent les fichiers de 0, constant et system.

        Attention !!!
     

    •  Il faut supprimer la première ligne dans le fichier de *.msh.
    •  Des fois, le *.msh contient des phrases que l'OpenFOAM ne connaît pas, il faut les supprimer.
    • Les noms de répertoires ne doivent pas contenir aucune espace. (cela peut être une source d'erreur). 

       

  • Après avoir converti les deux maillages, on peut modifier les noms des deux interfaces entre la zone MRF et la zone du fluide.
    Pour le rotor, allez sur rotor/constant/polyMesh/faceZones et on modifie le nom de la zone en AMI1. On fait pareil pour le stator en renommant la zone en AMI2.
     
  • Pour fusionner les deux maillages, on se déplace dans le répertoire où se trouvent tous les deux dossiers : rotor et stator.
     
  • Il faut sourcer l'OpenFOAM en tapant dans le terminal :
     
     rMartin@tanche : source $/OpenFOAM/OF22.sh

     

    Il nous faut absolument OF22.sh parce que la commande : mergeMeshes ne marche que avec OF22.sh sans problème).
     

  • Executer la commande :
     
     rMartin@tanche : mergeMeshes rotor stator

                                 Ici, le rotor est master et le stator est slave. Si la commande est bien exécuté, on peut voir le dossier 0.001 dans le répertoire rotor.
     

  • Recopiez le dossier de rotor en un autre nom : maillage_fini et remplacer le maillage dans constant/polyMesh/ par le nouveau maillage qu'on vient de fusionner.
     
  • Allez dans le dossier de /constant/polyMesh/faceZones et on peut vérifier que deux interfaces : AMI1 et AMI2 sont bien créées.
     
  •  Allez dans le dossier /constant/PolyMesh/boundary, remplacez ces lignes suivantes :
interface_zone_mrf
    {
        type            patch;
        nFaces          10749;
        startFace       631265;
    }
    interface_zone_cuve
    {
        type            patch;
        nFaces          10749;
        startFace       663905;
    }

   

PAR :
   

AMI1
    {
        type            cyclicAMI;
        nFaces          10749;
        startFace       631265;
        matchTolerance  0.0001;
        neighbourPatch  AMI2;
        transform       noOrdering;
    }
    AMI2
    {
        type            cyclicAMI;
        nFaces          10749;
        startFace       663905;
        matchTolerance  0.0001;
        neighbourPatch  AMI1;
        transform       noOrdering;
    }

 

  • Puis, allez dans system/ et ouvrez le fichier topoSetDict avec geany/gedit. Vérifiez bien qu'on a :

    /*--------------------------------*- C++ -*--------------------------------------------------------*\
    | ======                        |                                                                                       
    | \\         /  F ield             | OpenFOAM:   The Open Source CFD Toolbox     
    |  \\      /   O peration      | Version:          2.1.0                                                   
    |   \\   /    A nd                 | Web:                www.OpenFOAM.org                       
    |    \\/     M anipulation  |                                                                                       
    \*----------------------------------------------------------------------------------------------------*/
    FoamFile
    {
        version     2.0;
        format      ascii;
        class       dictionary;
        object      topoSetDict;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    actions
    (
       // Get both sides of ami
        // ~~~~~~~~~~~~~~~~~~~~~

        // Get all faces in cellSet
        {
            name    AMI;
            type    faceSet;
            action  new;
            source  patchToFace;
            sourceInfo
            {
                name "AMI.*";
            }
        }
    );

    // ************************************************************************* //

    On renomme les deux interfaces : AMI1 et AMI2 en AMI à l'aide de topoSetDict.
     

  • Pour le fichier makeMesh, on le modifie comme suivant :
     
    #/bin/sh
    set -x
    topoSet

 

  • Pour le fichier Allrun, modifiez le fichier aussi comme suit :
     

    #!/bin/sh
    cd ${0%/*} || exit 1    # run from this directory

    # Source tutorial run functions
    . $WM_PROJECT_DIR/bin/tools/RunFunctions

    application=`getApplication`

    ./makeMesh

    #runApplication $application
    runApplication decomposePar
    runParallel $application 4

    runApplication reconstructPar

    # ----------------------------------------------------------------- end-of-file

  • Il faut modifier les fichiers de P et U pour pouvoir faire tourner la simulation :

    Pour U :
     

    /*--------------------------------*- C++ -*----------------------------------*\
    | =========                 |                                                 |
    | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
    |  \\    /   O peration     | Version:  2.1.0                                 |
    |   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
    |    \\/     M anipulation  |                                                 |
    \*---------------------------------------------------------------------------*/
    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volVectorField;
        object      U;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

    dimensions      [0 1 -1 0 0 0 0];

    internalField   uniform (0 0 0);

    boundaryField
    {
        agitateur
        {
            type            movingWallVelocity; // fixedValue;
            value           uniform (0 0 0);
        }
        
        agitateur:011
        {
            type            movingWallVelocity; // fixedValue;
            value           uniform (0 0 0);
        }
        
        wall_fond_zone_mrf
        {
            type            movingWallVelocity; // fixedValue;
            value           uniform (0 0 0);
        }
        
        wall_arbre_zone_mrf
         {
            type            movingWallVelocity; // fixedValue;
            value           uniform (0 0 0);
        }
        
        wall_virole
        {
            type            movingWallVelocity; // fixedValue;
            value           uniform (0 0 0);
        }
        
        wall_fond_cuve
        {
            type            movingWallVelocity; // fixedValue;
            value           uniform (0 0 0);
        }
        
        wall_arbre_cuve
        {
            type            movingWallVelocity; // fixedValue;
            value           uniform (0 0 0);
        }
        
        AMI1
        {

            type            cyclicAMI;
            value           $internalField;
        }

        AMI2
        {
            type            cyclicAMI;
            value           $internalField;
        }
        
        surface_libre
        {
            type            symmetryPlane;
        }
    }

    // ************************************************************************* //

    Pour P :

    /*--------------------------------*- C++ -*----------------------------------*\
    | =========                 |                                                 |
    | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
    |  \\    /   O peration     | Version:  2.1.0                                 |
    |   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
    |    \\/     M anipulation  |                                                 |
    \*---------------------------------------------------------------------------*/
    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        object      p;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

    dimensions      [0 2 -2 0 0 0 0];

    internalField   uniform 0;

    boundaryField
    {
        agitateur
        {
            type            zeroGradient;a
        }
        
        agitateur:011
        {
            type            zeroGradient;
        }
        
        wall_fond_zone_mrf
        {
            type            zeroGradient;
        }
        
        wall_arbre_zone_mrf
         {
            type            zeroGradient;
        }
        
        wall_virole
        {
            type            zeroGradient;
        }
        
        wall_fond_cuve
        {
            type            zeroGradient;
        }
        
        wall_arbre_cuve
        {
            type            zeroGradient;
        }
        
        AMI1
        {
            type            cyclicAMI;
            value           $internalField;
        }

        AMI2
        {
            type            cyclicAMI;
            value           $internalField;
        }
        
        surface_libre
        {
            type            symmetryPlane;
        }
    }

    // ************************************************************************* //

  • Il ne faut pas oublier de changer l'axe de rotation de la zone mrf dans le fichier /constant/MRFZones comme suit :
     
    axis      axis   [0 0 0 0 0 0 0]  (0 1 0);
  • On peut lancer la simulation en tapant ./Allrun sur le terminal. On aura des erreurs qui provient de cellzone rotor.
    Il faut créer un fichier qui s'appelle fluide-mrf dans constant/polyMesh/sets et on recopie toutes les lignes concernant le fluide-mrf dans ce fichier.
     
  • Afin de re-lancer la simulation encore, supprimez les fichier de log.* et relancez la simulation.