From 88128e03920ef1a640baf1732b9aaad7d1ef1305 Mon Sep 17 00:00:00 2001 From: sergio <sergio> Date: Mon, 12 Dec 2016 10:34:49 -0800 Subject: [PATCH] ENH: compressibleInterDyMFoam enhancements for mesh motion and sphere drop test case tutorial --- .../multiphase/compressibleInterFoam/TEqn.H | 2 +- .../compressibleInterDyMFoam.C | 18 +- .../compressibleInterDyMFoam/pEqn.H | 17 +- .../compressibleInterFoam.C | 1 + src/topoChangerFvMesh/Make/files | 1 + src/topoChangerFvMesh/Make/options | 6 +- .../dynamicMotionSolverTopoFvMesh.C | 114 ++++++ .../dynamicMotionSolverTopoFvMesh.H | 105 ++++++ .../laminar/sphereDrop/0.org/T | 63 ++++ .../laminar/sphereDrop/0.org/T.air | 63 ++++ .../laminar/sphereDrop/0.org/T.water | 63 ++++ .../laminar/sphereDrop/0.org/U | 64 ++++ .../laminar/sphereDrop/0.org/alpha.water | 61 +++ .../laminar/sphereDrop/0.org/p | 65 ++++ .../laminar/sphereDrop/0.org/p_rgh | 68 ++++ .../sphereDrop/0.org/pointDisplacement | 99 +++++ .../laminar/sphereDrop/Allclean | 7 + .../laminar/sphereDrop/Allrun | 25 ++ .../sphereDrop/constant/dynamicMeshDict | 108 ++++++ .../laminar/sphereDrop/constant/g | 21 ++ .../constant/thermophysicalProperties | 24 ++ .../constant/thermophysicalProperties.air | 55 +++ .../constant/thermophysicalProperties.water | 53 +++ .../sphereDrop/constant/transportProperties | 33 ++ .../sphereDrop/constant/turbulenceProperties | 28 ++ .../laminar/sphereDrop/include/meshModifiers | 43 +++ .../laminar/sphereDrop/system/blockMeshDict | 349 ++++++++++++++++++ .../laminar/sphereDrop/system/controlDict | 61 +++ .../laminar/sphereDrop/system/createPatchDict | 28 ++ .../laminar/sphereDrop/system/fvSchemes | 71 ++++ .../laminar/sphereDrop/system/fvSolution | 113 ++++++ .../laminar/sphereDrop/system/setFieldsDict | 33 ++ .../laminar/sphereDrop/system/topoSetDict | 326 ++++++++++++++++ 33 files changed, 2169 insertions(+), 19 deletions(-) create mode 100644 src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C create mode 100644 src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.H create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.air create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.water create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/U create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/alpha.water create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p_rgh create mode 100755 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/pointDisplacement create mode 100755 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allclean create mode 100755 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allrun create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/dynamicMeshDict create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/g create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.air create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.water create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/transportProperties create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/turbulenceProperties create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/include/meshModifiers create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/blockMeshDict create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/controlDict create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/createPatchDict create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSchemes create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSolution create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/setFieldsDict create mode 100644 tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/topoSetDict diff --git a/applications/solvers/multiphase/compressibleInterFoam/TEqn.H b/applications/solvers/multiphase/compressibleInterFoam/TEqn.H index 13e1feb546e..460c3c3e91b 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/TEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/TEqn.H @@ -5,7 +5,7 @@ + fvm::div(rhoPhi, T) - fvm::laplacian(mixture.alphaEff(turbulence->mut()), T) + ( - fvc::div(fvc::absolute(phi, U), p) + divU*p + fvc::ddt(rho, K) + fvc::div(rhoPhi, K) ) *( diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C index dc562c68e26..90d44b7a386 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C @@ -82,12 +82,12 @@ int main(int argc, char *argv[]) { #include "readControls.H" - { - // Store divU from the previous mesh so that it can be mapped - // and used in correctPhi to ensure the corrected phi has the - // same divergence - volScalarField divU("divU0", fvc::div(fvc::absolute(phi, U))); + // Store divU from the previous mesh so that it can be mapped + // and used in correctPhi to ensure the corrected phi has the + // same divergence + volScalarField divU("divU0", fvc::div(fvc::absolute(phi, U))); + { #include "CourantNo.H" #include "setDeltaT.H" @@ -110,8 +110,12 @@ int main(int argc, char *argv[]) ghf = (g & mesh.Cf()) - ghRef; } - if (mesh.changing() && correctPhi) + if ((correctPhi && mesh.changing()) || mesh.topoChanging()) { + // Calculate absolute flux from the mapped surface velocity + // SAF: temporary fix until mapped Uf is assessed + Uf = fvc::interpolate(U); + // Calculate absolute flux from the mapped surface velocity phi = mesh.Sf() & Uf; @@ -119,6 +123,8 @@ int main(int argc, char *argv[]) // Make the fluxes relative to the mesh motion fvc::makeRelative(phi, U); + + mesh.topoChanging(false); } } diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H index fef73aa3659..5423aee3c19 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H @@ -87,15 +87,6 @@ if (pimple.finalNonOrthogonalIter()) { - p = max(p_rgh + (alpha1*rho1 + alpha2*rho2)*gh, pMin); - p_rgh = p - (alpha1*rho1 + alpha2*rho2)*gh; - - dgdt = - ( - pos(alpha2)*(p_rghEqnComp2 & p_rgh)/rho2 - - pos(alpha1)*(p_rghEqnComp1 & p_rgh)/rho1 - ); - phi = phiHbyA + p_rghEqnIncomp.flux(); U = HbyA @@ -116,10 +107,16 @@ rho = alpha1*rho1 + alpha2*rho2; - // Correct p_rgh for consistency with p and the updated densities + p = max(p_rgh + rho*gh, pMin); p_rgh = p - rho*gh; p_rgh.correctBoundaryConditions(); + dgdt = + ( + pos(alpha2)*(p_rghEqnComp2 & p_rgh)/rho2 + - pos(alpha1)*(p_rghEqnComp1 & p_rgh)/rho1 + ); + K = 0.5*magSqr(U); Info<< "max(U) " << max(mag(U)).value() << endl; diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C index 65022582553..5042da7731b 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C @@ -98,6 +98,7 @@ int main(int argc, char *argv[]) solve(fvm::ddt(rho) + fvc::div(rhoPhi)); #include "UEqn.H" + volScalarField divU(fvc::div(fvc::absolute(phi, U))); #include "TEqn.H" // --- Pressure corrector loop diff --git a/src/topoChangerFvMesh/Make/files b/src/topoChangerFvMesh/Make/files index 17883173042..8a0e7e686a3 100644 --- a/src/topoChangerFvMesh/Make/files +++ b/src/topoChangerFvMesh/Make/files @@ -1,5 +1,6 @@ topoChangerFvMesh/topoChangerFvMesh.C rawTopoChangerFvMesh/rawTopoChangerFvMesh.C +dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C /* linearValveFvMesh/linearValveFvMesh.C diff --git a/src/topoChangerFvMesh/Make/options b/src/topoChangerFvMesh/Make/options index 44753e64c96..6477e3ff9d0 100644 --- a/src/topoChangerFvMesh/Make/options +++ b/src/topoChangerFvMesh/Make/options @@ -2,10 +2,12 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/surfMesh/lnInclude LIB_LIBS = \ -lfiniteVolume \ -ldynamicFvMesh \ -ldynamicMesh \ - -lmeshTools + -lmeshTools \ + -lsurfMesh diff --git a/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C new file mode 100644 index 00000000000..3ebdff1638a --- /dev/null +++ b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "addToRunTimeSelectionTable.H" +#include "dynamicMotionSolverTopoFvMesh.H" +#include "mapPolyMesh.H" +#include "OBJstream.H" +#include "Time.H" +#include "surfaceFields.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(dynamicMotionSolverTopoFvMesh, 0); + + addToRunTimeSelectionTable + ( + dynamicFvMesh, + dynamicMotionSolverTopoFvMesh, + IOobject + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::dynamicMotionSolverTopoFvMesh::dynamicMotionSolverTopoFvMesh +( + const IOobject& io +) +: + topoChangerFvMesh(io), + motionPtr_(motionSolver::New(*this)) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::dynamicMotionSolverTopoFvMesh::~dynamicMotionSolverTopoFvMesh() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::dynamicMotionSolverTopoFvMesh::update() +{ + // Do mesh changes (not using inflation - points added directly into mesh) + autoPtr<mapPolyMesh> topoChangeMap = topoChanger_.changeMesh(false); + + if (topoChangeMap.valid()) + { + Info << "Executing mesh topology update" << endl; + motionPtr_->updateMesh(topoChangeMap()); + + setV0() = V(); + + pointField newPoints(motionPtr_->newPoints()); + movePoints(newPoints); + + if (debug) + { + OBJstream osOld("oldPts_" + time().timeName() + ".obj"); + const pointField& oldPts = oldPoints(); + forAll(oldPts, i) + { + osOld.write(oldPts[i]); + } + + OBJstream osNew("newPts_" + time().timeName() + ".obj"); + forAll(points(), i) + { + osNew.write(points()[i]); + } + } + } + else + { + // Calculate the new point positions using the motion solver + pointField newPoints(motionPtr_->newPoints()); + + // The mesh now contains the cells with zero volume + Info << "Executing mesh motion" << endl; + movePoints(newPoints); + } + + return true; +} + + +// ************************************************************************* // diff --git a/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.H b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.H new file mode 100644 index 00000000000..ad1cb71ba7e --- /dev/null +++ b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::dynamicMotionSolverTopoFvMesh + +Description + Sample topoChangerFvMesh that moves an object using a motion solver + +SourceFiles + dynamicMotionSolverTopoFvMesh.C + +\*---------------------------------------------------------------------------*/ + +#ifndef dynamicMotionSolverTopoFvMesh_H +#define dynamicMotionSolverTopoFvMesh_H + +#include "topoChangerFvMesh.H" +#include "motionSolver.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes + +/*---------------------------------------------------------------------------*\ + Class dynamicMotionSolverTopoFvMesh Declaration +\*---------------------------------------------------------------------------*/ + +class dynamicMotionSolverTopoFvMesh +: + public topoChangerFvMesh +{ + // Private data + + //- Motion dictionary + dictionary motionDict_; + + //- Motion solver + autoPtr<motionSolver> motionPtr_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + dynamicMotionSolverTopoFvMesh(const dynamicMotionSolverTopoFvMesh&); + + //- Disallow default bitwise assignment + void operator=(const dynamicMotionSolverTopoFvMesh&); + + +public: + + //- Runtime type information + TypeName("dynamicMotionSolverTopoFvMesh"); + + + // Constructors + + //- Construct from database + explicit dynamicMotionSolverTopoFvMesh(const IOobject& io); + + + //- Destructor + virtual ~dynamicMotionSolverTopoFvMesh(); + + + // Member Functions + + //- Update the mesh for both mesh motion and topology change + virtual bool update(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T new file mode 100644 index 00000000000..6ad26c1f2e3 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 300; + } + outerAMI + { + type cyclicAMI; + value uniform 300; + } + top + { + type inletOutlet; + inletValue uniform 300; + value uniform 300; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.air b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.air new file mode 100644 index 00000000000..ed74914f527 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.air @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 300; + } + outerAMI + { + type cyclicAMI; + value uniform 300; + } + top + { + type inletOutlet; + inletValue uniform 300; + value uniform 300; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.water b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.water new file mode 100644 index 00000000000..d3333fb16e6 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.water @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T.water; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 300; + } + outerAMI + { + type cyclicAMI; + value uniform 300; + } + top + { + type inletOutlet; + inletValue uniform 300; + value uniform 300; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/U b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/U new file mode 100644 index 00000000000..f7ef8ffeb28 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/U @@ -0,0 +1,64 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform (0 0 0); + } + outerAMI + { + type cyclicAMI; + value uniform (0 0 0); + } + top + { + type zeroGradient; + } + bottom + { + type fixedValue; + value uniform (0 0 0); + } + farFieldWall + { + type fixedValue; + value uniform (0 0 0); + } + sphere + { + type movingWallVelocity; + value uniform (0 0 0); + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/alpha.water b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/alpha.water new file mode 100644 index 00000000000..d1c6a83b9c2 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/alpha.water @@ -0,0 +1,61 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus.master | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alpha.walter; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 0; + } + outerAMI + { + type cyclicAMI; + value uniform 0; + } + top + { + type zeroGradient; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p new file mode 100644 index 00000000000..dea3ed1d9db --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p @@ -0,0 +1,65 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus.master | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 101325; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 101325; + } + outerAMI + { + type cyclicAMI; + value uniform 101325; + } + top + { + type calculated; + value uniform 101325; + } + bottom + { + type calculated; + value uniform 101325; + } + farFieldWall + { + type calculated; + value uniform 101325; + } + sphere + { + type calculated; + value uniform 101325; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p_rgh b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p_rgh new file mode 100644 index 00000000000..f8f72530ac3 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p_rgh @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus.master | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p_rgh; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 101325; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 101325; + } + outerAMI + { + type cyclicAMI; + value uniform 101325; + } + top + { + type fixedValue; + value uniform 101325; + } + bottom + { + type fixedFluxPressure; + gradient uniform 0; + value uniform 101325; + } + farFieldWall + { + type fixedFluxPressure; + gradient uniform 0; + value uniform 101325; + } + sphere + { + type fixedFluxPressure; + gradient uniform 0; + value uniform 101325; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/pointDisplacement b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/pointDisplacement new file mode 100755 index 00000000000..b73c0d09672 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/pointDisplacement @@ -0,0 +1,99 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class pointVectorField; + location "0"; + object pointDisplacement; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "$FOAM_CASE/constant/dynamicMeshDict" +#include "$FOAM_CASE/system/blockMeshDict" + +dimensions [0 1 0 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + farFieldWall + { + type fixedValue; + value uniform (0 0 0); + } + bottom + { + type fixedValue; + value uniform (0 0 0); + } + top + { + type fixedValue; + value uniform (0 0 0); + } + sphere + { + type sixDoFRigidBodyDisplacement; + centreOfMass (0 $:sphereCentreHeight 0); + momentOfInertia (2e-3 2e-3 2e-3); + velocity (0 -3.77 0); + accelerationRelaxation 1; + accelerationDamping 1; + + mass 2.08e-3; // sphere mass 0.15 kg, 5 degree wedge +// rhoInf -1; // needed only for solvers solving for + // kinematic pressure + report on; + + constraints + { + maxIterations 500; + + fixedLine1 + { + sixDoFRigidBodyMotionConstraint line; + centreOfRotation (0 0.147 0); + direction (0 1 0); + } + + fixedOrientation1 + { + sixDoFRigidBodyMotionConstraint orientation; + } + } + + solver + { + type Newmark; + } + + value uniform ( 0 0 0 ); + } + innerAMI + { + type cyclicAMI; + } + outerAMI + { + type cyclicAMI; + } + back + { + type wedge; + } + front + { + type wedge; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allclean b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allclean new file mode 100755 index 00000000000..75a8a2419c3 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +rm -rf 0/ +cleanCase diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allrun b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allrun new file mode 100755 index 00000000000..469522ab3ef --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allrun @@ -0,0 +1,25 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication topoSet + +# remove empty patches +runApplication createPatch -overwrite + +# split mesh into 2 regions at the AMI coupled patch +runApplication mergeOrSplitBaffles -overwrite + +echo "Copying 0.org to 0" +cp -r 0.org 0 + +runApplication setFields + +(cd constant/polyMesh && ln -s ../../include/meshModifiers .) + +runApplication $(getApplication) + +# ----------------------------------------------------------------- end-of-file diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/dynamicMeshDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/dynamicMeshDict new file mode 100644 index 00000000000..ce0539a68cb --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/dynamicMeshDict @@ -0,0 +1,108 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class dictionary; + location "constant"; + object dynamicMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dynamicFvMesh dynamicMotionSolverTopoFvMesh; + +motionSolverLibs ("libfvMotionSolvers.so"); + +solver displacementLayeredMotion; + +displacementLayeredMotionCoeffs +{ + // In addition to boundary conditions on pointDisplacement + // we can also have boundary conditions on faceZones bordering cellZones. + regions + { + LARTopCells + { + interpolationScheme oneSided; + + boundaryField + { + top // patch + { + type uniformFollow; // use pointDisplacement bc + patch sphere; // fixed/static + } + + LARTopFaces + { + type slip; + } + } + } + + topBlock + { + interpolationScheme oneSided; + + boundaryField + { + LARTopFaces + { + type uniformFollow; + patch sphere; + } + + centralTopFaces + { + type slip; + } + + } + } + + centralBlock + { + interpolationScheme oneSided; + + boundaryField + { + centralTopFaces + { + type uniformFollow; + patch sphere; + } + + centralBottomFaces + { + type slip; + } + } + } + + bottomBlock + { + interpolationScheme oneSided; + + boundaryField + { + centralBottomFaces + { + type uniformFollow; + patch sphere; + } + bottom + { + type slip; + } + } + } + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/g b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/g new file mode 100644 index 00000000000..fdd77153a08 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/g @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + location "constant"; + object g; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -2 0 0 0 0]; +value (0 -9.81 0 ); + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties new file mode 100644 index 00000000000..e06c9e14711 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties @@ -0,0 +1,24 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +phases (water air); + +pMin pMin [1 -1 -2 0 0 0 0] 1000; + +sigma sigma [1 0 -2 0 0 0 0] 0.07; + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.air b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.air new file mode 100644 index 00000000000..0aa182835f9 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.air @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState perfectGas; + specie specie; + energy sensibleInternalEnergy; +} + +mixture +{ + specie + { + nMoles 1; + molWeight 28.9; + } + thermodynamics + { + Cp 1007; + Hf 0; + } + equationOfState + { + rho 1.27; + R 90000; + rho0 1.27; + } + transport + { + mu 1.84e-05; + Pr 0.7; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.water b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.water new file mode 100644 index 00000000000..e315d6ee72f --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.water @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState rhoConst; + specie specie; + energy sensibleInternalEnergy; +} + +mixture +{ + specie + { + nMoles 1; + molWeight 18.0; + } + equationOfState + { + rho 1027; + } + thermodynamics + { + Cp 4195; + Hf 0; + } + transport + { + mu 3.645e-4; + Pr 2.289; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/transportProperties b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/transportProperties new file mode 100644 index 00000000000..c0d0baa30dd --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/transportProperties @@ -0,0 +1,33 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +phases (water air); + +water +{ + transportModel Newtonian; + nu [0 2 -1 0 0 0 0] 1e-06; + rho [1 -3 0 0 0 0 0] 998.2; +} + +air +{ + transportModel Newtonian; + nu [0 2 -1 0 0 0 0] 1.48e-05; + rho [1 -3 0 0 0 0 0] 1; +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/turbulenceProperties b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/turbulenceProperties new file mode 100644 index 00000000000..bc1d11db5c8 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + +RAS +{ + RASModel laminar; + + turbulence on; + + printCoeffs off; +} +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/include/meshModifiers b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/include/meshModifiers new file mode 100644 index 00000000000..9a134c96b1c --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/include/meshModifiers @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 2.3.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyTopoChanger; + location "constant/polyMesh"; + object meshModifiers; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +2 +( +top +{ + type layerAdditionRemoval; + faceZoneName top; + minLayerThickness 0.001; + maxLayerThickness 0.03; + thicknessFromVolume false; + active true; +} + +bottom +{ + type layerAdditionRemoval; + faceZoneName bottom; +// minLayerThickness 0.005; +// maxLayerThickness 0.03; + minLayerThickness 0.005; + maxLayerThickness 0.03; + thicknessFromVolume false; + active true; +} +) + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/blockMeshDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/blockMeshDict new file mode 100644 index 00000000000..c2962ef4fe3 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/blockMeshDict @@ -0,0 +1,349 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM Extend Project: Open Source CFD | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +// Domain +axisLevel 0.0; // x-coord of axis (right boundary of domain) +bottomLevel -1.0; // y-coord of bottom of domain +topLevel 1.0; // y-coord of top of domain +farFieldWall -0.572; // x-coord of far field wall +wedgeAngle 5.0; // Wedge angle in degrees +// Size of block moving with sphere (no cell deformation), in sphere radii +// above and below centre of sphere +upperSphereBlock 5.0; +lowerSphereBlock 5.0; +sphereLayerThickness 2.0; // Total layer thickness in sphere radii + +// Sphere +sphereRadius 0.028; +sphereCentreHeight 0.147; // y-coord of sphere centre + +pi #calc "Foam::constant::mathematical::pi"; + +// Calculated positions +sphereRadiusPosition #calc "-1.0*(1.0 + $sphereLayerThickness)*$sphereRadius"; //"-1.0* $sphereRadius"; +AMIBlockPosition #calc "2.0*$sphereRadiusPosition + $sphereRadius"; +// Centre plane is z=0, so use half of wedge angle to calculate pos and neg +// z-positions +halfAngleRad #calc "0.5*$wedgeAngle*$pi/180.0"; +tanAlpha #calc "tan($halfAngleRad)"; +// Multiply by -1 because tan give negative value +firstBlockPosDepth #calc "-1.0*$tanAlpha*$sphereRadiusPosition"; +firstBlockNegDepth #calc "-1.0*$firstBlockPosDepth"; +AMIBlockPosDepth #calc "-1.0*$tanAlpha*$AMIBlockPosition"; +AMIBlockNegDepth #calc "-1.0*$AMIBlockPosDepth"; +farFieldPosDepth #calc "-1.0*$tanAlpha*$farFieldWall"; +farFieldNegDepth #calc "-1.0*$farFieldPosDepth"; + +bottomBlockTopHeight #calc "$sphereCentreHeight - $lowerSphereBlock*$sphereRadius"; +topBlockBottomHeight #calc "$sphereCentreHeight + $upperSphereBlock*$sphereRadius"; + +topSphere #calc "$sphereCentreHeight + $sphereRadius"; +bottomSphere #calc "$sphereCentreHeight - $sphereRadius"; +topSphereLayer #calc "$sphereCentreHeight + (1.0 + $sphereLayerThickness)*$sphereRadius"; +bottomSphereLayer #calc "$sphereCentreHeight - (1.0 + $sphereLayerThickness)*$sphereRadius"; + +// Layer block below sphere +innerBottomLayerX #calc "-1.0*cos(45.0*$pi/180.0)*$sphereRadius"; +innerBottomLayerY #calc "$sphereCentreHeight - cos(45.0*$pi/180.0)*$sphereRadius"; +innerBottomLayerZPos #calc "-1.0*$tanAlpha*$innerBottomLayerX"; +innerBottomLayerZNeg #calc "-1.0*$innerBottomLayerZPos"; + +innerBottomArcX1 #calc "-1.0*sin(22.5*$pi/180.0)*$sphereRadius"; +innerBottomArcY1 #calc "$sphereCentreHeight - cos(22.5*$pi/180.0)*$sphereRadius"; +innerBottomArcZ1Pos #calc "$innerBottomArcX1*$tanAlpha"; +innerBottomArcZ1Neg #calc "-1.0*$innerBottomArcZ1Pos"; + +outerBottomArcX1 #calc "-1.0*sin(22.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)"; +outerBottomArcY1 #calc #{ $sphereCentreHeight - cos(22.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness) #}; +outerBottomArcZ1Pos #calc "$outerBottomArcX1*$tanAlpha"; +outerBottomArcZ1Neg #calc "-1.0*$outerBottomArcZ1Pos"; + +outerBottomLayerX #calc "-1.0*cos(45.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerBottomLayerY #calc "$sphereCentreHeight - cos(45.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerBottomLayerZPos #calc "-1.0*$tanAlpha*$outerBottomLayerX"; +outerBottomLayerZNeg #calc "-1.0*$outerBottomLayerZPos"; + +// Layer block above sphere +innerTopLayerX #calc "cos(135.0*$pi/180.0)*$sphereRadius"; +innerTopLayerY #calc "$sphereCentreHeight - cos(135.0*$pi/180.0)*$sphereRadius"; +innerTopLayerZPos #calc "-1.0*$tanAlpha*$innerBottomLayerX"; +innerTopLayerZNeg #calc "-1.0*$innerBottomLayerZPos"; + +innerTopArcX1 #calc "-1.0*sin(157.5*$pi/180.0)*$sphereRadius"; +innerTopArcY1 #calc "$sphereCentreHeight - cos(157.5*$pi/180.0)*$sphereRadius"; +innerTopArcZ1Pos #calc "$innerTopArcX1*$tanAlpha"; +innerTopArcZ1Neg #calc "-1.0*$innerTopArcZ1Pos"; + +outerTopArcX1 #calc "-1.0*sin(157.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)"; +outerTopArcY1 #calc "$sphereCentreHeight - cos(157.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)"; +outerTopArcZ1Pos #calc "$outerTopArcX1*$tanAlpha"; +outerTopArcZ1Neg #calc "-1.0*$outerTopArcZ1Pos"; + +outerTopLayerX #calc "cos(135.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerTopLayerY #calc "$sphereCentreHeight - cos(135.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerTopLayerZPos #calc "-1.0*$tanAlpha*$outerTopLayerX"; +outerTopLayerZNeg #calc "-1.0*$outerTopLayerZPos"; + +// Layer block left of sphere +innerLeftArcX #calc "-1.0*$sphereRadius"; +innerLeftArcY #calc "$sphereCentreHeight"; +innerLeftArcZPos #calc "-1.0*$tanAlpha*$innerLeftArcX"; +innerLeftArcZNeg #calc "-1.0*$innerLeftArcZPos"; + +outerLeftArcX #calc "-1.0*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerLeftArcZPos #calc "-1.0*$tanAlpha*$outerLeftArcX"; +outerLeftArcZNeg #calc "-1.0*$outerLeftArcZPos"; + + + +vertices +( + // Lower moving block + ($axisLevel $bottomLevel 0) // 0 + ($axisLevel $bottomBlockTopHeight 0) // 1 + ($AMIBlockPosition $bottomLevel $AMIBlockPosDepth) // 2 + ($AMIBlockPosition $bottomLevel $AMIBlockNegDepth) // 3 + ($AMIBlockPosition $bottomBlockTopHeight $AMIBlockNegDepth) // 4 + ($AMIBlockPosition $bottomBlockTopHeight $AMIBlockPosDepth) // 5 + + // Upper moving block + ($AMIBlockPosition $topBlockBottomHeight $AMIBlockPosDepth) // 6 + ($AMIBlockPosition $topBlockBottomHeight $AMIBlockNegDepth) // 7 + ($axisLevel $topBlockBottomHeight 0) // 8 + ($AMIBlockPosition $topLevel $AMIBlockPosDepth) // 9 + ($AMIBlockPosition $topLevel $AMIBlockNegDepth) // 10 + ($axisLevel $topLevel 0) // 11 + + // Farfield block + ($farFieldWall $bottomLevel $farFieldPosDepth) // 12 + ($AMIBlockPosition $bottomLevel $AMIBlockPosDepth) // 13 + ($AMIBlockPosition $topLevel $AMIBlockPosDepth) // 14 + ($farFieldWall $topLevel $farFieldPosDepth) // 15 + + ($farFieldWall $bottomLevel $farFieldNegDepth) // 16 + ($AMIBlockPosition $bottomLevel $AMIBlockNegDepth) // 17 + ($AMIBlockPosition $topLevel $AMIBlockNegDepth) // 18 + ($farFieldWall $topLevel $farFieldNegDepth) // 19 + + // Sphere block + ($axisLevel $bottomSphere 0) // 20 + ($innerBottomLayerX $innerBottomLayerY $innerBottomLayerZPos) // 21 + ($innerBottomLayerX $innerBottomLayerY $innerBottomLayerZNeg) // 22 + ($axisLevel $bottomSphereLayer 0) // 23 + ($outerBottomLayerX $outerBottomLayerY $outerBottomLayerZPos) // 24 + ($outerBottomLayerX $outerBottomLayerY $outerBottomLayerZNeg) // 25 + + ($axisLevel $topSphere 0) // 26 + ($axisLevel $topSphereLayer 0) // 27 + ($innerTopLayerX $innerTopLayerY $innerTopLayerZNeg) // 28 + ($outerTopLayerX $outerTopLayerY $outerTopLayerZNeg) // 29 + ($innerTopLayerX $innerTopLayerY $innerTopLayerZPos) // 30 + ($outerTopLayerX $outerTopLayerY $outerTopLayerZPos) // 31 +); + +edgeNumber 1; // 0.707; + +layerGrading 0.5; +invLayerGrading #calc "1.0/$layerGrading"; +blockGrading 0.3; +invBlockGrading #calc "1.0/$blockGrading"; + +blocks +( + hex (16 17 18 19 12 13 14 15) farField (25 100 1) simplegrading (1 1 1) + + hex (3 0 1 4 2 0 1 5) bottomBlock (10 50 1) simplegrading ($edgeNumber 1 1) + + hex (7 8 11 10 6 8 11 9) topBlock (10 35 1) simplegrading ($edgeNumber 1 1) + + hex (25 23 20 22 24 23 20 21) + centralBlock (10 20 1) + edgeGrading + ( + 1 1 1 1 + $layerGrading $layerGrading $layerGrading $layerGrading + 1 1 1 1 + ) // bottom layer + + hex (25 22 28 29 24 21 30 31) + centralBlock (20 20 1) + edgeGrading + ( + $layerGrading $layerGrading $layerGrading $layerGrading + 1 1 1 1 + 1 1 1 1 + ) // middle layer + + hex (28 26 27 29 30 26 27 31) + centralBlock (10 20 1) + edgeGrading + ( + 1 1 1 1 + $invLayerGrading $invLayerGrading $invLayerGrading $invLayerGrading + 1 1 1 1 + ) // top layer + + hex (4 1 23 25 5 1 23 24) + centralBlock (10 10 1) + edgeGrading + ( + $edgeNumber 1 1 $edgeNumber + $blockGrading $edgeNumber $edgeNumber $blockGrading + 1 $edgeNumber $edgeNumber 1 + ) // bottom + + hex (4 25 29 7 5 24 31 6) + centralBlock (10 20 1) + edgeGrading + ( + $blockGrading $blockGrading $blockGrading $blockGrading + 1 1 1 1 + 1 1 1 1 + ) // middle + + hex (29 27 8 7 31 27 8 6) + centralBlock (10 10 1) + edgeGrading + ( + 1 $edgeNumber $edgeNumber 1 + $invBlockGrading $invBlockGrading $invBlockGrading $invBlockGrading + 1 1 1 1 + ) // top +); + +edges +( + // Layer block below sphere + arc 20 22 ($innerBottomArcX1 $innerBottomArcY1 $innerBottomArcZ1Pos) + arc 20 21 ($innerBottomArcX1 $innerBottomArcY1 $innerBottomArcZ1Neg) + arc 23 25 ($outerBottomArcX1 $outerBottomArcY1 $outerBottomArcZ1Pos) + arc 23 24 ($outerBottomArcX1 $outerBottomArcY1 $outerBottomArcZ1Neg) + + // Layer block above sphere + arc 26 28 ($innerTopArcX1 $innerTopArcY1 $innerTopArcZ1Pos) + arc 26 30 ($innerTopArcX1 $innerTopArcY1 $innerTopArcZ1Neg) + arc 27 29 ($outerTopArcX1 $outerTopArcY1 $outerTopArcZ1Pos) + arc 27 31 ($outerTopArcX1 $outerTopArcY1 $outerTopArcZ1Neg) + + // Layer block left of sphere + arc 22 28 ($innerLeftArcX $innerLeftArcY $innerLeftArcZNeg) + arc 21 30 ($innerLeftArcX $innerLeftArcY $innerLeftArcZPos) + arc 24 31 ($outerLeftArcX $innerLeftArcY $outerLeftArcZPos) + arc 25 29 ($outerLeftArcX $innerLeftArcY $outerLeftArcZNeg) +); + +boundary +( + front + { + type wedge; + faces + ( + (0 1 5 2) + (5 1 23 24) + (23 20 21 24) + (24 21 30 31) + (5 24 31 6) + (31 27 8 6) + (6 8 11 9) + (31 30 26 27) + (12 13 14 15) + ); + } + back + { + type wedge; + faces + ( + (0 3 4 1) + (1 4 25 23) + (4 7 29 25) + (23 25 22 20) + (25 29 28 22) + (29 7 8 27) + (28 29 27 26) + (7 10 11 8) + (16 17 18 19) + ); + } + innerAMI + { + type cyclicAMI; + neighbourPatch outerAMI; + faces + ( + (4 5 6 7) + (6 9 10 7) + (2 5 4 3) + ); + transform noOrdering; + } + outerAMI + { + type cyclicAMI; + neighbourPatch innerAMI; + faces + ( + (14 13 17 18) + ); + transform noOrdering; + } + top + { + type wall; + faces + ( + (15 14 18 19) + (9 11 11 10) + ); + } + bottom + { + type wall; + faces + ( + (12 16 17 13) + (0 2 3 0) + ); + } + farFieldWall + { + type wall; + faces + ( + (12 15 19 16) + ); + } + sphere + { + type wall; + faces + ( + (20 22 21 20) + (21 22 28 30) + (30 26 26 28) + ); + } +); + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/controlDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/controlDict new file mode 100644 index 00000000000..12a349e369d --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/controlDict @@ -0,0 +1,61 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application compressibleInterDyMFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 0.07; + +deltaT 5e-05; + +writeControl adjustableRunTime; + +writeInterval 0.001; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression off; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable true; + +adjustTimeStep yes; + +maxCo 0.1; + +maxAlphaCo 0.1; + +libs +( + "libsixDoFRigidBodyMotion.so" + "libtopoChangerFvMesh.so" +); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/createPatchDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/createPatchDict new file mode 100644 index 00000000000..ef1206a09bf --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/createPatchDict @@ -0,0 +1,28 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object createPatchDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Do a synchronisation of coupled points after creation of any patches. +// Note: this does not work with points that are on multiple coupled patches +// with transformations (i.e. cyclics). +pointSync false; + +// Patches to create. An empty patch list just removes patches with zero +// faces from $FOAM_CASE/constant/polyMesh/boundary. +patches +( +); + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSchemes b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSchemes new file mode 100644 index 00000000000..7fdcd8e68ef --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSchemes @@ -0,0 +1,71 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(U) cellLimited Gauss linear 1; +} + +divSchemes +{ + default none; + div(rhoPhi,U) Gauss linearUpwind grad(U); + div(phi,alpha) Gauss vanLeer; + div(phirb,alpha) Gauss linear; + div(rhoPhi,K) Gauss linear; + div(rhoPhi,T) Gauss linear; + div(phi,thermo:rho.water) Gauss linear; + div(phi,thermo:rho.air) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; + div((phi+meshPhi),p) Gauss linear; + + div((muEff*dev2(T(grad(U))))) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + pcorr ; + p ; + pd; + alpha1; + p_rgh; +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSolution b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSolution new file mode 100644 index 00000000000..d88808501c0 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSolution @@ -0,0 +1,113 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + "alpha.water.*" + { + nAlphaCorr 1; + nAlphaSubCycles 1; + cAlpha 1; + } + + + cellDisplacement + { + solver GAMG; + tolerance 1e-5; + relTol 0; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + } + + "rho.*|pcorr.*" + { + solver PCG; + preconditioner DIC; + tolerance 1e-8; + relTol 0; + } + + p_rgh + { + solver GAMG; + tolerance 1e-8; + relTol 0.05; + smoother DICGaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + cacheAgglomeration on; + agglomerator faceAreaPair; + nCellsInCoarsestLevel 10; + mergeLevels 1; + } + + p_rghFinal + { + $p_rgh; + tolerance 1e-08; + relTol 0; + } + + "(U|k|epsilon|T)" + { + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-08; + relTol 0.1; + } + + "(U|k|epsilon|T)Final" + { + $U; + tolerance 1e-08; + relTol 0; + } + +} + +PIMPLE +{ + momentumPredictor no; + nOuterCorrectors 2; + nCorrectors 4; + + nNonOrthogonalCorrectors 1; + + correctPhi yes; + + checkMeshCourantNo no; + moveMeshOuterCorrectors no; + + transonic false; +} + +relaxationFactors +{ + fields + { + } + equations + { + ".*" 1; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/setFieldsDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/setFieldsDict new file mode 100644 index 00000000000..249d2fb1522 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/setFieldsDict @@ -0,0 +1,33 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +defaultFieldValues +( + volScalarFieldValue alpha.water 0 // Air +); + +regions +( + boxToCell + { + box (-20 -20 -1) (20 0 1); + fieldValues + ( + volScalarFieldValue alpha.water 1 // Water + ); + } +); diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/topoSetDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/topoSetDict new file mode 100644 index 00000000000..15c18752cca --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/topoSetDict @@ -0,0 +1,326 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object topoSetDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +actions +( + // 1. Create cellZones + + // Create cellSet topBlock from cellZone topBlock created by blockMesh + { + name topBlockCells; + type cellSet; + action new; + source zoneToCell; + sourceInfo + { + name topBlock; + } + } + + // Create cellSet centralBlock from cellZone centralBlock created by blockMesh + { + name centralBlockCells; + type cellSet; + action new; + source zoneToCell; + sourceInfo + { + name centralBlock; + } + } + + // Create cellSet bottomBlock from cellZone bottomBlock created by blockMesh + { + name bottomBlockCells; + type cellSet; + action new; + source zoneToCell; + sourceInfo + { + name bottomBlock; + } + } + + + // 2. Get the faces at the top patch + + // Get all the faces in the top patch + { + name top; + type faceSet; + action new; + source patchToFace; + sourceInfo + { + name top; + } + } + + // Only keep those that border the top block topBlock + { + name top; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set topBlockCells; + option all; + } + } + + // Convert top from faceSet to faceZone + { + name top; + type faceZoneSet; + action new; + source setAndNormalToFaceZone; + sourceInfo + { + faceSet top; + normal (0 -1 0); + } + } + + + // 3. Get the faces on the border of cellZones topBlock and centralBlock + + // Get all faces in topBlock + { + name centralTopFaces; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set topBlockCells; + option all; + } + } + + // Get the faces that border topBlock and centralBlock + { + name centralTopFaces; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set centralBlockCells; + option all; + } + } + + // Convert topBlockFaces from faceSet to faceZone + { + name centralTopFaces; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet centralTopFaces; + cellSet topBlockCells; + } + } + + + // 4. Get all the faces on the border of cellZones centralBlock and + // bottomBlock + + // Get all faces in bottomBlock + { + name centralBottomFaces; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set bottomBlockCells; + option all; + } + } + + // Get the faces that border centralBlock and bottomBlock + { + name centralBottomFaces; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set centralBlockCells; + option all; + } + } + + // Convert centralBottomFaces from faceSet to faceZone + { + name centralBottomFaces; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet centralBottomFaces; + cellSet centralBlockCells; + } + } + + + // 5. Get the faces at bottom patch + + // Get all the faces in the bottom patch + { + name bottom; + type faceSet; + action new; + source patchToFace; + sourceInfo + { + name bottom; + } + } + + // Only keep those that border the bottom block bottomBlockCells + { + name bottom; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set bottomBlockCells; + option all; + } + } + + // Convert bottom from faceSet to faceZone + { + name bottom; + type faceZoneSet; + action new; + source setAndNormalToFaceZone; + sourceInfo + { + faceSet bottom; + normal (0 1 0); + } + } + + + // AJH New - create additional face zones to enable solid body motion + // for the majority of the action area around the sphere, and only apply + // layer addition-removal (LAR) at the extremities + + // create cell zone at top of domain for LAR region + { + name LARTopCells; + type cellSet; + action new; + source cellToCell; + sourceInfo + { + set topBlockCells; + } + } + { + name LARTopCells; + type cellSet; + action subset; + source boxToCell; + sourceInfo + { + box (-100 0.95 -100)(100 100 100); + } + } + { + name LARTopCells; + type cellZoneSet; + action new; + source setToCellZone; + sourceInfo + { + set LARTopCells; + } + } + + // upate old topBlock cellZone + { + name topBlockCells; + type cellSet; + action delete; + source cellToCell; + sourceInfo + { + set LARTopCells; + } + } + { + name topBlock; + type cellZoneSet; + action remove; + } + { + name topBlock; + type cellZoneSet; + action new; + source setToCellZone; + sourceInfo + { + set topBlockCells; + } + } + + // generate face zone between LARTopCells and topBlockCells cellSets + { + name LARTopFaces; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set LARTopCells; + option all; + } + } + { + name LARTopFaces; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set topBlockCells; + option all; + } + } + { + name LARTopFaces; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet LARTopFaces; + cellSet topBlockCells; + } + } +); + + +// ************************************************************************* // -- GitLab