etc/templates: updated rotating cases to use non-conformal coupling (NCC)

This commit is contained in:
Chris Greenshields
2022-05-20 09:56:59 +01:00
parent d522047f95
commit eb95e3f2c2
14 changed files with 338 additions and 46 deletions

View File

@ -1,11 +1,11 @@
Overview
========
+ Template case for rotating geometry flow for a closed geometry
+ Can be used for MRF or AMI simulations
+ Setup to run the simpleFoam solver for MRF, pimpleDyMFoam for AMI
+ Can be used for MRF or NCC simulations. Also supports AMI.
+ Setup to run the simpleFoam solver for MRF, pimpleFoam for NCC
+ The case is designed to be meshed with snappyHexMesh
+ snappyHexMesh is setup to use 3 trisurface files
+ fixed.obj: CAD of the stationary geometry
+ fixed.obj: CAD of the stationary (external) geometry
+ rotating.obj: CAD of the rotating geometry
+ rotatingZone.obj: CAD of surface bounding the rotating region
+ Copy the *.obj files to the constant/geometry directory
@ -55,8 +55,26 @@ Initialisation
+ Initialise the field files in the 0 directory
+ Set the viscosity in constant/transportProperties
+ Rotating properties are set in constant/rotatingZoneProperties
+ For MRF, this file is included from system/fvModels
+ For AMI, this file is included from constant/dynamicMeshDict
+ For MRF, this file is included from constant/MRFProperties
+ For NCC, this file is included from constant/dynamicMeshDict
+ Ensure settings are appropriate in controlDict, fvSchemes, fvSolution, for
relevant simulation; for AMI, in particular, ensure that deltaT, ddtSchemes
relevant simulation; for NCC, in particular, ensure that deltaT, ddtSchemes
and relaxationFactors are set for transient simulation
NCC Simulation
==============
+ After the mesh is generated, the couple must be created at the boundary
of the rotatingZone
+ createBaffles must first be run to generate two non-coupled patches from
the faces in the faceZone bounding the rotatingZone, e.g. by
createBaffles -overwrite
+ splitBaffles must then be run to duplicate the vertices shared by the
non-coupled patches to enable them to move independently, e.g. by
splitBaffles -overwrite
+ createNonConformalCouples must then be run to generate the couple patches
required by NCC, e.g. by
createNonConformalCouples -overwrite
+ To use AMI instead of NCC, the patches must be generated by createBaffles
using a suitable configuration file, provided by createBafflesDict-AMI
createBaffles -overwrite -dict system/createBafflesDict-AMI
The interface is completed by running splitBaffles, see above

View File

@ -13,16 +13,19 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
mover motionSolver;
mover
{
type motionSolver;
libs ("libfvMeshMovers.so" "libfvMotionSolvers.so");
libs ("libfvMeshMovers.so" "libfvMotionSolvers.so");
motionSolver solidBody;
motionSolver solidBody;
cellZone rotatingZone;
cellZone rotatingZone;
solidBodyMotionFunction rotatingMotion;
solidBodyMotionFunction rotatingMotion;
#include "rotatingZoneProperties"
#include "rotatingZoneProperties"
}
// ************************************************************************* //

View File

@ -28,16 +28,23 @@ baffles
{
master
{
name AMI1;
type cyclicAMI;
neighbourPatch AMI2;
name nonCouple1;
type patch;
patchFields
{
#include "nonCouplePatchFields"
}
inGroups (nonCouple);
}
slave
{
$master;
name AMI2;
type cyclicAMI;
neighbourPatch AMI1;
name nonCouple2;
type patch;
patchFields
{
#include "nonCouplePatchFields"
}
inGroups (nonCouple);
}
}
}

View File

@ -0,0 +1,45 @@
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: dev
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
object createBafflesDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
internalFacesOnly true;
fields true;
baffles
{
baffleFaces
{
type faceZone;
zoneName rotatingZone;
patches
{
master
{
name AMI1;
type cyclicAMI;
neighbourPatch AMI2;
}
slave
{
name AMI2;
type cyclicAMI;
neighbourPatch AMI1;
}
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,25 @@
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: dev
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
location "system";
object createNonConformalCouplesDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
fields true;
NCC
{
patches (nonCouple1 nonCouple2);
transform none;
}
// ************************************************************************* //

View File

@ -42,6 +42,14 @@ solvers
$p;
}
MeshPhi
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-2;
relTol 0;
}
"(U|k|omega|epsilon)"
{
solver smoothSolver;
@ -53,18 +61,19 @@ solvers
"(U|k|omega|epsilon)Final"
{
$U;
relTol 0;
}
}
"(PIMPLE|PISO)"
{
nOuterCorrectors 1;
nCorrectors 2;
correctPhi yes;
correctMeshPhi yes;
nOuterCorrectors 1;
nCorrectors 2;
nNonOrthogonalCorrectors 1;
pRefCell 0;
pRefValue 0;
pRefCell 0;
pRefValue 0;
}
SIMPLE
@ -99,4 +108,9 @@ relaxationFactors
}
}
cache
{
grad(U);
}
// ************************************************************************* //

View File

@ -0,0 +1,33 @@
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: dev
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
object nonCouplePatchFields;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
U
{
type movingWallSlipVelocity;
value uniform (0 0 0);
}
nut
{
type calculated;
value uniform 0;
}
"(p|k|omega|epsilon)"
{
type zeroGradient;
}
// ************************************************************************* //

View File

@ -1,11 +1,11 @@
Overview
========
+ Template case for rotating geometry flow with single inlet and outlet
+ Can be used for MRF or AMI simulations
+ Setup to run the simpleFoam solver for MRF, pimpleDyMFoam for AMI
+ Can be used for MRF or NCC simulations. Also supports AMI.
+ Setup to run the simpleFoam solver for MRF, pimpleFoam for NCC
+ The case is designed to be meshed with snappyHexMesh
+ snappyHexMesh is setup to use 3 trisurface files
+ fixed.obj: CAD of the stationary geometry
+ fixed.obj: CAD of the stationary (external) geometry
+ rotating.obj: CAD of the rotating geometry
+ rotatingZone.obj: CAD of surface bounding the rotating region
+ Copy the *.obj files to the constant/geometry directory
@ -61,8 +61,26 @@ Initialisation
+ For example, in 0/U, set the inlet velocity Uinlet
+ Set the viscosity in constant/transportProperties
+ Rotating properties are set in constant/rotatingZoneProperties
+ For MRF, this file is included from system/fvModels
+ For AMI, this file is included from constant/dynamicMeshDict
+ For MRF, this file is included from constant/MRFProperties
+ For NCC, this file is included from constant/dynamicMeshDict
+ Ensure settings are appropriate in controlDict, fvSchemes, fvSolution, for
relevant simulation; for AMI, in particular, ensure that deltaT, ddtSchemes
relevant simulation; for NCC, in particular, ensure that deltaT, ddtSchemes
and relaxationFactors are set for transient simulation
NCC Simulation
==============
+ After the mesh is generated, the couple must be created at the boundary
of the rotatingZone
+ createBaffles must first be run to generate two non-coupled patches from
the faces in the faceZone bounding the rotatingZone, e.g. by
createBaffles -overwrite
+ splitBaffles must then be run to duplicate the vertices shared by the
non-coupled patches to enable them to move independently, e.g. by
splitBaffles -overwrite
+ createNonConformalCouples must then be run to generate the couple patches
required by NCC, e.g. by
createNonConformalCouples -overwrite
+ To use AMI instead of NCC, the patches must be generated by createBaffles
using a suitable configuration file, provided by createBafflesDict-AMI
createBaffles -overwrite -dict system/createBafflesDict-AMI
The interface is completed by running splitBaffles, see above

View File

@ -13,16 +13,19 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
mover motionSolver;
mover
{
type motionSolver;
libs ("libfvMeshMovers.so" "libfvMotionSolvers.so");
libs ("libfvMeshMovers.so" "libfvMotionSolvers.so");
motionSolver solidBody;
motionSolver solidBody;
cellZone rotatingZone;
cellZone rotatingZone;
solidBodyMotionFunction rotatingMotion;
solidBodyMotionFunction rotatingMotion;
#include "rotatingZoneProperties"
#include "rotatingZoneProperties"
}
// ************************************************************************* //

View File

@ -28,15 +28,23 @@ baffles
{
master
{
name AMI1;
type cyclicAMI;
neighbourPatch AMI2;
name nonCouple1;
type patch;
patchFields
{
#include "nonCouplePatchFields"
}
inGroups (nonCouple);
}
slave
{
name AMI2;
type cyclicAMI;
neighbourPatch AMI1;
name nonCouple2;
type patch;
patchFields
{
#include "nonCouplePatchFields"
}
inGroups (nonCouple);
}
}
}

View File

@ -0,0 +1,45 @@
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: dev
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
object createBafflesDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
internalFacesOnly true;
fields true;
baffles
{
baffleFaces
{
type faceZone;
zoneName rotatingZone;
patches
{
master
{
name AMI1;
type cyclicAMI;
neighbourPatch AMI2;
}
slave
{
name AMI2;
type cyclicAMI;
neighbourPatch AMI1;
}
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,25 @@
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: dev
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
location "system";
object createNonConformalCouplesDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
fields true;
NCC
{
patches (nonCouple1 nonCouple2);
transform none;
}
// ************************************************************************* //

View File

@ -42,6 +42,14 @@ solvers
$p;
}
MeshPhi
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-2;
relTol 0;
}
"(U|k|omega|epsilon)"
{
solver smoothSolver;
@ -59,11 +67,13 @@ solvers
"(PIMPLE|PISO)"
{
nOuterCorrectors 1;
nCorrectors 2;
correctPhi yes;
correctMeshPhi yes;
nOuterCorrectors 1;
nCorrectors 2;
nNonOrthogonalCorrectors 1;
pRefCell 0;
pRefValue 0;
pRefCell 0;
pRefValue 0;
}
SIMPLE
@ -98,4 +108,9 @@ relaxationFactors
}
}
cache
{
grad(U);
}
// ************************************************************************* //

View File

@ -0,0 +1,33 @@
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: dev
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
object nonCouplePatchFields;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
U
{
type movingWallSlipVelocity;
value uniform (0 0 0);
}
nut
{
type calculated;
value uniform 0;
}
"(p|k|omega|epsilon)"
{
type zeroGradient;
}
// ************************************************************************* //