diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index 855fb1fd6fa7fc5a8237d8c48f8b6122a5f2c1d3..8b184cfaf18ef86ac5484aab4c20ec44db0e586e 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -456,6 +456,7 @@ $(snGradSchemes)/orthogonalSnGrad/orthogonalSnGrads.C
 $(snGradSchemes)/quadraticFitSnGrad/quadraticFitSnGrads.C
 $(snGradSchemes)/linearFitSnGrad/linearFitSnGrads.C
 $(snGradSchemes)/skewCorrectedSnGrad/skewCorrectedSnGrads.C
+$(snGradSchemes)/relaxedSnGrad/relaxedSnGrads.C
 
 convectionSchemes = finiteVolume/convectionSchemes
 $(convectionSchemes)/convectionScheme/convectionSchemes.C
@@ -466,6 +467,7 @@ $(convectionSchemes)/boundedConvectionScheme/boundedConvectionSchemes.C
 laplacianSchemes = finiteVolume/laplacianSchemes
 $(laplacianSchemes)/laplacianScheme/laplacianSchemes.C
 $(laplacianSchemes)/gaussLaplacianScheme/gaussLaplacianSchemes.C
+$(laplacianSchemes)/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C
 
 finiteVolume/fvc/fvcFlux.C
 finiteVolume/fvc/fvcMeshPhi.C
diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.C b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.C
new file mode 100644
index 0000000000000000000000000000000000000000..d0732bf12414e737e983563f026fb960ac864b67
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.C
@@ -0,0 +1,276 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2019 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 "relaxedNonOrthoGaussLaplacianScheme.H"
+#include "surfaceInterpolate.H"
+#include "fvcDiv.H"
+#include "fvcGrad.H"
+#include "fvMatrices.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace fv
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template<class Type, class GType>
+tmp<fvMatrix<Type>>
+relaxedNonOrthoGaussLaplacianScheme<Type, GType>::fvmLaplacianUncorrected
+(
+    const surfaceScalarField& gammaMagSf,
+    const surfaceScalarField& deltaCoeffs,
+    const GeometricField<Type, fvPatchField, volMesh>& vf
+)
+{
+    tmp<fvMatrix<Type>> tfvm
+    (
+        new fvMatrix<Type>
+        (
+            vf,
+            deltaCoeffs.dimensions()*gammaMagSf.dimensions()*vf.dimensions()
+        )
+    );
+    fvMatrix<Type>& fvm = tfvm.ref();
+
+    fvm.upper() = deltaCoeffs.primitiveField()*gammaMagSf.primitiveField();
+    fvm.negSumDiag();
+
+    forAll(vf.boundaryField(), patchi)
+    {
+        const fvPatchField<Type>& pvf = vf.boundaryField()[patchi];
+        const fvsPatchScalarField& pGamma = gammaMagSf.boundaryField()[patchi];
+        const fvsPatchScalarField& pDeltaCoeffs =
+            deltaCoeffs.boundaryField()[patchi];
+
+        if (pvf.coupled())
+        {
+            fvm.internalCoeffs()[patchi] =
+                pGamma*pvf.gradientInternalCoeffs(pDeltaCoeffs);
+            fvm.boundaryCoeffs()[patchi] =
+               -pGamma*pvf.gradientBoundaryCoeffs(pDeltaCoeffs);
+        }
+        else
+        {
+            fvm.internalCoeffs()[patchi] = pGamma*pvf.gradientInternalCoeffs();
+            fvm.boundaryCoeffs()[patchi] = -pGamma*pvf.gradientBoundaryCoeffs();
+        }
+    }
+
+    return tfvm;
+}
+
+
+template<class Type, class GType>
+tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
+relaxedNonOrthoGaussLaplacianScheme<Type, GType>::gammaSnGradCorr
+(
+    const surfaceVectorField& SfGammaCorr,
+    const GeometricField<Type, fvPatchField, volMesh>& vf
+)
+{
+    const fvMesh& mesh = this->mesh();
+
+    tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> tgammaSnGradCorr
+    (
+        new GeometricField<Type, fvsPatchField, surfaceMesh>
+        (
+            IOobject
+            (
+                "gammaSnGradCorr("+vf.name()+')',
+                vf.instance(),
+                mesh,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            mesh,
+            SfGammaCorr.dimensions()
+           *vf.dimensions()*mesh.deltaCoeffs().dimensions()
+        )
+    );
+
+    for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
+    {
+        tgammaSnGradCorr.ref().replace
+        (
+            cmpt,
+            fvc::dotInterpolate(SfGammaCorr, fvc::grad(vf.component(cmpt)))
+        );
+    }
+
+    return tgammaSnGradCorr;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template<class Type, class GType>
+tmp<GeometricField<Type, fvPatchField, volMesh>>
+relaxedNonOrthoGaussLaplacianScheme<Type, GType>::fvcLaplacian
+(
+    const GeometricField<Type, fvPatchField, volMesh>& vf
+)
+{
+    const fvMesh& mesh = this->mesh();
+
+    tmp<GeometricField<Type, fvPatchField, volMesh>> tLaplacian
+    (
+        fvc::div(this->tsnGradScheme_().snGrad(vf)*mesh.magSf())
+    );
+
+    tLaplacian.ref().rename("laplacian(" + vf.name() + ')');
+
+    return tLaplacian;
+}
+
+
+template<class Type, class GType>
+tmp<fvMatrix<Type>>
+relaxedNonOrthoGaussLaplacianScheme<Type, GType>::fvmLaplacian
+(
+    const GeometricField<GType, fvsPatchField, surfaceMesh>& gamma,
+    const GeometricField<Type, fvPatchField, volMesh>& vf
+)
+{
+    const fvMesh& mesh = this->mesh();
+
+    typedef GeometricField<Type, fvsPatchField, surfaceMesh> SType;
+
+    const surfaceVectorField Sn(mesh.Sf()/mesh.magSf());
+
+    const surfaceVectorField SfGamma(mesh.Sf() & gamma);
+    const GeometricField<scalar, fvsPatchField, surfaceMesh> SfGammaSn
+    (
+        SfGamma & Sn
+    );
+    const surfaceVectorField SfGammaCorr(SfGamma - SfGammaSn*Sn);
+
+    tmp<fvMatrix<Type>> tfvm = fvmLaplacianUncorrected
+    (
+        SfGammaSn,
+        this->tsnGradScheme_().deltaCoeffs(vf),
+        vf
+    );
+    fvMatrix<Type>& fvm = tfvm.ref();
+
+    tmp<SType> tfaceFluxCorrection = gammaSnGradCorr(SfGammaCorr, vf);
+
+    if (this->tsnGradScheme_().corrected())
+    {
+        tfaceFluxCorrection.ref() +=
+            SfGammaSn*this->tsnGradScheme_().correction(vf);
+    }
+
+    const word corrName(tfaceFluxCorrection().name());
+
+    tmp<SType> trelaxedCorrection(new SType(tfaceFluxCorrection()));
+
+    const word oldName(corrName + "_0");
+    const scalar relax(vf.mesh().equationRelaxationFactor(oldName));
+
+    const objectRegistry& obr = vf.db();
+    if (obr.foundObject<SType>(oldName))
+    {
+        SType& oldCorrection = obr.lookupObjectRef<SType>(oldName);
+
+        trelaxedCorrection.ref() *= relax;
+        trelaxedCorrection.ref() += (1.0-relax)*oldCorrection;
+
+        oldCorrection = tfaceFluxCorrection;
+    }
+    else
+    {
+        SType* s = new SType(oldName, tfaceFluxCorrection);
+        s->store();
+    }
+
+    fvm.source() -=
+        mesh.V()
+       *fvc::div
+        (
+            trelaxedCorrection()
+        )().primitiveField();
+
+    if (mesh.fluxRequired(vf.name()))
+    {
+        fvm.faceFluxCorrectionPtr() = trelaxedCorrection.ptr();
+    }
+
+    return tfvm;
+}
+
+
+template<class Type, class GType>
+tmp<GeometricField<Type, fvPatchField, volMesh>>
+relaxedNonOrthoGaussLaplacianScheme<Type, GType>::fvcLaplacian
+(
+    const GeometricField<GType, fvsPatchField, surfaceMesh>& gamma,
+    const GeometricField<Type, fvPatchField, volMesh>& vf
+)
+{
+    const fvMesh& mesh = this->mesh();
+
+    const surfaceVectorField Sn(mesh.Sf()/mesh.magSf());
+    const surfaceVectorField SfGamma(mesh.Sf() & gamma);
+    const GeometricField<scalar, fvsPatchField, surfaceMesh> SfGammaSn
+    (
+        SfGamma & Sn
+    );
+    const surfaceVectorField SfGammaCorr(SfGamma - SfGammaSn*Sn);
+
+    tmp<GeometricField<Type, fvPatchField, volMesh>> tLaplacian
+    (
+        fvc::div
+        (
+            SfGammaSn*this->tsnGradScheme_().snGrad(vf)
+          + gammaSnGradCorr(SfGammaCorr, vf)
+        )
+    );
+
+    tLaplacian.ref().rename
+    (
+        "laplacian(" + gamma.name() + ',' + vf.name() + ')'
+    );
+
+    return tLaplacian;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.H b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.H
new file mode 100644
index 0000000000000000000000000000000000000000..ff4a7f6c67abcdeaea52f85e7936b22f6d75b87c
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.H
@@ -0,0 +1,210 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2019 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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::fv::relaxedNonOrthoGaussLaplacianScheme
+
+Description
+    Basic second-order laplacian using face-gradients and Gauss' theorem.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    laplacianSchemes
+    {
+        laplacian(<term>)    relaxedNonOrthoGauss <other options>;
+    }
+    \endverbatim
+
+    and by using \c system/fvSolution:
+    \verbatim
+    relaxationFactors
+    {
+        equations
+        {
+            <term>           <relaxation factor>;
+        }
+    }
+    \endverbatim
+
+SourceFiles
+    relaxedNonOrthoGaussLaplacianScheme.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef relaxedNonOrthoGaussLaplacianScheme_H
+#define relaxedNonOrthoGaussLaplacianScheme_H
+
+#include "laplacianScheme.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace fv
+{
+
+/*---------------------------------------------------------------------------*\
+             Class relaxedNonOrthoGaussLaplacianScheme Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Type, class GType>
+class relaxedNonOrthoGaussLaplacianScheme
+:
+    public fv::laplacianScheme<Type, GType>
+{
+    // Private Member Functions
+
+        tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> gammaSnGradCorr
+        (
+            const surfaceVectorField& SfGammaCorr,
+            const GeometricField<Type, fvPatchField, volMesh>&
+        );
+
+        //- No copy construct
+        relaxedNonOrthoGaussLaplacianScheme
+        (
+            const relaxedNonOrthoGaussLaplacianScheme&
+        ) = delete;
+
+        //- No copy assignment
+        void operator=(const relaxedNonOrthoGaussLaplacianScheme&) = delete;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("relaxedNonOrthoGauss");
+
+
+    // Constructors
+
+        //- Construct null
+        relaxedNonOrthoGaussLaplacianScheme(const fvMesh& mesh)
+        :
+            laplacianScheme<Type, GType>(mesh)
+        {}
+
+        //- Construct from Istream
+        relaxedNonOrthoGaussLaplacianScheme(const fvMesh& mesh, Istream& is)
+        :
+            laplacianScheme<Type, GType>(mesh, is)
+        {}
+
+        //- Construct from mesh, interpolation and snGradScheme schemes
+        relaxedNonOrthoGaussLaplacianScheme
+        (
+            const fvMesh& mesh,
+            const tmp<surfaceInterpolationScheme<GType>>& igs,
+            const tmp<snGradScheme<Type>>& sngs
+        )
+        :
+            laplacianScheme<Type, GType>(mesh, igs, sngs)
+        {}
+
+
+    //- Destructor
+    virtual ~relaxedNonOrthoGaussLaplacianScheme() = default;
+
+
+    // Member Functions
+
+        static tmp<fvMatrix<Type>> fvmLaplacianUncorrected
+        (
+            const surfaceScalarField& gammaMagSf,
+            const surfaceScalarField& deltaCoeffs,
+            const GeometricField<Type, fvPatchField, volMesh>&
+        );
+
+        tmp<GeometricField<Type, fvPatchField, volMesh>> fvcLaplacian
+        (
+            const GeometricField<Type, fvPatchField, volMesh>&
+        );
+
+        tmp<fvMatrix<Type>> fvmLaplacian
+        (
+            const GeometricField<GType, fvsPatchField, surfaceMesh>&,
+            const GeometricField<Type, fvPatchField, volMesh>&
+        );
+
+        tmp<GeometricField<Type, fvPatchField, volMesh>> fvcLaplacian
+        (
+            const GeometricField<GType, fvsPatchField, surfaceMesh>&,
+            const GeometricField<Type, fvPatchField, volMesh>&
+        );
+};
+
+
+// Use macros to emulate partial-specialisation of the Laplacian functions
+// for scalar diffusivity gamma
+
+#define defineFvmLaplacianScalarGamma(Type)                                    \
+                                                                               \
+template<>                                                                     \
+tmp<fvMatrix<Type>>                                                            \
+relaxedNonOrthoGaussLaplacianScheme<Type, scalar>::fvmLaplacian                \
+(                                                                              \
+    const GeometricField<scalar, fvsPatchField, surfaceMesh>&,                 \
+    const GeometricField<Type, fvPatchField, volMesh>&                         \
+);                                                                             \
+                                                                               \
+template<>                                                                     \
+tmp<GeometricField<Type, fvPatchField, volMesh>>                               \
+relaxedNonOrthoGaussLaplacianScheme<Type, scalar>::fvcLaplacian                \
+(                                                                              \
+    const GeometricField<scalar, fvsPatchField, surfaceMesh>&,                 \
+    const GeometricField<Type, fvPatchField, volMesh>&                         \
+);
+
+
+defineFvmLaplacianScalarGamma(scalar);
+defineFvmLaplacianScalarGamma(vector);
+defineFvmLaplacianScalarGamma(sphericalTensor);
+defineFvmLaplacianScalarGamma(symmTensor);
+defineFvmLaplacianScalarGamma(tensor);
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+    #include "relaxedNonOrthoGaussLaplacianScheme.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C
new file mode 100644
index 0000000000000000000000000000000000000000..7aa0027ec98c39be9dd6a7e249fda1636e5644ec
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C
@@ -0,0 +1,140 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2019 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 "relaxedNonOrthoGaussLaplacianScheme.H"
+#include "fvMesh.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makeFvLaplacianScheme(relaxedNonOrthoGaussLaplacianScheme)
+
+#define declareFvmLaplacianScalarGamma(Type)                                   \
+                                                                               \
+template<>                                                                     \
+Foam::tmp<Foam::fvMatrix<Foam::Type>>                                          \
+Foam::fv::relaxedNonOrthoGaussLaplacianScheme<Foam::Type, Foam::scalar>::      \
+fvmLaplacian                                                                   \
+(                                                                              \
+    const GeometricField<scalar, fvsPatchField, surfaceMesh>& gamma,           \
+    const GeometricField<Type, fvPatchField, volMesh>& vf                      \
+)                                                                              \
+{                                                                              \
+    const fvMesh& mesh = this->mesh();                                         \
+                                                                               \
+    typedef GeometricField<Type, fvsPatchField, surfaceMesh> SType;            \
+                                                                               \
+    GeometricField<scalar, fvsPatchField, surfaceMesh> gammaMagSf              \
+    (                                                                          \
+        gamma*mesh.magSf()                                                     \
+    );                                                                         \
+                                                                               \
+    tmp<fvMatrix<Type>> tfvm = fvmLaplacianUncorrected                         \
+    (                                                                          \
+        gammaMagSf,                                                            \
+        this->tsnGradScheme_().deltaCoeffs(vf),                                \
+        vf                                                                     \
+    );                                                                         \
+    fvMatrix<Type>& fvm = tfvm.ref();                                          \
+                                                                               \
+    if (this->tsnGradScheme_().corrected())                                    \
+    {                                                                          \
+        tmp<SType> tCorr(this->tsnGradScheme_().correction(vf));               \
+        const word corrName(tCorr().name());                                   \
+        tmp<SType> tfaceFluxCorrection(gammaMagSf*tCorr);                      \
+                                                                               \
+        tmp<SType> trelaxedCorrection(new SType(tfaceFluxCorrection()));       \
+                                                                               \
+        const word oldName(corrName + "_0");                                   \
+        const scalar relax(vf.mesh().equationRelaxationFactor(corrName));      \
+        const objectRegistry& obr = vf.db();                                   \
+        if (obr.foundObject<SType>(oldName))                                   \
+        {                                                                      \
+            SType& oldCorrection = obr.lookupObjectRef<SType>(oldName);        \
+            trelaxedCorrection.ref() *= relax;                                 \
+            trelaxedCorrection.ref() += (1.0-relax)*oldCorrection;             \
+                                                                               \
+            oldCorrection = trelaxedCorrection();                              \
+        }                                                                      \
+        else                                                                   \
+        {                                                                      \
+            SType* s = new SType(oldName, tfaceFluxCorrection);                \
+            s->store();                                                        \
+        }                                                                      \
+                                                                               \
+        tmp<Field<Type>> tcorr                                                 \
+        (                                                                      \
+            mesh.V()                                                           \
+           *fvc::div                                                           \
+            (                                                                  \
+                trelaxedCorrection()                                           \
+            )().primitiveField()                                               \
+        );                                                                     \
+                                                                               \
+        fvm.source() -= tcorr();                                               \
+                                                                               \
+        if (mesh.fluxRequired(vf.name()))                                      \
+        {                                                                      \
+            fvm.faceFluxCorrectionPtr() = trelaxedCorrection.ptr();            \
+        }                                                                      \
+    }                                                                          \
+                                                                               \
+    return tfvm;                                                               \
+}                                                                              \
+                                                                               \
+                                                                               \
+template<>                                                                     \
+Foam::tmp<Foam::GeometricField<Foam::Type, Foam::fvPatchField, Foam::volMesh>> \
+Foam::fv::relaxedNonOrthoGaussLaplacianScheme<Foam::Type, Foam::scalar>::fvcLaplacian         \
+(                                                                              \
+    const GeometricField<scalar, fvsPatchField, surfaceMesh>& gamma,           \
+    const GeometricField<Type, fvPatchField, volMesh>& vf                      \
+)                                                                              \
+{                                                                              \
+    const fvMesh& mesh = this->mesh();                                         \
+                                                                               \
+    tmp<GeometricField<Type, fvPatchField, volMesh>> tLaplacian                \
+    (                                                                          \
+        fvc::div(gamma*this->tsnGradScheme_().snGrad(vf)*mesh.magSf())         \
+    );                                                                         \
+                                                                               \
+    tLaplacian.ref().rename                                                    \
+    (                                                                          \
+        "laplacian(" + gamma.name() + ',' + vf.name() + ')'                    \
+    );                                                                         \
+                                                                               \
+    return tLaplacian;                                                         \
+}
+
+
+declareFvmLaplacianScalarGamma(scalar);
+declareFvmLaplacianScalarGamma(vector);
+declareFvmLaplacianScalarGamma(sphericalTensor);
+declareFvmLaplacianScalarGamma(symmTensor);
+declareFvmLaplacianScalarGamma(tensor);
+
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/CentredFitSnGrad/CentredFitSnGradScheme.H b/src/finiteVolume/finiteVolume/snGradSchemes/CentredFitSnGrad/CentredFitSnGradScheme.H
index 81b7cdf0efec4da3e13539f9fd44b08b440b5091..7a7a80366c326535868a7f0ed2836349e52187b6 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/CentredFitSnGrad/CentredFitSnGradScheme.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/CentredFitSnGrad/CentredFitSnGradScheme.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2013-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -109,7 +110,7 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return true;
         }
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C
index 174d11bbb9496c9c75b24b9902924c084b3bb1fa..ab5d7f406334c07ff0be26eed131193a5a1e1400 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -32,13 +33,6 @@ License
 #include "fvcGrad.H"
 #include "gaussGrad.H"
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<class Type>
-Foam::fv::correctedSnGrad<Type>::~correctedSnGrad()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
@@ -96,7 +90,7 @@ Foam::fv::correctedSnGrad<Type>::correction
     GeometricField<Type, fvsPatchField, surfaceMesh>& ssf = tssf.ref();
     ssf.setOriented();
 
-    for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
+    for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; ++cmpt)
     {
         ssf.replace
         (
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.H
index 8f0b7c3abeaab2879104c66101a5d9b65b4326ab..4533778dc8de53cb2dc6f607859893a879d8c481 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/correctedSnGrad/correctedSnGrad.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,7 +31,16 @@ Group
     grpFvSnGradSchemes
 
 Description
-    Simple central-difference snGrad scheme with non-orthogonal correction.
+    Surface gradient scheme with full explicit non-orthogonal correction.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    snGradSchemes
+    {
+        snGrad(<term>)       corrected;
+    }
+    \endverbatim
 
 SourceFiles
     correctedSnGrad.C
@@ -53,7 +63,7 @@ namespace fv
 {
 
 /*---------------------------------------------------------------------------*\
-                 Class correctedSnGrad Declaration
+                        Class correctedSnGrad Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -81,7 +91,6 @@ public:
             snGradScheme<Type>(mesh)
         {}
 
-
         //- Construct from mesh and data stream
         correctedSnGrad(const fvMesh& mesh, Istream&)
         :
@@ -90,7 +99,7 @@ public:
 
 
     //- Destructor
-    virtual ~correctedSnGrad();
+    virtual ~correctedSnGrad() = default;
 
 
     // Member Functions
@@ -105,13 +114,13 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return true;
         }
 
         //- Return the explicit correction to the correctedSnGrad
-        //  for the given field using the gradient of the field
+        //- for the given field using the gradient of the field
         tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         fullGradCorrection
         (
@@ -119,7 +128,7 @@ public:
         ) const;
 
         //- Return the explicit correction to the correctedSnGrad
-        //  for the given field using the gradients of the field components
+        //- for the given field using the gradients of the field components
         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         correction(const GeometricField<Type, fvPatchField, volMesh>&) const;
 };
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.C
index 913af1e61bfd25bad4a9f0c53dcdfac094dc443e..46982ebda83ab17a9000c7342188b8e02249de90 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -29,13 +30,6 @@ License
 #include "volPointInterpolation.H"
 #include "triangle.H"
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<class Type>
-Foam::fv::faceCorrectedSnGrad<Type>::~faceCorrectedSnGrad()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
@@ -89,18 +83,18 @@ Foam::fv::faceCorrectedSnGrad<Type>::fullGradCorrection
 
         const face& fi = faces[facei];
 
-        vector nf(Sf[facei]/magSf[facei]);
+        const vector nf(Sf[facei]/magSf[facei]);
 
-        for (label pi=0; pi<fi.size(); pi++)
+        for (label pi = 0; pi < fi.size(); ++pi)
         {
             // Next point index
-            label pj = (pi+1)%fi.size();
+            const label pj = fi.fcIndex(pi);
 
             // Edge normal in plane of face
-            vector edgen(nf^(points[fi[pj]] - points[fi[pi]]));
+            const vector edgen(nf^(points[fi[pj]] - points[fi[pi]]));
 
             // Edge centre field value
-            Type pvfe(0.5*(pvf[fi[pj]] + pvf[fi[pi]]));
+            const Type pvfe(0.5*(pvf[fi[pj]] + pvf[fi[pi]]));
 
             // Integrate face gradient
             fgrad += edgen*pvfe;
@@ -113,8 +107,6 @@ Foam::fv::faceCorrectedSnGrad<Type>::fullGradCorrection
         vector dCorr(C[neighbour[facei]] - C[owner[facei]]);
         dCorr /= (nf & dCorr);
 
-        // if (mag(dCorr) > 2) dCorr *= 2/mag(dCorr);
-
         sfCorr[facei] = dCorr&fgrad;
     }
 
@@ -152,7 +144,7 @@ Foam::fv::faceCorrectedSnGrad<Type>::correction
     );
     GeometricField<Type, fvsPatchField, surfaceMesh>& ssf = tssf.ref();
 
-    for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
+    for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; ++cmpt)
     {
         ssf.replace
         (
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.H
index 13bb2774646526e03dc7df0da2f34ba2a3aa0f6d..f4540ba0c0f2cbdf894bc3828b57a858ec66d3aa 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/faceCorrectedSnGrad/faceCorrectedSnGrad.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,7 +31,16 @@ Group
     grpFvSnGradSchemes
 
 Description
-    Simple central-difference snGrad scheme with non-orthogonal correction.
+    Surface gradient scheme with full explicit non-orthogonal correction.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    snGradSchemes
+    {
+        snGrad(<term>)       faceCorrected;
+    }
+    \endverbatim
 
 SourceFiles
     faceCorrectedSnGrad.C
@@ -53,7 +63,7 @@ namespace fv
 {
 
 /*---------------------------------------------------------------------------*\
-                 Class faceCorrectedSnGrad Declaration
+                      Class faceCorrectedSnGrad Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -81,7 +91,6 @@ public:
             snGradScheme<Type>(mesh)
         {}
 
-
         //- Construct from mesh and data stream
         faceCorrectedSnGrad(const fvMesh& mesh, Istream&)
         :
@@ -90,7 +99,7 @@ public:
 
 
     //- Destructor
-    virtual ~faceCorrectedSnGrad();
+    virtual ~faceCorrectedSnGrad() = default;
 
 
     // Member Functions
@@ -105,13 +114,13 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return true;
         }
 
         //- Return the explicit correction to the faceCorrectedSnGrad
-        //  for the given field using the gradient of the field
+        //- for the given field using the gradient of the field
         tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         fullGradCorrection
         (
@@ -119,7 +128,7 @@ public:
         ) const;
 
         //- Return the explicit correction to the faceCorrectedSnGrad
-        //  for the given field using the gradients of the field components
+        //- for the given field using the gradients of the field components
         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         correction(const GeometricField<Type, fvPatchField, volMesh>&) const;
 };
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C
index babc458a20b0d8c0fd1ba7cb4f6aec34b644c1d6..6f0f95ee35047cb51aff0de8332d4ae629863b0c 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -42,13 +43,6 @@ namespace Foam
 namespace fv
 {
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<class Type>
-limitedSnGrad<Type>::~limitedSnGrad()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H
index b14abfa5cfaecb5980b3b23242603c09ca80f49a..1922fe14d8efb51bf2ac1ab54a2e31a5136e6c91 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrad.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,20 +31,26 @@ Group
     grpFvSnGradSchemes
 
 Description
-    Run-time selected snGrad scheme with limited non-orthogonal correction.
+    Surface gradient scheme with limited explicit non-orthogonal correction.
 
     The limiter is controlled by a coefficient with a value between 0 and 1
     which when 0 switches the correction off and the scheme behaves as
-    uncorrectedSnGrad, when set to 1 the full correction of the selected scheme
-    is used and when set to 0.5 the limiter is calculated such that the
-    non-orthogonal contribution does not exceed the orthogonal part.
-
-    Format:
-        limited \<corrected scheme\> \<coefficient\>;
-
-        or
-
-        limited \<coefficient\>;  // Backward compatibility
+    \c uncorrected \c snGrad, when set to 1 the full correction of the
+    selected scheme is used and the scheme behaves as \c corrected \c snGrad,
+    and when set to 0.5 the limiter is calculated such that the non-orthogonal
+    component does not exceed the orthogonal component.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    snGradSchemes
+    {
+        snGrad(<term>)       limited <corrected scheme> <coefficient>;
+
+        // Backward compatibility
+        snGrad(<term>)       limited <coefficient>;
+    }
+    \endverbatim
 
 SourceFiles
     limitedSnGrad.C
@@ -66,7 +73,7 @@ namespace fv
 {
 
 /*---------------------------------------------------------------------------*\
-                 Class limitedSnGrad Declaration
+                        Class limitedSnGrad Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -74,10 +81,12 @@ class limitedSnGrad
 :
     public snGradScheme<Type>
 {
-    // Private data
+    // Private Data
 
+        //- Type of correction scheme
         tmp<snGradScheme<Type>> correctedScheme_;
 
+        //- Limiter coefficient
         scalar limitCoeff_;
 
 
@@ -87,7 +96,7 @@ class limitedSnGrad
         void operator=(const limitedSnGrad&) = delete;
 
         //- Lookup function for the corrected to support backward compatibility
-        //  of dictionary specification
+        //- of dictionary specification
         tmp<snGradScheme<Type>> lookupCorrectedScheme(Istream& schemeData)
         {
             token nextToken(schemeData);
@@ -131,7 +140,6 @@ public:
             limitCoeff_(1)
         {}
 
-
         //- Construct from mesh and data stream
         limitedSnGrad(const fvMesh& mesh, Istream& schemeData)
         :
@@ -149,7 +157,7 @@ public:
 
 
     //- Destructor
-    virtual ~limitedSnGrad();
+    virtual ~limitedSnGrad() = default;
 
 
     // Member Functions
@@ -164,13 +172,13 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return true;
         }
 
         //- Return the explicit correction to the limitedSnGrad
-        //  for the given field
+        //- for the given field
         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         correction(const GeometricField<Type, fvPatchField, volMesh>&) const;
 };
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrads.C b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrads.C
index ef02a344a545a6c1f1f8d4d6f96a72c9596a65eb..5a385681bff583a03fb1b3a9ec86bfc07e047251 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrads.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/limitedSnGrad/limitedSnGrads.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2015 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -23,13 +24,6 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    Central-difference snGrad scheme with limited non-orthogonal correction.
-    The limiter is controlled by a coefficient with a value between 0 and 1
-    which when zero switches the limiter off and the scheme behaves as
-    correctedSnGrad, and when set to 1 the limiter is calculated such that the
-    non-orthogonal contribution does not exceed the orthogonal part.
-
 \*---------------------------------------------------------------------------*/
 
 #include "limitedSnGrad.H"
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.C
index 1ea8894bbfb6bbd1fff601188738bb8369f61a2c..64380af3adde7f89228d1650b2a4857f49bdb911 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -23,9 +24,6 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    Simple central-difference snGrad scheme without non-orthogonal correction.
-
 \*---------------------------------------------------------------------------*/
 
 #include "orthogonalSnGrad.H"
@@ -42,13 +40,6 @@ namespace Foam
 namespace fv
 {
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<class Type>
-orthogonalSnGrad<Type>::~orthogonalSnGrad()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H
index 747870a911d376a28c07625b56025cf86f086a68..c242628b84323e32b803c0b28ef8e286d3a084a8 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,8 +31,21 @@ Group
     grpFvSnGradSchemes
 
 Description
-    Simple central-difference snGrad scheme using the cell-centre to cell-centre
-    delta-coefficients.
+    Surface gradient scheme with no non-orthogonal correction.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    snGradSchemes
+    {
+        snGrad(<term>)       orthogonal;
+    }
+    \endverbatim
+
+Note
+  - Interpolation weighting factors (i.e. delta coefficients) are based
+    on the \c deltaCoeffs function rather than the \c nonOrthDeltaCoeffs
+    function, which is used by the \c uncorrected scheme.
 
 SourceFiles
     orthogonalSnGrad.C
@@ -54,7 +68,7 @@ namespace fv
 {
 
 /*---------------------------------------------------------------------------*\
-                 Class orthogonalSnGrad Declaration
+                        Class orthogonalSnGrad Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -82,7 +96,6 @@ public:
             snGradScheme<Type>(mesh)
         {}
 
-
         //- Construct from mesh and data stream
         orthogonalSnGrad(const fvMesh& mesh, Istream&)
         :
@@ -91,7 +104,7 @@ public:
 
 
     //- Destructor
-    virtual ~orthogonalSnGrad();
+    virtual ~orthogonalSnGrad() = default;
 
 
     // Member Functions
@@ -106,13 +119,13 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return false;
         }
 
         //- Return the explicit correction to the orthogonalSnGrad
-        //  for the given field
+        //- for the given field
         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         correction(const GeometricField<Type, fvPatchField, volMesh>&) const;
 };
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrads.C b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrads.C
index b52a70ca6b6aa737f77fbf4e99acf4f122f6f07d..9f350c0bf21c3d1bbc3f15603163fce649f814fe 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrads.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrads.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2015 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -23,9 +24,6 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    Simple central-difference snGrad scheme without non-orthogonal correction.
-
 \*---------------------------------------------------------------------------*/
 
 #include "orthogonalSnGrad.H"
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrad.C
new file mode 100644
index 0000000000000000000000000000000000000000..0b018126770a811d634eab17d209b5e9491627e5
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrad.C
@@ -0,0 +1,78 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 "fv.H"
+#include "relaxedSnGrad.H"
+#include "volFields.H"
+#include "surfaceFields.H"
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::tmp<Foam::GeometricField<Type, Foam::fvsPatchField, Foam::surfaceMesh>>
+Foam::fv::relaxedSnGrad<Type>::correction
+(
+    const GeometricField<Type, fvPatchField, volMesh>& vf
+) const
+{
+    typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfFieldType;
+
+    // Calculate explicit correction field
+    tmp<SurfFieldType> tcorrection = correctedScheme_().correction(vf);
+
+    // Retrieve relaxation factor value
+    const word fieldName(vf.name());
+    const word oldFieldName(fieldName + "_0");
+    const scalar relax =
+        vf.mesh().fieldRelaxationFactor("snGrad("+fieldName+")");
+
+    // Return explicit correction field if
+    // previous-time step correction is unavailable
+    const objectRegistry& obr = vf.db();
+    if (!obr.foundObject<SurfFieldType>(oldFieldName))
+    {
+        SurfFieldType* oldCorrection =
+            new SurfFieldType(oldFieldName, tcorrection());
+        oldCorrection->store();
+    }
+
+    // Return under/over-relaxed explicit correction field
+    tmp<SurfFieldType> trelaxedCorrection(new SurfFieldType(tcorrection()));
+
+    SurfFieldType& oldCorrection =
+        obr.lookupObjectRef<SurfFieldType>(oldFieldName);
+
+    trelaxedCorrection.ref() *= relax;
+    trelaxedCorrection.ref() += (scalar(1) - relax)*oldCorrection;
+
+    oldCorrection = tcorrection;
+
+    return trelaxedCorrection;
+}
+
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrad.H
new file mode 100644
index 0000000000000000000000000000000000000000..f01afd528e81ff9424240852bea73fe3b13ee7b1
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrad.H
@@ -0,0 +1,166 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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::fv::relaxedSnGrad
+
+Group
+    grpFvSnGradSchemes
+
+Description
+    Surface gradient scheme with under-/over-relaxed
+    full or limited explicit non-orthogonal correction.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    snGradSchemes
+    {
+        snGrad(<term>)       relaxed;
+    }
+    \endverbatim
+
+    and by using \c system/fvSolution:
+    \verbatim
+    relaxationFactors
+    {
+        fields
+        {
+            snGrad(<term>)   <relaxation factor>;
+        }
+    }
+    \endverbatim
+
+
+SourceFiles
+    relaxedSnGrad.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef relaxedSnGrad_H
+#define relaxedSnGrad_H
+
+#include "correctedSnGrad.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace fv
+{
+
+/*---------------------------------------------------------------------------*\
+                        Class relaxedSnGrad Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Type>
+class relaxedSnGrad
+:
+    public snGradScheme<Type>
+{
+    // Private Data
+
+        //- Type of correction scheme
+        tmp<snGradScheme<Type>> correctedScheme_;
+
+
+    // Private Member Functions
+
+        //- No copy assignment
+        void operator=(const relaxedSnGrad&) = delete;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("relaxed");
+
+
+    // Constructors
+
+        //- Construct from mesh
+        relaxedSnGrad(const fvMesh& mesh)
+        :
+            snGradScheme<Type>(mesh),
+            correctedScheme_(new correctedSnGrad<Type>(this->mesh()))
+        {}
+
+        //- Construct from mesh and data stream
+        relaxedSnGrad(const fvMesh& mesh, Istream& schemeData)
+        :
+            snGradScheme<Type>(mesh),
+            correctedScheme_(new correctedSnGrad<Type>(this->mesh()))
+        {}
+
+
+    //- Destructor
+    virtual ~relaxedSnGrad() = default;
+
+
+    // Member Functions
+
+        //- Return the interpolation weighting factors for the given field
+        virtual tmp<surfaceScalarField> deltaCoeffs
+        (
+            const GeometricField<Type, fvPatchField, volMesh>&
+        ) const
+        {
+            return this->mesh().nonOrthDeltaCoeffs();
+        }
+
+        //- Return true if this scheme uses an explicit correction
+        virtual bool corrected() const noexcept
+        {
+            return true;
+        }
+
+        //- Return the explicit correction to the relaxedSnGrad
+        //- for the given field using the gradients of the field components
+        virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
+        correction(const GeometricField<Type, fvPatchField, volMesh>&) const;
+};
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+    #include "relaxedSnGrad.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrads.C b/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrads.C
new file mode 100644
index 0000000000000000000000000000000000000000..d863791dc5c6430f14376aafec7b9ba426793160
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/relaxedSnGrad/relaxedSnGrads.C
@@ -0,0 +1,35 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 "relaxedSnGrad.H"
+#include "fvMesh.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makeSnGradScheme(relaxedSnGrad)
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.C
index 7138197f6940f58028e8363d14e24951b61350ba..5faffa76f5db6248e4ec046905dc205ada92aa57 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2019 Zeljko Tukovic, FSB Zagreb.
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -72,8 +73,6 @@ Foam::fv::skewCorrectedSnGrad<Type>::fullGradCorrection
     const vectorField& Sf = mesh.Sf().internalField();
     const scalarField& magSf = mesh.magSf().internalField();
 
-    vectorField nf(Sf/magSf);
-
     const vectorField& Cf = mesh.Cf().internalField();
     const vectorField& C = mesh.C().internalField();
 
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.H
index 1ab2e696a9de2015b896eca46f8b65263f208763..5e2919c25056b3ccc3559d65dbf5dd4e85514413 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/skewCorrectedSnGrad/skewCorrectedSnGrad.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2019 Zeljko Tukovic, FSB Zagreb.
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,7 +31,17 @@ Group
     grpFvSnGradSchemes
 
 Description
-    Simple central-difference snGrad scheme with non-orthogonal correction.
+    Surface gradient scheme with skewness and full
+    explicit non-orthogonal corrections.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    snGradSchemes
+    {
+        snGrad(<term>)       skewCorrected;
+    }
+    \endverbatim
 
 SourceFiles
     skewCorrectedSnGrad.C
@@ -81,7 +92,6 @@ public:
             snGradScheme<Type>(mesh)
         {}
 
-
         //- Construct from mesh and data stream
         skewCorrectedSnGrad(const fvMesh& mesh, Istream&)
         :
@@ -105,7 +115,7 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return true;
         }
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.C b/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.C
index 0dc584dcfb1ba357e0f9c4f1fc2bc2cbdfdb5989..e507d053c88c56bab7045da169f3183a9ee07e67 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.C
@@ -60,8 +60,8 @@ tmp<snGradScheme<Type>> snGradScheme<Type>::New
     {
         FatalIOErrorInFunction(schemeData)
             << "Discretisation scheme not specified"
-            << endl << endl
-            << "Valid schemes are :" << endl
+            << nl << nl
+            << "Valid schemes are :" << nl
             << MeshConstructorTablePtr_->sortedToc()
             << exit(FatalIOError);
     }
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.H b/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.H
index 324fd03a6998f92a0306002c73c05e924d9aeb14..d19a63bf3fe0d63460e3ab3a2ef36c9aa84e974a 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradScheme.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,7 +31,17 @@ Group
     grpFvSnGradSchemes
 
 Description
-    Abstract base class for snGrad schemes.
+    Abstract base class for runtime selected \c snGrad surface
+    normal gradient schemes.
+
+    A surface normal gradient is evaluated at a cell face. It
+    is the normal-to-face component of the gradient of
+    values at the centres of two cells that the face connects.
+
+    Unit-surface-normal vector decomposition is based on the
+    so-called over-relaxed approach. Orthogonal components are
+    treated implicitly and non-orthogonal components are treated
+    explicitly with (or without) various limiters.
 
 SourceFiles
     snGradScheme.C
@@ -59,7 +70,7 @@ namespace fv
 {
 
 /*---------------------------------------------------------------------------*\
-                 Class snGradScheme Declaration
+                        Class snGradScheme Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -67,9 +78,9 @@ class snGradScheme
 :
     public refCount
 {
-    // Private data
+    // Private Data
 
-        //- Hold reference to mesh
+        //- Hold const reference to mesh
         const fvMesh& mesh_;
 
 
@@ -125,14 +136,14 @@ public:
 
     // Member Functions
 
-        //- Return mesh reference
+        //- Return const reference to mesh
         const fvMesh& mesh() const
         {
             return mesh_;
         }
 
-
-        //- Return the snGrad of the given cell field with the given deltaCoeffs
+        //- Return the snGrad of the given cell field
+        //- by using the given deltaCoeffs
         static tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         snGrad
         (
@@ -156,13 +167,13 @@ public:
         ) const = 0;
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return false;
         }
 
         //- Return the explicit correction to the snGrad
-        //  for the given field
+        //- for the given field
         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         correction(const GeometricField<Type, fvPatchField, volMesh>&) const
         {
@@ -173,12 +184,12 @@ public:
         }
 
         //- Return the snGrad of the given cell field
-        //  with explicit correction
+        //- with explicit correction
         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         snGrad(const GeometricField<Type, fvPatchField, volMesh>&) const;
 
         //- Return the snGrad of the given tmp cell field
-        //  with explicit correction
+        //- with explicit correction
         tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         snGrad
         (
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradSchemes.C b/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradSchemes.C
index 1f5c316d22a00b5728f5e7196d6c2866d3ae629f..d03fe44c7af357ceecaf648d77cfd253e67b7ce2 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradSchemes.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/snGradScheme/snGradSchemes.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -23,9 +24,6 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    Abstract base class for snGrad schemes.
-
 \*---------------------------------------------------------------------------*/
 
 #include "snGradScheme.H"
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.C b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.C
index e8af0a09fe14b45c72186ce3eb8bfe3ebe04039c..793e16a563dc757af067f007162bac859e4a8865 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -23,9 +24,6 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    Simple central-difference snGrad scheme without non-orthogonal correction.
-
 \*---------------------------------------------------------------------------*/
 
 #include "uncorrectedSnGrad.H"
@@ -42,13 +40,6 @@ namespace Foam
 namespace fv
 {
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<class Type>
-uncorrectedSnGrad<Type>::~uncorrectedSnGrad()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H
index 72d9c8748154bbc9542541dd66abbe06fda101b4..afdd1d8b9448c660a815932d1ca89ff2f9c76430 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,8 +31,21 @@ Group
     grpFvSnGradSchemes
 
 Description
-    Simple central-difference snGrad scheme using the non-orthogonal mesh
-    delta-coefficients but without non-orthogonal correction.
+    Surface gradient scheme with no non-orthogonal correction.
+
+Usage
+    Minimal example by using \c system/fvSchemes:
+    \verbatim
+    snGradSchemes
+    {
+        snGrad(<term>)       uncorrected;
+    }
+    \endverbatim
+
+Note
+  - Interpolation weighting factors (i.e. delta coefficients) are based
+    on the \c nonOrthDeltaCoeffs function rather than the \c deltaCoeffs
+    function, which is used by the \c orthogonal scheme.
 
 SourceFiles
     uncorrectedSnGrad.C
@@ -54,7 +68,7 @@ namespace fv
 {
 
 /*---------------------------------------------------------------------------*\
-                 Class uncorrectedSnGrad Declaration
+                      Class uncorrectedSnGrad Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -82,7 +96,6 @@ public:
             snGradScheme<Type>(mesh)
         {}
 
-
         //- Construct from mesh and data stream
         uncorrectedSnGrad(const fvMesh& mesh, Istream&)
         :
@@ -91,7 +104,7 @@ public:
 
 
     //- Destructor
-    virtual ~uncorrectedSnGrad();
+    virtual ~uncorrectedSnGrad() = default;
 
 
     // Member Functions
@@ -106,13 +119,13 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
+        virtual bool corrected() const noexcept
         {
             return false;
         }
 
         //- Return the explicit correction to the uncorrectedSnGrad
-        //  for the given field
+        //- for the given field
         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>>
         correction(const GeometricField<Type, fvPatchField, volMesh>&) const;
 };
diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrads.C b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrads.C
index c8fc0c122f818aa03a8d81898d3fd2fb283c1cbf..284a991eac612d738d762bd8410e076e74aa82e4 100644
--- a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrads.C
+++ b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrads.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2015 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -23,9 +24,6 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    Simple central-difference snGrad scheme without non-orthogonal correction.
-
 \*---------------------------------------------------------------------------*/
 
 #include "uncorrectedSnGrad.H"
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/Allclean b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..e570da4052cc732e47b23b1939d255cd7b8f4011
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/Allclean
@@ -0,0 +1,14 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions      # Tutorial clean functions
+#------------------------------------------------------------------------------
+
+cleanCase0
+
+rm -rf 0.orig
+rm -rf system
+rm -rf constant
+rm -rf results
+rm -rf plots
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/Allrun b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..51d093ba4a56263d76474f37c04285e8da43b862
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/Allrun
@@ -0,0 +1,143 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
+. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions      # Tutorial clean functions
+#------------------------------------------------------------------------------
+
+# settings
+
+    # operand setups
+    setups="
+    0
+    10
+    20
+    30
+    40
+    50
+    60
+    70
+    80
+    85
+    "
+
+    # flag to enable computations in parallel mode
+    parallel=true
+
+
+#------------------------------------------------------------------------------
+
+#######################################
+# Collect results into a given path
+# and clean the case for the next run
+# Arguments:
+#    $1 = Path to move results
+# Outputs:
+#    Writes info to stdout
+#######################################
+collect() {
+
+    [ $# -eq 0 ] && { echo "Usage: $0 dir-model"; exit 1; }
+
+    collection="$1"
+
+    dirResult=results/"$collection"
+    dirSettings="$dirResult"/system
+
+    if [ ! -d "$dirResult" ]
+    then
+
+        echo "      # Collecting results and settings into $dirResult"
+
+        mkdir -p "$dirSettings"
+
+        mv -f $(foamListTimes) "$dirResult"
+        [ -d postProcessing ] && mv -f postProcessing "$dirResult"
+        [ -d processor0 ] && mv -f processor* "$dirResult"
+        mv -f log.* "$dirResult"
+        mv -f logs "$dirResult"
+        mv -f constant "$dirResult"/
+        cp -f system/fv* system/controlDict "$dirSettings"
+        mv -f 0/ "$dirSettings"
+
+        echo "      # Cleaning up the case"
+
+        cleanTimeDirectories
+        cleanPostProcessing
+
+    else
+
+        echo "      # Directory $dirResult already exists"
+        echo "      # Skipping the computation"
+
+    fi
+
+}
+
+
+#------------------------------------------------------------------------------
+
+for setup in $setups
+do
+
+    echo ""
+    echo "# Computations for the setup: $setup"
+    echo ""
+
+    dirSetup="setups.orig/$setup"
+
+    if [ ! -d "$dirSetup" ]
+    then
+        echo "Setup directory: $dirSetup" \
+             "could not be found - skipping execution" 1>&2
+        exit 1
+    fi
+
+    cp -rfL "$dirSetup/0.orig" .
+    cp -rfL "$dirSetup/constant" .
+    cp -rfL "$dirSetup/system" .
+    cp -rf 0.orig/ 0/
+
+    runApplication blockMesh
+
+    runApplication renumberMesh -overwrite -constant
+
+    runApplication checkMesh \
+        -allTopology -allGeometry -constant \
+        -writeAllFields -writeAllSurfaceFields
+
+
+    if [ "$parallel" = true ]
+    then
+
+        runApplication decomposePar
+
+        runParallel -s parallel renumberMesh -overwrite
+
+        runParallel $(getApplication)
+
+        runApplication reconstructPar
+
+    else
+
+        runApplication $(getApplication)
+
+    fi
+
+    # runtime sampling has problems in parallel mode (Apr 2021)
+    runApplication \
+        postProcess -func sample -latestTime
+
+    runApplication -s "epsilon" \
+        postProcess -func sampleEpsilon -latestTime
+
+    runApplication -s "G"\
+        postProcess -func sampleG -latestTime
+
+    runApplication foamLog log.$(getApplication)
+
+    collect "$setup"
+
+done
+
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/plot b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/plot
new file mode 100755
index 0000000000000000000000000000000000000000..153118703bf5f0f3d7342155bdf4f04c77981dbf
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/plot
@@ -0,0 +1,663 @@
+#!/bin/bash
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
+#------------------------------------------------------------------------------
+
+# settings
+
+    # operand setups
+    setups="
+    0
+    10
+    20
+    30
+    40
+    50
+    60
+    70
+    80
+    85
+    "
+
+
+#------------------------------------------------------------------------------
+
+plot_initial_iteration_residuals() {
+
+    setup="$1"
+
+    echo "  Plotting the initial-iteration residuals for $setup"
+
+    # benchmarkFile="..."
+    samples="results/$setup/logs"
+    image="plots/$setup/initial-iteration-residuals.png"
+
+    gnuplot<<PLT_RES
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    set logscale y
+    set key right top
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "Iters"
+    set ylabel "Initial-iteration residuals"
+    set offset .2, .05
+    set output "$image"
+    set title "Max non-orthogonality degree: $setup"
+
+    file_exists(file) = system("[ -f '".file."' ] && echo '1' || echo '0'") + 0
+
+    Ux="$samples/Ux_0"
+    p="$samples/p_0"
+    k="$samples/k_0"
+    omega="$samples/omega_0"
+    nuTilda="$samples/nuTilda_0"
+    gammaInt="$samples/gammaInt_0"
+    ReThetat="$samples/ReThetat_0"
+
+    if ( file_exists(k) ) {
+        if ( ! file_exists(gammaInt) ) {
+            plot \
+                Ux u 1:2 t "Ux" w l lw 2 lc rgb "#009E73", \
+                p u 1:2 t "p" w l lw 2 lc rgb "#F0E440", \
+                k u 1:2 t "k" w l lw 2 lc rgb "#0072B2", \
+                omega u 1:2 t "omega" w l lw 2 lc rgb "#D55E00"
+        } else {
+            plot \
+                Ux u 1:2 t "Ux" w l lw 2 lc rgb "#009E73", \
+                p u 1:2 t "p" w l lw 2 lc rgb "#F0E440", \
+                k u 1:2 t "k" w l lw 2 lc rgb "#0072B2", \
+                omega u 1:2 t "omega" w l lw 2 lc rgb "#D55E00", \
+                gammaInt u 1:2 t "gammaInt" w l lw 2 lc rgb "#CC79A7", \
+                ReThetat u 1:2 t "ReThetat" w l lw 2 lc rgb "#440154"
+            }
+    } else {
+        plot \
+            Ux u 1:2 t "Ux" w l lw 2 lc rgb "#009E73", \
+            p u 1:2 t "p" w l lw 2 lc rgb "#F0E440", \
+            nuTilda u 1:2 t "nuTilda" w l lw 2 lc rgb "#0072B2"
+        }
+PLT_RES
+}
+
+
+plot_final_iteration_residuals() {
+
+    setup="$1"
+
+    echo "  Plotting the final-iteration residuals for $setup"
+
+    # benchmarkFile="..."
+    samples="results/$setup/logs"
+    image="plots/$setup/final-iteration-residuals.png"
+
+    gnuplot<<PLT_RES
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    set logscale y
+    set key right top
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "Iters"
+    set ylabel "Final-iteration residuals"
+    set offset .2, .05
+    set output "$image"
+    set title "Max non-orthogonality degree: $setup"
+
+    file_exists(file) = system("[ -f '".file."' ] && echo '1' || echo '0'") + 0
+
+    Ux="$samples/UxFinalRes_0"
+    p="$samples/pFinalRes_0"
+    k="$samples/kFinalRes_0"
+    omega="$samples/omegaFinalRes_0"
+    nuTilda="$samples/nuTildaFinalRes_0"
+    gammaInt="$samples/gammaIntFinalRes_0"
+    ReThetat="$samples/ReThetatFinalRes_0"
+
+    if ( file_exists(k) ) {
+        if ( ! file_exists(gammaInt) ) {
+            plot \
+                Ux u 1:2 t "Ux" w l lw 2 lc rgb "#009E73", \
+                p u 1:2 t "p" w l lw 2 lc rgb "#F0E440", \
+                k u 1:2 t "k" w l lw 2 lc rgb "#0072B2", \
+                omega u 1:2 t "omega" w l lw 2 lc rgb "#D55E00"
+        } else {
+            plot \
+                Ux u 1:2 t "Ux" w l lw 2 lc rgb "#009E73", \
+                p u 1:2 t "p" w l lw 2 lc rgb "#F0E440", \
+                k u 1:2 t "k" w l lw 2 lc rgb "#0072B2", \
+                omega u 1:2 t "omega" w l lw 2 lc rgb "#D55E00", \
+                gammaInt u 1:2 t "gammaInt" w l lw 2 lc rgb "#CC79A7", \
+                ReThetat u 1:2 t "ReThetat" w l lw 2 lc rgb "#440154"
+            }
+    } else {
+        plot \
+            Ux u 1:2 t "Ux" w l lw 2 lc rgb "#009E73", \
+            p u 1:2 t "p" w l lw 2 lc rgb "#F0E440", \
+            nuTilda u 1:2 t "nuTilda" w l lw 2 lc rgb "#0072B2"
+        }
+PLT_RES
+}
+
+
+plot_yPlus_vs_uPlus() {
+
+    setup="$1"
+    endTime="$2"
+    nu="$3"
+    uTau="$4"
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.means"
+    sampleFile="results/$setup/postProcessing/sample/$endTime/y_U.xy"
+    image="plots/$setup/yPlus_vs_uPlus.png"
+
+    gnuplot<<PLT_Y_VS_U
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    set xrange [0:200]
+    set yrange [0:20]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "u^+"
+    set output "$image"
+    set title "Setup: $setup" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        samples="$sampleFile"
+
+
+    plot \
+        samples u (\$1*$uTau/$nu):(\$2/$uTau) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:3 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_U
+}
+
+
+plot_yPlus_vs_R() {
+
+    setup="$1"
+    endTime="$2"
+    nu="$3"
+    uTau="$4"
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.reystress"
+    sampleFile="results/$setup/postProcessing/sample/$endTime/y_turbulenceProperties:R.xy"
+    sampleFileK="results/$setup/postProcessing/sample/$endTime/y_turbulenceProperties:k.xy"
+    imageUU="plots/$setup/yPlus_vs_Ruu.png"
+    imageVV="plots/$setup/yPlus_vs_Rvv.png"
+    imageWW="plots/$setup/yPlus_vs_Rww.png"
+    imageUV="plots/$setup/yPlus_vs_Ruv.png"
+    imageK0="plots/$setup/yPlus_vs_kPlus0.png"
+    imageK1="plots/$setup/yPlus_vs_kPlus1.png"
+
+    gnuplot<<PLT_Y_VS_R
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    #set xrange [0:200]
+    #set yrange [0:1]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "(uu)^+"
+    set output "$imageUU"
+    set title "Setup: $setup" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        samples="$sampleFile"
+        samplesK="$sampleFileK"
+
+
+    plot \
+        samples u (\$1*$uTau/$nu):(\$2/$uTau**2) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:3 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageVV"
+    set ylabel "(vv)^+"
+    plot \
+        samples u (\$1*$uTau/$nu):(\$5/$uTau**2) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:4 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageWW"
+    set ylabel "(ww)^+"
+    plot \
+        samples u (\$1*$uTau/$nu):(\$7/$uTau**2) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:5 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageUV"
+    set ylabel "(uv)^+"
+    plot \
+        samples u (\$1*$uTau/$nu):(-\$3/$uTau**2) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:(\$6*-1) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageK0"
+    set ylabel "k^+"
+    plot \
+        samples u (\$1*$uTau/$nu):(0.5*(\$2 + \$5 + \$7)/$uTau**2) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:(0.5*(\$3 + \$4 + \$5)) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageK1"
+    set ylabel "k^+"
+    plot \
+        samplesK u (\$1*$uTau/$nu):(\$2/$uTau**2) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:(0.5*(\$3 + \$4 + \$5)) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_R
+}
+
+
+plot_yPlus_vs_epsilonPlus() {
+
+    setup="$1"
+    endTime="$2"
+    nu="$3"
+    uTau="$4"
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.kbal"
+    sampleFile="results/$setup/postProcessing/sampleEpsilon/$endTime/y_turbulenceProperties:epsilon.xy"
+    image="plots/$setup/yPlus_vs_epsilonPlus.png"
+
+    gnuplot<<PLT_Y_VS_EPSILON
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    #set xrange [0:200]
+    #set yrange [0:20]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "{/Symbol e}^+"
+    set output "$image"
+    set title "Setup: $setup" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        samples="$sampleFile"
+
+    plot \
+        samples u (\$1*$uTau/$nu):(\$2*$nu/$uTau**4) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:(-\$3) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_EPSILON
+}
+
+
+plot_yPlus_vs_productionRatePlus() {
+
+    setup="$1"
+    endTime="$2"
+    nu="$3"
+    uTau="$4"
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.kbal"
+    sampleFile="results/$setup/postProcessing/sampleG/$endTime/y_productionRate.xy"
+    image="plots/$setup/yPlus_vs_productionRatePlus.png"
+
+    gnuplot<<PLT_Y_VS_PRODUCTION_RATE
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    #set xrange [0:200]
+    #set yrange [0:20]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "P^+"
+    set output "$image"
+    set title "Setup: $setup" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        samples="$sampleFile"
+
+    plot \
+        samples u (\$1*$uTau/$nu):(\$2*$nu/$uTau**4) t "OpenFOAM" w l lw 2 lc rgb "#4169e1"
+        # benchmark u 2:4 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_PRODUCTION_RATE
+}
+
+
+plot_yPlus_vs_uPlus_all_setups() {
+
+    setups=$@
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.means"
+
+    n=0
+    for setup in $setups
+    do
+        # few manipulations
+        endTime=$(foamDictionary results/$setup/system/controlDict -entry endTime -value)
+        nu=$(foamDictionary results/$setup/constant/transportProperties -entry nu | sed 's|^.*\s\(.*\);|\1|g')
+        tau=$(foamDictionary results/$setup/$endTime/wallShearStress1:wallShearStress -entry boundaryField.bottom.value -value | sed -n '/(/,/)/p' | sed -e 's/[()]//g;/^\s*$/d' | cut -d' ' -f6)
+        uTau=$(awk -v tau="$tau" 'BEGIN { printf "%.16f", sqrt(-1*tau) }')
+
+        sampleFiles[$n]="results/$setup/postProcessing/sample/$endTime/y_U.xy"
+        nus[$n]="$nu"
+        uTaus[$n]="$uTau"
+        n=$(($n+1))
+    done
+
+    image="plots/all_setups_yPlus_vs_uPlus.png"
+
+    gnuplot<<PLT_Y_VS_U_ALL_SETUPS
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    set xrange [0:200]
+    set yrange [0:20]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "u^+"
+    set output "$image"
+    set title "Ground-normal profile" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        models="${setups[*]}"
+        samples="${sampleFiles[*]}"
+        nus="${nus[*]}"
+        uTaus="${uTaus[*]}"
+
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(\$2/word(uTaus, i)) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:3 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_U_ALL_SETUPS
+}
+
+
+plot_yPlus_vs_R_all_setups() {
+
+    setups=$@
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.reystress"
+
+    n=0
+    for setup in $setups
+    do
+        # few manipulations
+        endTime=$(foamDictionary results/$setup/system/controlDict -entry endTime -value)
+        nu=$(foamDictionary results/$setup/constant/transportProperties -entry nu | sed 's|^.*\s\(.*\);|\1|g')
+        tau=$(foamDictionary results/$setup/$endTime/wallShearStress1:wallShearStress -entry boundaryField.bottom.value -value | sed -n '/(/,/)/p' | sed -e 's/[()]//g;/^\s*$/d' | cut -d' ' -f6)
+        uTau=$(awk -v tau="$tau" 'BEGIN { printf "%.16f", sqrt(-1*tau) }')
+
+        sampleFiles[$n]="results/$setup/postProcessing/sample/$endTime/y_turbulenceProperties:R.xy"
+        sampleFilesK[$n]="results/$setup/postProcessing/sample/$endTime/y_turbulenceProperties:k.xy"
+        nus[$n]="$nu"
+        uTaus[$n]="$uTau"
+        n=$(($n+1))
+    done
+
+    imageUU="plots/all_setups_yPlus_vs_Ruu.png"
+    imageVV="plots/all_setups_yPlus_vs_Rvv.png"
+    imageWW="plots/all_setups_yPlus_vs_Rww.png"
+    imageUV="plots/all_setups_yPlus_vs_Ruv.png"
+    imageK0="plots/all_setups_yPlus_vs_kPlus0.png"
+    imageK1="plots/all_setups_yPlus_vs_kPlus1.png"
+
+    gnuplot<<PLT_Y_VS_R
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    #set xrange [0:200]
+    #set yrange [0:1]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "(uu)^+"
+    set output "$imageUU"
+    set title "Ground-normal profile" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        models="${setups[*]}"
+        samples="${sampleFiles[*]}"
+        samplesK="${sampleFilesK[*]}"
+        nus="${nus[*]}"
+        uTaus="${uTaus[*]}"
+
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(\$2/word(uTaus, i)**2) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:3 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageVV"
+    set ylabel "(vv)^+"
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(\$5/word(uTaus, i)**2) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:4 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageWW"
+    set ylabel "(ww)^+"
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(\$7/word(uTaus, i)**2) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:5 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageUV"
+    set ylabel "(uv)^+"
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(-\$3/word(uTaus, i)**2) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:(\$6*-1) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageK0"
+    set ylabel "k^+"
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(0.5*(\$2 + \$5 + \$7)/word(uTaus, i)**2) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:(0.5*(\$3 + \$4 + \$5)) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+
+    set output "$imageK1"
+    set ylabel "k^+"
+    plot \
+        for [i=1:words(samplesK)] word(samplesK, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(\$2/word(uTaus, i)**2) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:(0.5*(\$3 + \$4 + \$5)) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_R
+}
+
+
+plot_yPlus_vs_epsilonPlus_all_setups() {
+
+    setups=$@
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.kbal"
+
+    n=0
+    for setup in $setups
+    do
+        # few manipulations
+        endTime=$(foamDictionary results/$setup/system/controlDict -entry endTime -value)
+        nu=$(foamDictionary results/$setup/constant/transportProperties -entry nu | sed 's|^.*\s\(.*\);|\1|g')
+        tau=$(foamDictionary results/$setup/$endTime/wallShearStress1:wallShearStress -entry boundaryField.bottom.value -value | sed -n '/(/,/)/p' | sed -e 's/[()]//g;/^\s*$/d' | cut -d' ' -f6)
+        uTau=$(awk -v tau="$tau" 'BEGIN { printf "%.16f", sqrt(-1*tau) }')
+
+        sampleFiles[$n]="results/$setup/postProcessing/sampleEpsilon/$endTime/y_turbulenceProperties:epsilon.xy"
+        nus[$n]="$nu"
+        uTaus[$n]="$uTau"
+        n=$(($n+1))
+    done
+
+    image="plots/all_setups_yPlus_vs_epsilonPlus.png"
+
+    gnuplot<<PLT_Y_VS_EPSILON_ALL_SETUPS
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    #set xrange [0:200]
+    #set yrange [0:20]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "{/Symbol e}^+"
+    set output "$image"
+    set title "Setup: $setup" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        models="${setups[*]}"
+        samples="${sampleFiles[*]}"
+        nus="${nus[*]}"
+        uTaus="${uTaus[*]}"
+
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(\$2*word(nus, i)/word(uTaus, i)**4) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:(-\$3) t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_EPSILON_ALL_SETUPS
+}
+
+
+plot_yPlus_vs_productionRatePlus_all_setups() {
+
+    setups=$@
+
+    # benchmarkFile="$FOAM_TUTORIALS/resources/dataset/planeChannelFlow/ReTau-395/chan395.kbal"
+
+    n=0
+    for setup in $setups
+    do
+        # few manipulations
+        endTime=$(foamDictionary results/$setup/system/controlDict -entry endTime -value)
+        nu=$(foamDictionary results/$setup/constant/transportProperties -entry nu | sed 's|^.*\s\(.*\);|\1|g')
+        tau=$(foamDictionary results/$setup/$endTime/wallShearStress1:wallShearStress -entry boundaryField.bottom.value -value | sed -n '/(/,/)/p' | sed -e 's/[()]//g;/^\s*$/d' | cut -d' ' -f6)
+        uTau=$(awk -v tau="$tau" 'BEGIN { printf "%.16f", sqrt(-1*tau) }')
+
+        sampleFiles[$n]="results/$setup/postProcessing/sampleG/$endTime/y_productionRate.xy"
+        nus[$n]="$nu"
+        uTaus[$n]="$uTau"
+        n=$(($n+1))
+    done
+
+    image="plots/all_setups_yPlus_vs_productionRatePlus.png"
+
+    gnuplot<<PLT_Y_VS_PRODUCTION_RATE_ALL_SETUPS
+    set terminal pngcairo font "helvetica,20" size 1000, 1000
+    set grid
+    #set xrange [0:200]
+    #set yrange [0:20]
+    set logscale x
+    set key left top reverse
+    set key samplen 2
+    set key spacing 0.75
+    set xlabel "y^+"
+    set ylabel "P^+"
+    set output "$image"
+    set title "Ground-normal profile" noenhanced
+
+    # Benchmark - Experimental
+        # benchmark="$benchmarkFile"
+
+    # OpenFOAM - Numerical
+        models="${setups[*]}"
+        samples="${sampleFiles[*]}"
+        nus="${nus[*]}"
+        uTaus="${uTaus[*]}"
+
+    plot \
+        for [i=1:words(samples)] word(samples, i) \
+            u (\$1*word(uTaus, i)/word(nus, i)):(\$2*word(nus, i)/word(uTaus, i)**4) \
+            t word(models, i) w l lw 2
+        # benchmark u 2:4 t "DNS" w p ps 2 pt 7 lc rgb "#ffc020"
+PLT_Y_VS_PRODUCTION_RATE_ALL_SETUPS
+}
+
+
+#------------------------------------------------------------------------------
+
+# Requires gnuplot
+command -v gnuplot >/dev/null || {
+    echo "gnuplot not found - skipping graph creation" 1>&2
+    exit 1
+}
+
+# Requires awk
+command -v awk >/dev/null || {
+    echo "awk not found - skipping graph creation" 1>&2
+    exit 1
+}
+
+# Check "results" directory
+[ -d "results" ] || {
+    echo "No results directory found - skipping graph creation" 1>&2
+    exit 1
+}
+
+
+#------------------------------------------------------------------------------
+
+for setup in $setups
+do
+
+    echo ""
+    echo "# Plots for the setup: $setup"
+    echo ""
+
+    dirPlots="plots/$setup"
+    [ -d "$dirPlots" ] || mkdir -p "$dirPlots"
+
+    # few manipulations
+    endTime=$(foamDictionary results/$setup/system/controlDict -entry endTime -value)
+    nu=$(foamDictionary results/$setup/constant/transportProperties -entry nu | sed 's|^.*\s\(.*\);|\1|g')
+    tau=$(foamDictionary results/$setup/$endTime/wallShearStress1:wallShearStress -entry boundaryField.bottom.value -value | sed -n '/(/,/)/p' | sed -e 's/[()]//g;/^\s*$/d' | cut -d' ' -f6)
+    uTau=$(awk -v tau="$tau" 'BEGIN { printf "%.16f", sqrt(-1*tau) }')
+
+    plot_yPlus_vs_uPlus "$setup" "$endTime" "$nu" "$uTau"
+
+    plot_yPlus_vs_R "$setup" "$endTime" "$nu" "$uTau"
+
+    plot_yPlus_vs_epsilonPlus "$setup" "$endTime" "$nu" "$uTau"
+
+    plot_yPlus_vs_productionRatePlus "$setup" "$endTime" "$nu" "$uTau"
+
+    plot_initial_iteration_residuals "$setup"
+
+    plot_final_iteration_residuals "$setup"
+
+done
+
+plot_yPlus_vs_uPlus_all_setups $setups
+
+plot_yPlus_vs_R_all_setups $setups
+
+plot_yPlus_vs_epsilonPlus_all_setups $setups
+
+plot_yPlus_vs_productionRatePlus_all_setups $setups
+
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..4cd9e46311d7bfd4ff04fa612fd0e50ff80d0a46
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               0;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/0/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..627d7a9ee3199d62a02cedc777c7ff77afb741a7
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               10;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/10/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..73e162e2b63c5ef26358710a1f30bed20c46f498
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               20;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/20/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..f4dc91136896ede1c474d859b5ac2a312a6ad78b
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               30;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/30/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..59bbc543cc192db19c50a855888fa2670d1c571f
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               40;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/40/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..b8ed3c6cf4833cc7c729c8e30908dd47607243d5
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               50;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/50/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..084c8fb332a555f39653ef50ebfe5e6b2185f8cb
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               60;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/60/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..6e484519c18d21789a620dc2e3a053abf4f54904
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               70;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/70/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..c2e7c0f44e10056153b25862f5ebc8feeba6499a
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               80;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/80/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/0.orig b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/0.orig
new file mode 120000
index 0000000000000000000000000000000000000000..f9966c1c82445726c8b1406d9ce800ba065a718e
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/0.orig
@@ -0,0 +1 @@
+../common/0.orig
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/constant b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/constant
new file mode 120000
index 0000000000000000000000000000000000000000..f62979488680995c237f9e4e76821042a1165ced
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/constant
@@ -0,0 +1 @@
+../common/constant
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/blockMeshDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..f31baa38c2ac888f511faacd6032b8a562d55381
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/blockMeshDict
@@ -0,0 +1,100 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale               1;
+
+alpha               85;
+nx                  5;
+ny                  100;
+nz                  1;
+xMin                0;
+xMax                1;
+yMin                0;
+yMax                1;
+zMin                0;
+zMax                1;
+yExpansion          9.987905978;
+
+sin0                #eval{sin(degToRad($alpha))};
+cos0                #eval{cos(degToRad($alpha))};
+xMindx              #eval{$xMin + $sin0};
+xMaxdx              #eval{$xMax + $sin0};
+yMaxdy              #eval{$yMax*$cos0};
+
+vertices
+(
+    ($xMin     $yMin    $zMin)
+    ($xMax     $yMin    $zMin)
+    ($xMaxdx   $yMaxdy  $zMin)
+    ($xMindx   $yMaxdy  $zMin)
+    ($xMin     $yMin    $zMax)
+    ($xMax     $yMin    $zMax)
+    ($xMaxdx   $yMaxdy  $zMax)
+    ($xMindx   $yMaxdy  $zMax)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz)  simpleGrading (1 $yExpansion 1)
+);
+
+boundary
+(
+    inlet
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    outlet
+    {
+        type patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    top
+    {
+        type symmetry;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type wall;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    leftAndRight
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/controlDict
new file mode 120000
index 0000000000000000000000000000000000000000..e38bfb1f6b29ad74081447310151d1d7cb723d8c
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/controlDict
@@ -0,0 +1 @@
+../../common/system/controlDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..9276e7939a3791b19a21ab0f390795f8b35de238
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/decomposeParDict
@@ -0,0 +1 @@
+../../common/system/decomposeParDict
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/fvSchemes
new file mode 120000
index 0000000000000000000000000000000000000000..274d17e172845cf7de4dddb3e6ed0a5464d437af
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/fvSchemes
@@ -0,0 +1 @@
+../../common/system/fvSchemes
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/fvSolution
new file mode 120000
index 0000000000000000000000000000000000000000..504f0b1c9e2057fe941ed5718c4be80647f41b98
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/fvSolution
@@ -0,0 +1 @@
+../../common/system/fvSolution
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sample
new file mode 120000
index 0000000000000000000000000000000000000000..dd0303886fa4a0319e10028dcb3176973f68d715
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sample
@@ -0,0 +1 @@
+../../common/system/sample
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sampleEpsilon
new file mode 120000
index 0000000000000000000000000000000000000000..c26b1f97d5ce7694fc6042850049abdc2a34e6b0
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sampleEpsilon
@@ -0,0 +1 @@
+../../common/system/sampleEpsilon
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sampleG
new file mode 120000
index 0000000000000000000000000000000000000000..6d73a78c8452a998721af474cf47708d84a66690
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/85/system/sampleG
@@ -0,0 +1 @@
+../../common/system/sampleG
\ No newline at end of file
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/U b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/U
new file mode 100644
index 0000000000000000000000000000000000000000..e59fd7e55a9c58e94962a2723e57553eb4c4b190
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/U
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volVectorField;
+    object      U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -1 0 0 0 0];
+
+internalField   uniform (0 0 0);
+
+boundaryField
+{
+    bottom
+    {
+        type            fixedValue;
+        value           uniform (0 0 0);
+    }
+
+    top
+    {
+        type            symmetry;
+    }
+
+    inlet
+    {
+        type            zeroGradient;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    leftAndRight
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/k b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/k
new file mode 100644
index 0000000000000000000000000000000000000000..02f18bd113f735110611b608beea8ccde976e1ec
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/k
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      k;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 2 -2 0 0 0 0];
+
+internalField   uniform 0.325;
+
+boundaryField
+{
+    bottom
+    {
+        type            fixedValue;
+        value           uniform 1e-10;
+    }
+
+    top
+    {
+        type            symmetry;
+    }
+
+    inlet
+    {
+        type            zeroGradient;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    leftAndRight
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/nut b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/nut
new file mode 100644
index 0000000000000000000000000000000000000000..3cd40c660ba8fe0c25ea01e82d768fc1b5a99991
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/nut
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      nut;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 2 -1 0 0 0 0];
+
+internalField   uniform  0;
+
+boundaryField
+{
+    bottom
+    {
+        type            nutLowReWallFunction;
+        value           $internalField;
+    }
+
+    top
+    {
+        type            symmetry;
+    }
+
+    inlet
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    outlet
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    leftAndRight
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/omega b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/omega
new file mode 100644
index 0000000000000000000000000000000000000000..bd6cc86d94e2b7b7cb8a1cfeef861f9e3c8a6e6b
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/omega
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      omega;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 -1 0 0 0 0];
+
+internalField   uniform 400;
+
+boundaryField
+{
+    bottom
+    {
+        type            omegaWallFunction;
+        value           $internalField;
+    }
+
+    top
+    {
+        type            symmetry;
+    }
+
+    inlet
+    {
+        type            zeroGradient;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    leftAndRight
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/p b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/p
new file mode 100644
index 0000000000000000000000000000000000000000..7b156f28664997267eac1d674a6047d4db6be8b9
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/0.orig/p
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 2 -2 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    bottom
+    {
+        type            zeroGradient;
+    }
+
+    top
+    {
+        type            symmetry;
+    }
+
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 1.0;
+    }
+
+    outlet
+    {
+        type            fixedValue;
+        value           uniform 0.0;
+    }
+
+    leftAndRight
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/constant/transportProperties b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/constant/transportProperties
new file mode 100644
index 0000000000000000000000000000000000000000..8cf1ea6cbdbd0ba53ba39bb1e9a5ec0c88c1d2dd
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/constant/transportProperties
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      transportProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+transportModel  Newtonian;
+
+nu              0.0025494595145829;
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/constant/turbulenceProperties
new file mode 100644
index 0000000000000000000000000000000000000000..46a32a743ffced92a7136d1c241f69d411dba6c6
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/constant/turbulenceProperties
@@ -0,0 +1,25 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType  RAS;
+
+RAS
+{
+    RASModel    kOmegaSST;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/controlDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..82e68c390e0736ee6469833ca64b06f3021be828
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/controlDict
@@ -0,0 +1,151 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     simpleFoam;
+
+startFrom       latestTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         50000;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   50000;
+
+purgeWrite      1;
+
+writeFormat     ascii;
+
+writePrecision  16;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   8;
+
+runTimeModifiable false;
+
+functions
+{
+    fieldMinMax1
+    {
+        type            fieldMinMax;
+        libs            (fieldFunctionObjects);
+        writeToFile     no;
+        log             yes;
+        location        yes;
+        mode            magnitude;
+        fields          ( p U );
+    }
+
+    wallShearStress1
+    {
+        type            wallShearStress;
+        libs            (fieldFunctionObjects);
+        patches         ( bottom );
+        executeControl  writeTime;
+        writeControl    writeTime;
+    }
+
+    yPlus1
+    {
+        type            yPlus;
+        libs            (fieldFunctionObjects);
+        executeControl  writeTime;
+        writeControl    writeTime;
+    }
+
+    writeCellCentres1
+    {
+        type            writeCellCentres;
+        libs            (fieldFunctionObjects);
+        executeControl  onEnd;
+        writeControl    onEnd;
+    }
+
+    turbulenceFields1
+    {
+        type            turbulenceFields;
+        libs            (fieldFunctionObjects);
+        fields          ( k epsilon R );
+        executeControl  writeTime;
+        writeControl    writeTime;
+    }
+
+    productionRate1
+    {
+        type            coded;
+        libs            (utilityFunctionObjects);
+        name            productionRate;
+        writeControl    writeTime;
+
+        codeExecute
+        #{
+            static autoPtr<volScalarField> productionRate;
+            if
+            (
+                mesh().time().timeIndex() == 1
+                ||
+                mesh().time().startTimeIndex() == mesh().time().timeIndex() - 1
+            )
+            {
+                Info<< "Create production rate field" << nl;
+                productionRate.set
+                (
+                    new volScalarField
+                    (
+                        IOobject
+                        (
+                            "productionRate",
+                            mesh().time().timeName(),
+                            mesh(),
+                            IOobject::NO_READ,
+                            IOobject::AUTO_WRITE
+                        ),
+                        mesh(),
+                        sqr(dimLength)/pow(dimTime, 3)
+                    )
+                );
+            }
+
+            if
+            (
+                mesh().time().timeIndex() != 1
+             && mesh().time().timeIndex() > 1 // = timeStart
+            )
+            {
+                Info<< "Computing production rate field\n" << endl;
+
+                auto& prod =
+                    mesh().lookupObjectRef<volScalarField>("productionRate");
+
+                const auto& nut = mesh().lookupObject<volScalarField>("nut");
+                const auto& U = mesh().lookupObject<volVectorField>("U");
+
+                prod = 2*nut*(symm(fvc::grad(U)) && symm(fvc::grad(U)));
+            }
+        #};
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/decomposeParDict b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/decomposeParDict
new file mode 100644
index 0000000000000000000000000000000000000000..1f6fb39517753c4670113e88755a978865da0736
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/decomposeParDict
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains  2;
+
+method              scotch;
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/fvSchemes b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..a13d605795331b3d89463ca86bac8a467a6509a2
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/fvSchemes
@@ -0,0 +1,75 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         steadyState;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+    grad(U)         cellLimited Gauss linear 1;
+    grad(k)         cellLimited Gauss linear 1;
+    grad(omega)     cellLimited Gauss linear 1;
+}
+
+divSchemes
+{
+    default         none;
+    div(phi,U)      bounded Gauss linearUpwind grad(U);
+
+    turbulence      bounded Gauss limitedLinear 1;
+
+    div(phi,k)      $turbulence;
+    div(phi,omega)  $turbulence;
+    div(phi,nuTilda) $turbulence;
+    div(phi,epsilon) $turbulence;
+    div(phi,phit)   $turbulence;
+    div(phi,f)      $turbulence;
+
+    div((nuEff*dev2(T(grad(U))))) Gauss linear;
+}
+
+laplacianSchemes
+{
+    default         Gauss linear limited corrected 0.33;
+    laplacian((1|((1|(1|A(U)))-H(1))),p) Gauss linear limited relaxed 0.33;
+}
+
+interpolationSchemes
+{
+    default         linear;
+}
+
+snGradSchemes
+{
+    default         limited corrected 0.33;
+}
+
+wallDist
+{
+    method          meshWave;
+}
+
+fluxRequired
+{
+    default         no;
+    p;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/fvSolution b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..dd52d23f1b404f1ef79b57f21135aa2b7b5d9fbd
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/fvSolution
@@ -0,0 +1,90 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    p
+    {
+        solver          GAMG;
+        tolerance       1e-09;
+        relTol          0.01;
+        smoother        DICGaussSeidel;
+        nPreSweeps      0;
+        nPostSweeps     2;
+        cacheAgglomeration on;
+        agglomerator    faceAreaPair;
+        nCellsInCoarsestLevel 10;
+        mergeLevels     1;
+    }
+
+    U
+    {
+        solver          smoothSolver;
+        smoother        symGaussSeidel;
+        tolerance       1e-12;
+        relTol          0;
+    }
+
+    "(k|omega|nuTilda)"
+    {
+        solver          smoothSolver;
+        smoother        symGaussSeidel;
+        tolerance       1e-09;
+        relTol          0.01;
+    }
+
+    "(epsilon|phit)"
+    {
+        solver          PBiCGStab;
+        preconditioner  DILU;
+        tolerance       1e-8;
+        relTol          0;
+    }
+
+    f
+    {
+        solver          PBiCGStab;
+        preconditioner  DIC;
+        tolerance       1e-8;
+        relTol          0;
+    }
+}
+
+SIMPLE
+{
+    nNonOrthogonalCorrectors 0;
+    consistent          true;
+}
+
+relaxationFactors
+{
+    fields
+    {
+        "snGrad(p)"     0.5;
+    }
+    equations
+    {
+        U               0.9;
+        k               0.7;
+        omega           0.7;
+        nuTilda         0.7;
+        epsilon         0.7;
+        "(phit|f)"      0.7;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sample b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sample
new file mode 100644
index 0000000000000000000000000000000000000000..ce4645b847a2250c5ecee68ed21f164c767437c3
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sample
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      sample;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+type                sets;
+libs                (sampling);
+interpolationScheme cellPoint;
+setFormat           raw;
+executeControl      writeTime;
+writeControl        writeTime;
+fields
+(
+    U
+    turbulenceProperties:k
+    turbulenceProperties:R
+);
+
+sets
+(
+    ref_point
+    {
+        type    cloud;
+        axis    y;
+        points  ((0.5 1 0.5));
+    }
+
+    y
+    {
+        type    midPoint;
+        axis    y;
+        start   (0.5 0 0.5);
+        end     (0.5 1 0.5);
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sampleEpsilon b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sampleEpsilon
new file mode 100644
index 0000000000000000000000000000000000000000..de09bff3b16ac8713cf37f6b252166b97a0d7ff8
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sampleEpsilon
@@ -0,0 +1,40 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      sample;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+type                sets;
+libs                (sampling);
+interpolationScheme cellPoint;
+setFormat           raw;
+executeControl      writeTime;
+writeControl        writeTime;
+fields
+(
+    turbulenceProperties:epsilon
+);
+
+sets
+(
+    y
+    {
+        type    midPoint;
+        axis    y;
+        start   (0.5 0 0.5);
+        end     (0.5 1 0.5);
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sampleG b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sampleG
new file mode 100644
index 0000000000000000000000000000000000000000..7460f2c6ca8a91afc1b127fdb2353fc5c30865cb
--- /dev/null
+++ b/tutorials/incompressible/simpleFoam/nonOrthogonalChannel/setups.orig/common/system/sampleG
@@ -0,0 +1,40 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2012                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      sample;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+type                sets;
+libs                (sampling);
+interpolationScheme cellPoint;
+setFormat           raw;
+executeControl      writeTime;
+writeControl        writeTime;
+fields
+(
+    productionRate
+);
+
+sets
+(
+    y
+    {
+        type    midPoint;
+        axis    y;
+        start   (0.5 0 0.5);
+        end     (0.5 1 0.5);
+    }
+);
+
+
+// ************************************************************************* //