diff --git a/applications/solvers/multiphase/compressibleInterFoam/TEqn.H b/applications/solvers/multiphase/compressibleInterFoam/TEqn.H
index 13e1feb546..460c3c3e91 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 dc562c68e2..90d44b7a38 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 fef73aa365..5423aee3c1 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 6502258255..5042da7731 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 1788317304..8a0e7e686a 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 44753e64c9..6477e3ff9d 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 0000000000..3ebdff1638
--- /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 .
+
+\*---------------------------------------------------------------------------*/
+
+#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 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 0000000000..ad1cb71ba7
--- /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 .
+
+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 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 0000000000..6ad26c1f2e
--- /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 0000000000..ed74914f52
--- /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 0000000000..d3333fb16e
--- /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 0000000000..f7ef8ffeb2
--- /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 0000000000..d1c6a83b9c
--- /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 0000000000..dea3ed1d9d
--- /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 0000000000..f8f72530ac
--- /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 0000000000..b73c0d0967
--- /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 0000000000..75a8a2419c
--- /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 0000000000..469522ab3e
--- /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 0000000000..ce0539a68c
--- /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 0000000000..fdd77153a0
--- /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 0000000000..e06c9e1471
--- /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 0000000000..0aa182835f
--- /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 0000000000..e315d6ee72
--- /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 0000000000..c0d0baa30d
--- /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 0000000000..bc1d11db5c
--- /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 0000000000..9a134c96b1
--- /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 0000000000..c2962ef4fe
--- /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 0000000000..12a349e369
--- /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 0000000000..ef1206a09b
--- /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 0000000000..7fdcd8e68e
--- /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 0000000000..d88808501c
--- /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 0000000000..249d2fb152
--- /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 0000000000..15c18752cc
--- /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;
+ }
+ }
+);
+
+
+// ************************************************************************* //