diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/files b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/files
new file mode 100644
index 0000000000..5bb1f8d023
--- /dev/null
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/files
@@ -0,0 +1,3 @@
+rhoPimplecFoam.C
+
+EXE = $(FOAM_APPBIN)/rhoPimplecFoam
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/options b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/options
new file mode 100644
index 0000000000..d16a0ee1d8
--- /dev/null
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/options
@@ -0,0 +1,15 @@
+EXE_INC = \
+ -I.. \
+ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
+ -I$(LIB_SRC)/finiteVolume/cfdTools \
+ -I$(LIB_SRC)/finiteVolume/lnInclude
+
+EXE_LIBS = \
+ -lbasicThermophysicalModels \
+ -lspecie \
+ -lcompressibleTurbulenceModel \
+ -lcompressibleRASModels \
+ -lcompressibleLESModels \
+ -lfiniteVolume \
+ -lmeshTools
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H
new file mode 100644
index 0000000000..7ef1b62533
--- /dev/null
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H
@@ -0,0 +1,117 @@
+rho = thermo.rho();
+rho = max(rho, rhoMin);
+rho = min(rho, rhoMax);
+rho.relax();
+
+volScalarField rAU(1.0/UEqn().A());
+volScalarField rAtU(1.0/(1.0/rAU - UEqn().H1()));
+
+volVectorField HbyA("HbyA", U);
+HbyA = rAU*UEqn().H();
+
+if (pimple.nCorrPIMPLE() <= 1)
+{
+ UEqn.clear();
+}
+
+if (pimple.transonic())
+{
+ surfaceScalarField phid
+ (
+ "phid",
+ fvc::interpolate(psi)
+ *(
+ (fvc::interpolate(HbyA) & mesh.Sf())
+ + fvc::ddtPhiCorr(rAU, rho, U, phi)
+ )
+ );
+
+ surfaceScalarField phic
+ (
+ "phic",
+ fvc::interpolate(rho*(rAtU - rAU))*fvc::snGrad(p)*mesh.magSf()
+ );
+
+ HbyA -= (rAU - rAtU)*fvc::grad(p);
+
+ volScalarField Dp("Dp", rho*rAtU);
+
+ while (pimple.correctNonOrthogonal())
+ {
+ fvScalarMatrix pEqn
+ (
+ fvm::ddt(psi, p)
+ + fvm::div(phid, p)
+ + fvc::div(phic)
+ - fvm::laplacian(Dp, p)
+ );
+
+ // Relax the pressure equation to maintain diagonal dominance
+ pEqn.relax();
+
+ pEqn.solve();
+
+ if (pimple.finalNonOrthogonalIter())
+ {
+ phi == phic + pEqn.flux();
+ }
+ }
+}
+else
+{
+ surfaceScalarField phiHbyA
+ (
+ "phiHbyA",
+ fvc::interpolate(rho)
+ *(
+ (fvc::interpolate(HbyA) & mesh.Sf())
+ + fvc::ddtPhiCorr(rAU, rho, U, phi)
+ )
+ );
+
+ phiHbyA += fvc::interpolate(rho*(rAtU - rAU))*fvc::snGrad(p)*mesh.magSf();
+ HbyA -= (rAU - rAtU)*fvc::grad(p);
+
+ volScalarField Dp("Dp", rho*rAtU);
+
+ while (pimple.correctNonOrthogonal())
+ {
+ fvScalarMatrix pEqn
+ (
+ fvm::ddt(psi, p)
+ + fvc::div(phiHbyA)
+ - fvm::laplacian(Dp, p)
+ );
+
+ pEqn.solve();
+
+ if (pimple.finalNonOrthogonalIter())
+ {
+ phi = phiHbyA + pEqn.flux();
+ }
+ }
+}
+
+#include "rhoEqn.H"
+#include "compressibleContinuityErrs.H"
+
+// Explicitly relax pressure for momentum corrector
+p.relax();
+
+U = HbyA - rAtU*fvc::grad(p);
+U.correctBoundaryConditions();
+K = 0.5*magSqr(U);
+
+dpdt = fvc::ddt(p);
+
+// Recalculate density from the relaxed pressure
+rho = thermo.rho();
+rho = max(rho, rhoMin);
+rho = min(rho, rhoMax);
+
+if (!pimple.transonic())
+{
+ rho.relax();
+}
+
+Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl;
diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/rhoPimplecFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/rhoPimplecFoam.C
new file mode 100644
index 0000000000..0b01f51c82
--- /dev/null
+++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/rhoPimplecFoam.C
@@ -0,0 +1,105 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Application
+ rhoPimplecFoam
+
+Description
+ Transient solver for laminar or turbulent flow of compressible fluids
+ for HVAC and similar applications.
+
+ Uses the flexible PIMPLEC (PISOC-SIMPLEC) solution for time-resolved and
+ pseudo-transient simulations.
+
+\*---------------------------------------------------------------------------*/
+
+#include "fvCFD.H"
+#include "basicPsiThermo.H"
+#include "turbulenceModel.H"
+#include "bound.H"
+#include "pimpleControl.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+ #include "setRootCase.H"
+ #include "createTime.H"
+ #include "createMesh.H"
+
+ pimpleControl pimple(mesh);
+
+ #include "createFields.H"
+ #include "initContinuityErrs.H"
+
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ Info<< "\nStarting time loop\n" << endl;
+
+ while (runTime.run())
+ {
+ #include "readTimeControls.H"
+ #include "compressibleCourantNo.H"
+ #include "setDeltaT.H"
+
+ runTime++;
+
+ Info<< "Time = " << runTime.timeName() << nl << endl;
+
+ if (pimple.nCorrPIMPLE() <= 1)
+ {
+ #include "rhoEqn.H"
+ }
+
+ // --- Pressure-velocity PIMPLE corrector loop
+ while (pimple.loop())
+ {
+ #include "UEqn.H"
+ #include "hEqn.H"
+
+ // --- Pressure corrector loop
+ while (pimple.correct())
+ {
+ #include "pEqn.H"
+ }
+
+ if (pimple.turbCorr())
+ {
+ turbulence->correct();
+ }
+ }
+
+ runTime.write();
+
+ Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
+ << " ClockTime = " << runTime.elapsedClockTime() << " s"
+ << nl << endl;
+ }
+
+ Info<< "End\n" << endl;
+
+ return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/T b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/T
new file mode 100644
index 0000000000..561ca236be
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/T
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ object T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 0 0 1 0 0 0];
+
+internalField uniform 293;
+
+boundaryField
+{
+
+ front
+ {
+ type zeroGradient;
+ }
+ back
+ {
+ type zeroGradient;
+ }
+ wall
+ {
+ type zeroGradient;
+ }
+ porosityWall
+ {
+ type zeroGradient;
+ }
+
+ inlet
+ {
+ type fixedValue;
+ value $internalField;
+ }
+ outlet
+ {
+ type inletOutlet;
+ value $internalField;
+ inletValue $internalField;
+ }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/U b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/U
new file mode 100644
index 0000000000..277f93a33b
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/U
@@ -0,0 +1,57 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volVectorField;
+ object U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 1 -1 0 0 0 0];
+
+internalField uniform (0 0 0);
+
+boundaryField
+{
+ front
+ {
+ type fixedValue;
+ value uniform (0 0 0);
+ }
+ back
+ {
+ type fixedValue;
+ value uniform (0 0 0);
+ }
+ wall
+ {
+ type fixedValue;
+ value uniform (0 0 0);
+ }
+ porosityWall
+ {
+ type slip;
+ value uniform (0 0 0);
+ }
+ inlet
+ {
+ type flowRateInletVelocity;
+ flowRate constant 0.65;
+ value uniform (0 0 0);
+ }
+ outlet
+ {
+ type pressureInletOutletVelocity;
+ value uniform (0 0 0);
+ inletValue uniform (0 0 0);
+ }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/alphat b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/alphat
new file mode 100644
index 0000000000..f609fa6c14
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/alphat
@@ -0,0 +1,57 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ location "0";
+ object alphat;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [1 -1 -1 0 0 0 0];
+
+internalField uniform 0;
+
+boundaryField
+{
+ front
+ {
+ type alphatWallFunction;
+ value uniform 0;
+ }
+ back
+ {
+ type alphatWallFunction;
+ value uniform 0;
+ }
+ wall
+ {
+ type alphatWallFunction;
+ value uniform 0;
+ }
+ porosityWall
+ {
+ type alphatWallFunction;
+ value uniform 0;
+ }
+ inlet
+ {
+ type calculated;
+ value uniform 0;
+ }
+ outlet
+ {
+ type calculated;
+ value uniform 0;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/epsilon b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/epsilon
new file mode 100644
index 0000000000..e4dccfe577
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/epsilon
@@ -0,0 +1,59 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ location "0";
+ object epsilon;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 2 -3 0 0 0 0];
+
+internalField uniform 200;
+
+boundaryField
+{
+ front
+ {
+ type compressible::epsilonWallFunction;
+ value uniform 200;
+ }
+ back
+ {
+ type compressible::epsilonWallFunction;
+ value uniform 200;
+ }
+ wall
+ {
+ type compressible::epsilonWallFunction;
+ value uniform 200;
+ }
+ porosityWall
+ {
+ type compressible::epsilonWallFunction;
+ value uniform 200;
+ }
+ inlet
+ {
+ type compressible::turbulentMixingLengthDissipationRateInlet;
+ mixingLength 0.005;
+ value uniform 200;
+ }
+ outlet
+ {
+ type inletOutlet;
+ inletValue uniform 200;
+ value uniform 200;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/k b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/k
new file mode 100644
index 0000000000..655a91bb45
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/k
@@ -0,0 +1,59 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ location "0";
+ object k;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 2 -2 0 0 0 0];
+
+internalField uniform 1;
+
+boundaryField
+{
+ front
+ {
+ type compressible::kqRWallFunction;
+ value uniform 1;
+ }
+ back
+ {
+ type compressible::kqRWallFunction;
+ value uniform 1;
+ }
+ wall
+ {
+ type compressible::kqRWallFunction;
+ value uniform 1;
+ }
+ porosityWall
+ {
+ type compressible::kqRWallFunction;
+ value uniform 1;
+ }
+ inlet
+ {
+ type turbulentIntensityKineticEnergyInlet;
+ intensity 0.05;
+ value uniform 1;
+ }
+ outlet
+ {
+ type inletOutlet;
+ inletValue uniform 1;
+ value uniform 1;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/mut b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/mut
new file mode 100644
index 0000000000..0cea2db2d2
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/mut
@@ -0,0 +1,57 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ location "0";
+ object mut;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [1 -1 -1 0 0 0 0];
+
+internalField uniform 0;
+
+boundaryField
+{
+ front
+ {
+ type mutkWallFunction;
+ value uniform 0;
+ }
+ back
+ {
+ type mutkWallFunction;
+ value uniform 0;
+ }
+ wall
+ {
+ type mutkWallFunction;
+ value uniform 0;
+ }
+ porosityWall
+ {
+ type mutkWallFunction;
+ value uniform 0;
+ }
+ inlet
+ {
+ type calculated;
+ value uniform 0;
+ }
+ outlet
+ {
+ type calculated;
+ value uniform 0;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/p b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/p
new file mode 100644
index 0000000000..21db04d610
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/p
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ object p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [1 -1 -2 0 0 0 0];
+
+internalField uniform 1.0e5;
+
+boundaryField
+{
+ front
+ {
+ type zeroGradient;
+ }
+ back
+ {
+ type zeroGradient;
+ }
+ wall
+ {
+ type zeroGradient;
+ }
+ porosityWall
+ {
+ type zeroGradient;
+ }
+
+ inlet
+ {
+ type zeroGradient;
+ }
+ outlet
+ {
+ type fixedValue;
+ value $internalField;
+ }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/Allrun b/tutorials/compressible/rhoPimplecFoam/angledDuct/Allrun
new file mode 100755
index 0000000000..c9fa982557
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/Allrun
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # run from this directory
+
+m4 constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication blockMesh
+runApplication `getApplication`
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/RASProperties b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/RASProperties
new file mode 100644
index 0000000000..a4937b503a
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/RASProperties
@@ -0,0 +1,25 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "constant";
+ object RASProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+RASModel kEpsilon;
+
+turbulence on;
+
+printCoeffs on;
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/polyMesh/blockMeshDict.m4 b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/polyMesh/blockMeshDict.m4
new file mode 100644
index 0000000000..79da11e10a
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/polyMesh/blockMeshDict.m4
@@ -0,0 +1,165 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ `format' ascii;
+ class dictionary;
+ object blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// block definition for a porosity with an angled inlet/outlet
+// the porosity is not aligned with the main axes
+//
+dnl> -----------------------------------------------------------------
+dnl>
+dnl>
+changecom(//)changequote([,]) dnl>
+define(calc, [esyscmd(perl -e 'print ($1)')]) dnl>
+define(VCOUNT, 0) dnl>
+define(vlabel, [[// ]pt VCOUNT ($1) define($1, VCOUNT)define([VCOUNT], incr(VCOUNT))]) dnl>
+dnl>
+define(hex2D, hex ($1b $2b $3b $4b $1f $2f $3f $4f)) dnl>
+define(quad2D, ($1f $1b $2b $2f)) dnl>
+define(frontQuad, ($1f $2f $3f $4f)) dnl>
+define(backQuad, ($4b $3b $2b $1b)) dnl>
+dnl>
+dnl>
+dnl> -----------------------------------------------------------------
+dnl>
+define(ncells, 20) dnl>
+define(ninlet, 15) dnl>
+define(nporo, 20) dnl>
+define(noutlet, 20) dnl>
+dnl>
+define(x0,0) dnl>
+define(y0,0) dnl>
+define(y0,0) dnl>
+define(Cos,0.7071067812) dnl> == cos(45)
+define(Sin,0.7071067812) dnl> == sin(45)
+dnl>
+define(width,50) dnl>
+define(zBack,calc(-width/2)) dnl>
+define(zFront,calc(width/2)) dnl>
+define(leninlet,150)dnl>
+define(lenporo,100)dnl>
+define(lenoutlet,100)dnl>
+dnl>
+define(xhyp,calc(Sin*width)) dnl>
+define(yhyp,calc(Cos*width)) dnl>
+define(xinlet,leninlet)dnl>
+define(xporo,calc(Cos*lenporo)) dnl>
+define(yporo,calc(Sin*lenporo)) dnl>
+define(xoutlet,calc(xporo + Cos*lenoutlet)) dnl>
+define(youtlet,calc(yporo + Sin*lenoutlet)) dnl>
+dnl>
+
+convertToMeters 0.001;
+
+vertices
+(
+ // inlet region
+ ( -xinlet y0 zBack ) vlabel(in1b)
+ ( -xinlet yhyp zBack ) vlabel(in2b)
+ ( -xinlet y0 zFront ) vlabel(in1f)
+ ( -xinlet yhyp zFront ) vlabel(in2f)
+
+ // join inlet->outlet
+ ( x0 y0 zBack ) vlabel(join1b)
+ ( -xhyp yhyp zBack ) vlabel(join2b)
+ ( x0 y0 zFront ) vlabel(join1f)
+ ( -xhyp yhyp zFront ) vlabel(join2f)
+
+ // porosity ends ->outlet
+ ( xporo yporo zBack ) vlabel(poro1b)
+ ( calc(xporo - xhyp) calc(yporo + yhyp) zBack ) vlabel(poro2b)
+ ( xporo yporo zFront ) vlabel(poro1f)
+ ( calc(xporo - xhyp) calc(yporo + yhyp) zFront ) vlabel(poro2f)
+
+ // outlet
+ ( xoutlet youtlet zBack ) vlabel(out1b)
+ ( calc(xoutlet - xhyp) calc(youtlet + yhyp) zBack ) vlabel(out2b)
+ ( xoutlet youtlet zFront ) vlabel(out1f)
+ ( calc(xoutlet - xhyp) calc(youtlet + yhyp) zFront ) vlabel(out2f)
+);
+
+blocks
+(
+ // inlet block
+ hex2D(in1, join1, join2, in2)
+ inlet ( ninlet ncells ncells ) simpleGrading (1 1 1)
+
+ // porosity block
+ hex2D(join1, poro1, poro2, join2)
+ porosity ( nporo ncells ncells ) simpleGrading (1 1 1)
+
+ // outlet block
+ hex2D(poro1, out1, out2, poro2)
+ outlet ( noutlet ncells ncells ) simpleGrading (1 1 1)
+);
+
+edges
+(
+);
+
+patches
+(
+ // is there no way of defining all my 'defaultFaces' to be 'wall'?
+ wall front
+ (
+ // inlet block
+ frontQuad(in1, join1, join2, in2)
+ // outlet block
+ frontQuad(poro1, out1, out2, poro2)
+ )
+
+ wall back
+ (
+ // inlet block
+ backQuad(in1, join1, join2, in2)
+ // outlet block
+ backQuad(poro1, out1, out2, poro2)
+ )
+
+ wall wall
+ (
+ // inlet block
+ quad2D(in1, join1)
+ quad2D(join2, in2)
+ // outlet block
+ quad2D(poro1, out1)
+ quad2D(out2, poro2)
+ )
+
+ wall porosityWall
+ (
+ // porosity block
+ frontQuad(join1, poro1, poro2, join2)
+ // porosity block
+ backQuad(join1, poro1, poro2, join2)
+ // porosity block
+ quad2D(join1, poro1)
+ quad2D(poro2, join2)
+ )
+
+ patch inlet
+ (
+ quad2D(in2, in1)
+ )
+
+ patch outlet
+ (
+ quad2D(out2, out1)
+ )
+);
+
+mergePatchPairs
+(
+);
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/polyMesh/boundary b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/polyMesh/boundary
new file mode 100644
index 0000000000..0abd1608ab
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/polyMesh/boundary
@@ -0,0 +1,58 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class polyBoundaryMesh;
+ location "constant/polyMesh";
+ object boundary;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+6
+(
+ front
+ {
+ type wall;
+ nFaces 700;
+ startFace 63400;
+ }
+ back
+ {
+ type wall;
+ nFaces 700;
+ startFace 64100;
+ }
+ wall
+ {
+ type wall;
+ nFaces 1400;
+ startFace 64800;
+ }
+ porosityWall
+ {
+ type wall;
+ nFaces 1600;
+ startFace 66200;
+ }
+ inlet
+ {
+ type patch;
+ nFaces 400;
+ startFace 67800;
+ }
+ outlet
+ {
+ type patch;
+ nFaces 400;
+ startFace 68200;
+ }
+)
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/porousZones b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/porousZones
new file mode 100644
index 0000000000..afeb6461e1
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/porousZones
@@ -0,0 +1,36 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "constant";
+ object porousZones;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+1
+(
+ porosity
+ {
+ coordinateSystem
+ {
+ e1 (0.70710678 0.70710678 0);
+ e2 (0 0 1);
+ }
+
+ Darcy
+ {
+ d d [0 -2 0 0 0 0 0] (5e7 -1000 -1000);
+ f f [0 -1 0 0 0 0 0] (0 0 0);
+ }
+ }
+)
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/thermophysicalProperties b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/thermophysicalProperties
new file mode 100644
index 0000000000..d6d597d433
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/thermophysicalProperties
@@ -0,0 +1,40 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "constant";
+ object thermophysicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType hPsiThermo>>>>;
+
+mixture
+{
+ specie
+ {
+ nMoles 1;
+ molWeight 28.9;
+ }
+ thermodynamics
+ {
+ Cp 1007;
+ Hf 0;
+ }
+ transport
+ {
+ As 1.4792e-06;
+ Ts 116;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/turbulenceProperties b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/turbulenceProperties
new file mode 100644
index 0000000000..3721a46a2e
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/turbulenceProperties
@@ -0,0 +1,21 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "constant";
+ object turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType RASModel;
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/system/controlDict b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/controlDict
new file mode 100644
index 0000000000..bbcbeb2543
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/controlDict
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "system";
+ object controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application rhoPimplecFoam;
+
+startFrom startTime;
+
+startTime 0;
+
+stopAt endTime;
+
+endTime 10;
+
+deltaT 1;
+
+writeControl adjustableRunTime;
+
+writeInterval 10;
+
+purgeWrite 0;
+
+writeFormat ascii;
+
+writePrecision 6;
+
+writeCompression off;
+
+timeFormat general;
+
+timePrecision 6;
+
+runTimeModifiable true;
+
+adjustTimeStep no;
+
+maxCo 10;
+
+maxDeltaT 1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSchemes b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSchemes
new file mode 100644
index 0000000000..391c95e6dc
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSchemes
@@ -0,0 +1,76 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "system";
+ object fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+ default Euler;
+}
+
+gradSchemes
+{
+ default Gauss linear;
+ grad(p) Gauss linear;
+}
+
+divSchemes
+{
+ default none;
+ div(phi,U) Gauss upwind;
+ div(phid,p) Gauss upwind;
+ div(phi,K) Gauss linear;
+ div(phi,h) Gauss upwind;
+ div(phi,k) Gauss upwind;
+ div(phi,epsilon) Gauss upwind;
+ div(phi,R) Gauss upwind;
+ div(phi,omega) Gauss upwind;
+ div((rho*R)) Gauss linear;
+ div(R) Gauss linear;
+ div(U) Gauss linear;
+ div((muEff*dev2(T(grad(U))))) Gauss linear;
+}
+
+laplacianSchemes
+{
+ default none;
+ laplacian(muEff,U) Gauss linear corrected;
+ laplacian(mut,U) Gauss linear corrected;
+ laplacian(DkEff,k) Gauss linear corrected;
+ laplacian(DepsilonEff,epsilon) Gauss linear corrected;
+ laplacian(DREff,R) Gauss linear corrected;
+ laplacian(DomegaEff,omega) Gauss linear corrected;
+ laplacian(Dp,p) Gauss linear corrected;
+ laplacian(alphaEff,h) Gauss linear corrected;
+}
+
+interpolationSchemes
+{
+ default linear;
+}
+
+snGradSchemes
+{
+ default corrected;
+}
+
+fluxRequired
+{
+ default no;
+ p ;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSolution b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSolution
new file mode 100644
index 0000000000..593aacfcfe
--- /dev/null
+++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSolution
@@ -0,0 +1,91 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: dev |
+| \\ / A nd | Web: www.OpenFOAM.org |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "system";
+ object fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+ p
+ {
+ //solver PCG;
+ //preconditioner DIC;
+ solver PBiCG;
+ preconditioner DILU;
+ tolerance 1e-06;
+ relTol 0.01;
+ }
+
+ pFinal
+ {
+ $p;
+ tolerance 1e-06;
+ relTol 0;
+ }
+
+ "(rho|U|h|k|epsilon|omega)"
+ {
+ solver PBiCG;
+ preconditioner DILU;
+ tolerance 1e-05;
+ relTol 0.1;
+ }
+
+ "(rho|U|h|k|epsilon|omega)Final"
+ {
+ $U;
+ tolerance 1e-05;
+ relTol 0;
+ }
+
+}
+
+PIMPLE
+{
+ momentumPredictor yes;
+ transonic yes;
+ nOuterCorrectors 50;
+ nCorrectors 1;
+ nNonOrthogonalCorrectors 0;
+ rhoMin rhoMin [ 1 -3 0 0 0 ] 0.1;
+ rhoMax rhoMax [ 1 -3 0 0 0 ] 3.0;
+
+ residualControl
+ {
+ "(U|k|epsilon)"
+ {
+ relTol 0;
+ tolerance 0.0001;
+ }
+ }
+
+ turbOnFinalIterOnly off;
+}
+
+relaxationFactors
+{
+ fields
+ {
+ "p.*" 1;
+ "rho.*" 1;
+ }
+ equations
+ {
+ "(U|h|k|epsilon|omega).*" 0.85;
+ "p.*" 1;
+ }
+}
+
+
+// ************************************************************************* //