From 12efbd8965a74710fc15c728f657754b0487d360 Mon Sep 17 00:00:00 2001
From: Kutalmis Bercin <kutalmis.bercin@esi-group.com>
Date: Thu, 10 Dec 2020 17:43:01 +0000
Subject: [PATCH] TUT: airRecirculationRoom: add new reactingParcelFoam
 tutorial

---
 .../airRecirculationRoom/Allclean             |   9 +
 .../airRecirculationRoom/Allrun               |  10 +
 .../airRecirculationRoom/steady/0.orig/T      |  71 +++
 .../airRecirculationRoom/steady/0.orig/U      |  59 ++
 .../airRecirculationRoom/steady/0.orig/alphat |  49 ++
 .../airRecirculationRoom/steady/0.orig/k      |  53 ++
 .../airRecirculationRoom/steady/0.orig/nut    |  55 ++
 .../airRecirculationRoom/steady/0.orig/omega  |  57 ++
 .../airRecirculationRoom/steady/0.orig/p      |  52 ++
 .../airRecirculationRoom/steady/Allclean      |  11 +
 .../steady/Allrun-parallel                    |  14 +
 .../airRecirculationRoom/steady/Allrun.pre    |  19 +
 .../steady/constant/fvOptions                 |  26 +
 .../airRecirculationRoom/steady/constant/g    |  22 +
 .../steady/constant/thermophysicalProperties  |  55 ++
 .../steady/constant/turbulenceProperties      |  28 +
 .../steady/system/blockMeshDict               |  93 +++
 .../steady/system/controlDict                 |  66 ++
 .../steady/system/decomposeParDict            |  22 +
 .../steady/system/fvSchemes                   |  70 +++
 .../steady/system/fvSolution                  | 106 ++++
 .../steady/system/snappyHexMeshDict           | 330 ++++++++++
 .../steady/system/surfaceFeatureExtractDict   |  29 +
 .../airRecirculationRoom/transient/0.orig/CO2 |  65 ++
 .../airRecirculationRoom/transient/0.orig/G   |  68 ++
 .../airRecirculationRoom/transient/0.orig/H2O |  84 +++
 .../airRecirculationRoom/transient/0.orig/N2  |  78 +++
 .../airRecirculationRoom/transient/0.orig/O2  |  84 +++
 .../airRecirculationRoom/transient/0.orig/T   |  96 +++
 .../transient/0.orig/alphat                   |  49 ++
 .../airRecirculationRoom/transient/0.orig/k   |  52 ++
 .../airRecirculationRoom/transient/0.orig/nut |  49 ++
 .../transient/0.orig/omega                    |  62 ++
 .../transient/0.orig/p_rgh                    |  58 ++
 .../airRecirculationRoom/transient/Allclean   |   8 +
 .../airRecirculationRoom/transient/Allrun     |  17 +
 .../transient/Allrun-parallel                 |  19 +
 .../transient/constant/chemistryProperties    |  39 ++
 .../transient/constant/combustionProperties   |  20 +
 .../transient/constant/fvOptions              |  26 +
 .../airRecirculationRoom/transient/constant/g |  22 +
 .../constant/particleTrackProperties          |  24 +
 .../transient/constant/radiationProperties    |  22 +
 .../constant/reactingCloud1Properties         | 584 ++++++++++++++++++
 .../transient/constant/reactions              |  10 +
 .../constant/thermo.incompressiblePoly        | 158 +++++
 .../constant/thermophysicalProperties         |  59 ++
 .../transient/constant/turbulenceProperties   |  35 ++
 .../transient/system/controlDict              |  54 ++
 .../transient/system/decomposeParDict         |  22 +
 .../transient/system/fvSchemes                |  53 ++
 .../transient/system/fvSolution               | 107 ++++
 .../geometry/roomRecirculation.stl.gz         | Bin 0 -> 1248 bytes
 53 files changed, 3330 insertions(+)
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allclean
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allrun
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/T
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/U
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/alphat
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/k
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/nut
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/omega
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/p
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allclean
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun-parallel
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun.pre
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/fvOptions
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/g
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/thermophysicalProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/turbulenceProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/blockMeshDict
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/controlDict
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/decomposeParDict
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSchemes
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSolution
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/snappyHexMeshDict
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/surfaceFeatureExtractDict
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/CO2
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/G
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/H2O
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/N2
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/O2
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/T
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/alphat
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/k
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/nut
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/omega
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/p_rgh
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allclean
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun
 create mode 100755 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun-parallel
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/chemistryProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/combustionProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/fvOptions
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/g
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/particleTrackProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/radiationProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactingCloud1Properties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactions
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermo.incompressiblePoly
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermophysicalProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/turbulenceProperties
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/controlDict
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/decomposeParDict
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSchemes
 create mode 100644 tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSolution
 create mode 100644 tutorials/resources/geometry/roomRecirculation.stl.gz

diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allclean b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allclean
new file mode 100755
index 00000000000..03b2910983b
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allclean
@@ -0,0 +1,9 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+#------------------------------------------------------------------------------
+
+(cd steady && ./Allclean)
+
+(cd transient && ./Allclean)
+
+#------------------------------------------------------------------------------
\ No newline at end of file
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allrun b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allrun
new file mode 100755
index 00000000000..b786949d3f5
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/Allrun
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
+#------------------------------------------------------------------------------
+
+(cd steady && ./Allrun-parallel)
+
+(cd transient  && ./Allrun-parallel)
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/T b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/T
new file mode 100644
index 00000000000..5646a9b25d4
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/T
@@ -0,0 +1,71 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 1 0 0 0];
+
+internalField   uniform 293;
+
+boundaryField
+{
+    "(roof|floor|sideWall)"
+    {
+        type            zeroGradient;
+    }
+
+    humanBody
+    {
+        type            externalWallHeatFluxTemperature;
+        mode            flux;
+        q               uniform 58; // W/m^2
+        value           uniform 310;
+        kappaMethod     fluidThermo;
+        kappa           none;
+        Qr              none;
+    }
+
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 293;
+    }
+
+    mouth
+    {
+        type            fixedValue;
+        value           uniform 310;
+    }
+
+    outlet
+    {
+        type            inletOutlet;
+        value           $internalField;
+        inletValue      $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            fixedValue;
+        value           uniform 293;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/U b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/U
new file mode 100644
index 00000000000..297ac5b4a3d
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/U
@@ -0,0 +1,59 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    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
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            fixedValue;
+        value           uniform (0 0 0);
+    }
+
+    inlet
+    {
+        type            surfaceNormalFixedValue;
+        refValue        uniform -1;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    mouth
+    {
+        type            surfaceNormalFixedValue;
+        refValue        uniform -4;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            surfaceNormalFixedValue;
+        refValue        uniform -2;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/alphat b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/alphat
new file mode 100644
index 00000000000..5e954e192cb
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/alphat
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      alphat;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -1 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            compressible::alphatWallFunction;
+        value           uniform 0;
+    }
+
+    "(inlet|mouth|outlet)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/k b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/k
new file mode 100644
index 00000000000..87b46c7d004
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/k
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    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.0938;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            kqRWallFunction;
+        value           $internalField;
+    }
+
+    "(inlet|mouth)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/nut b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/nut
new file mode 100644
index 00000000000..853074e38b7
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/nut
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    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
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            nutkWallFunction;
+        value           $internalField;
+    }
+
+    "(inlet|mouth)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    outlet
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/omega b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/omega
new file mode 100644
index 00000000000..dc54a7b1fdc
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/omega
@@ -0,0 +1,57 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    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 100;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            omegaWallFunction;
+        value           $internalField;
+    }
+
+    "(inlet|mouth)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            inletOutlet;
+        inletValue      uniform 0.223607;
+        value           uniform 0.223607;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            fixedValue;
+        value           uniform 0.223607;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/p b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/p
new file mode 100644
index 00000000000..d173c380f63
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/0.orig/p
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      p_rgh;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 101325;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            zeroGradient;
+    }
+
+    "(inlet|mouth)"
+    {
+        type            zeroGradient;
+    }
+
+    outlet
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            zeroGradient;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allclean b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allclean
new file mode 100755
index 00000000000..64e0b6245f8
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allclean
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions      # Tutorial clean functions
+#------------------------------------------------------------------------------
+
+cleanCase0
+
+rm -rf constant/triSurface
+rm -rf constant/extendedFeatureEdgeMesh
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun-parallel b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun-parallel
new file mode 100755
index 00000000000..f6afebac488
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun-parallel
@@ -0,0 +1,14 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
+#------------------------------------------------------------------------------
+
+[[ -d constant/polyMesh ]] || runApplication ./Allrun.pre
+
+runApplication decomposePar
+
+runParallel $(getApplication)
+
+runApplication reconstructPar -latestTime
+
+#------------------------------------------------------------------------------
\ No newline at end of file
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun.pre b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun.pre
new file mode 100755
index 00000000000..2293b77feec
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/Allrun.pre
@@ -0,0 +1,19 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
+#------------------------------------------------------------------------------
+
+restore0Dir
+
+runApplication blockMesh
+
+mkdir -p constant/triSurface
+
+cp -f "$FOAM_TUTORIALS"/resources/geometry/roomRecirculation.stl.gz \
+    constant/triSurface
+
+runApplication surfaceFeatureExtract
+
+runApplication snappyHexMesh -overwrite
+
+#------------------------------------------------------------------------------
\ No newline at end of file
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/fvOptions b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/fvOptions
new file mode 100644
index 00000000000..8e455968422
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/fvOptions
@@ -0,0 +1,26 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvOptions;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+limitT
+{
+    type       limitTemperature;
+    min        101;
+    max        313; // no more than 40 celsius inside the room
+    selectionMode all;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/g b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/g
new file mode 100644
index 00000000000..3d8763b484b
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/g
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       uniformDimensionedVectorField;
+    object      g;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -2 0 0 0 0];
+
+value           (0 0 -9.81);
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/thermophysicalProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/thermophysicalProperties
new file mode 100644
index 00000000000..9639c36cb18
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/thermophysicalProperties
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      thermophysicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType
+{
+    type            heRhoThermo;
+    mixture         pureMixture;
+    transport       const;
+    thermo          hConst;
+    equationOfState Boussinesq;
+    specie          specie;
+    energy          sensibleInternalEnergy;
+}
+
+mixture
+{
+    specie
+    {
+        molWeight   28.9;
+    }
+    thermodynamics
+    {
+        Cp          1007;
+        Hf          0;
+    }
+    transport
+    {
+        mu          1.84e-05;
+        Pr          0.7;
+    }
+    equationOfState
+    {
+        rho0    1;
+        T0      298;
+        beta 0.0034; // thermal expansion coefficient of air
+        // at normal standard conditions of 25 degree Celsius or 298 Kelvin
+        // thermal expansion coefficient of air is said to be around 0.0034/K
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/turbulenceProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/turbulenceProperties
new file mode 100644
index 00000000000..b4ba8e1d6ff
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/constant/turbulenceProperties
@@ -0,0 +1,28 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType          RAS;
+
+RAS
+{
+    RASModel            kOmegaSST;
+
+    turbulence          on;
+    printCoeffs         on;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/blockMeshDict b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/blockMeshDict
new file mode 100644
index 00000000000..83c040a0ea0
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/blockMeshDict
@@ -0,0 +1,93 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+scale    1;
+
+vertices
+(
+    ( -0.4 -0.4 -0.3 )
+    ( 4.4 -0.4 -0.3 )
+    ( 4.4 4.4 -0.3 )
+    ( -0.4 4.4 -0.3 )
+    ( -0.4 -0.4 3.3 )
+    ( 4.4 -0.4 3.3 )
+    ( 4.4 4.4 3.3 )
+    ( -0.4 4.4 3.3 )
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) ( 48 48 35 ) simpleGrading ( 1 1 1 )
+);
+
+edges
+(
+);
+
+boundary
+(
+    XMin
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    XMax
+    {
+        type patch;
+        faces
+        (
+            (1 2 6 5)
+        );
+    }
+    YMin
+    {
+        type patch;
+        faces
+        (
+            (0 1 5 4)
+        );
+    }
+    YMax
+    {
+        type patch;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    ZMin
+    {
+        type patch;
+        faces
+        (
+            (0 3 2 1)
+        );
+    }
+    ZMax
+    {
+        type patch;
+        faces
+        (
+            (4 5 6 7)
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/controlDict b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/controlDict
new file mode 100644
index 00000000000..4869701b064
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/controlDict
@@ -0,0 +1,66 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     rhoSimpleFoam;
+
+startFrom       latestTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         500;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   10;
+
+purgeWrite      2;
+
+writeFormat     ascii;
+
+writePrecision  10;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   10;
+
+runTimeModifiable true;
+
+maxCo           1;
+
+maxDeltaT       1;
+
+functions
+{
+    fieldMinMax
+    {
+        type                fieldMinMax;
+        functionObjectLibs  (fieldFunctionObjects);
+        fields              ( U p T);
+        mode                magnitude;
+        writeControl        timeStep;
+        writeInterval       1;
+        log                 yes;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/decomposeParDict b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/decomposeParDict
new file mode 100644
index 00000000000..3794d173496
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/decomposeParDict
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 10;
+
+method             scotch;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSchemes b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSchemes
new file mode 100644
index 00000000000..cb57b2045a7
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSchemes
@@ -0,0 +1,70 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         steadyState;
+}
+
+gradSchemes
+{
+    default         cellLimited Gauss linear 1;
+}
+
+divSchemes
+{
+    default         none;
+
+    div(phi,U)      bounded Gauss linearUpwind limited;
+
+    turbulence      bounded Gauss upwind;
+    energy          bounded Gauss limitedLinear 1.0;
+
+    div(phi,k)      $turbulence;
+    div(phi,omega)  $turbulence;
+
+    div(phi,e)      $energy;
+    div(phi,K)      $energy;
+    div(phi,Ekp)    $energy;
+
+    div(phid,p)     Gauss linear;
+    div((phi|interpolate(rho)),p)  bounded Gauss upwind;
+
+    div(((rho*nuEff)*dev2(T(grad(U)))))    Gauss linear;
+}
+
+laplacianSchemes
+{
+    default         Gauss linear limited 0.333;
+}
+
+interpolationSchemes
+{
+    default         linear;
+}
+
+snGradSchemes
+{
+    default         limited 0.333;
+}
+
+wallDist
+{
+    method          meshWave;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSolution b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSolution
new file mode 100644
index 00000000000..52be4088792
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/fvSolution
@@ -0,0 +1,106 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    p
+    {
+        solver          GAMG;
+        agglomerator    faceAreaPair;
+        mergeLevels     1;
+        cacheAgglomeration true;
+        nCellsInCoarsestLevel 200;
+        tolerance       1e-12;
+        relTol          0.001;
+        smoother        GaussSeidel;
+        nPreSweeps      0;
+        nPostSweeps     2;
+        nFinestSweeps   2;
+        nVcycles        1;
+        minIter         1;
+    }
+
+    U
+    {
+        solver          PBiCGStab;
+        preconditioner  DILU;
+        tolerance       1e-7;
+        relTol          0.01;
+    }
+
+    k
+    {
+        solver          PBiCGStab;
+        preconditioner  DILU;
+        tolerance       1e-7;
+        relTol          0.01;
+    }
+
+    omega
+    {
+        solver          PBiCGStab;
+        preconditioner  DILU;
+        tolerance       1e-7;
+        relTol          0.01;
+    }
+
+    e
+    {
+        solver          PBiCGStab;
+        preconditioner  DILU;
+        tolerance       1e-4;
+        relTol          0.1;
+    }
+
+    Phi
+    {
+        $p;
+    }
+}
+
+SIMPLE
+{
+    residualControl
+    {
+        p               1e-3;
+        U               1e-3;
+        k               1e-3;
+        omega           1e-3;
+        e               1e-3;
+    }
+
+    nNonOrthogonalCorrectors 0;
+    pMinFactor      0.1;
+    pMaxFactor      2;
+}
+
+relaxationFactors
+{
+    fields
+    {
+        p               0.7;
+        rho             0.01;
+    }
+    equations
+    {
+        U               0.3;
+        e               0.1;
+        "(k|omega)"     0.7;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/snappyHexMeshDict b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/snappyHexMeshDict
new file mode 100644
index 00000000000..252135ac777
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/snappyHexMeshDict
@@ -0,0 +1,330 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      snappyHexMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+castellatedMesh true;
+snap            true;
+addLayers       false;
+
+geometry
+{
+    roomRecirculation.stl
+    {
+        type    triSurfaceMesh;
+        name    roomRecirculation ;
+        regions
+        {
+            inlet
+            {
+                name    inlet;
+            }
+            outlet
+            {
+                name    outlet;
+            }
+            roof
+            {
+                name    roof;
+            }
+            floor
+            {
+                name    floor;
+            }
+            sideWall
+            {
+                name    sideWall;
+            }
+            humanBody
+            {
+                name    humanBody;
+            }
+            mouth
+            {
+                name    mouth;
+            }
+            // additional recirculation patches
+            intake1
+            {
+                name    intake1;
+            }
+            intake2
+            {
+                name    intake2;
+            }
+            intake3
+            {
+                name    intake3;
+            }
+            intake4
+            {
+                name    intake4;
+            }
+            exhaust_maxX
+            {
+                name    exhaust_maxX;
+            }
+            exhaust_minX
+            {
+                name    exhaust_minX;
+            }
+            exhaust_maxY
+            {
+                name    exhaust_maxY;
+            }
+            exhaust_minY
+            {
+                name    exhaust_minY;
+            }
+        }
+    }
+};
+
+castellatedMeshControls
+{
+    maxLocalCells   200000000;
+    maxGlobalCells  300000000;
+    minRefinementCells 20;
+    nCellsBetweenLevels 4;
+    maxLoadUnbalance 0.1;
+    allowFreeStandingZoneFaces true;
+    resolveFeatureAngle     30;
+    features
+    (
+        {
+            file "roomRecirculation.eMesh" ;
+            level 0 ;
+        }
+    );
+
+    refinementSurfaces
+    {
+        roomRecirculation
+        {
+            level (0 0);
+            regions
+            {
+                inlet
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                outlet
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                roof
+                {
+                    level (1  1);
+                    patchInfo
+                    {
+                        type     wall;
+                    }
+                }
+                floor
+                {
+                    level (1  1);
+                    patchInfo
+                    {
+                        type     wall;
+                    }
+                }
+                sideWall
+                {
+                    level (1  1);
+                    patchInfo
+                    {
+                        type     wall;
+                    }
+                }
+                humanBody
+                {
+                    level (4  4);
+                    patchInfo
+                    {
+                        type     wall;
+                    }
+                }
+                mouth
+                {
+                    level (4  4);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                intake1
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                intake2
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                intake3
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                intake4
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                exhaust_maxX
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                exhaust_minX
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                exhaust_maxY
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+                exhaust_minY
+                {
+                    level (3  3);
+                    patchInfo
+                    {
+                        type     patch;
+                    }
+                }
+            }
+        }
+    }
+
+    refinementRegions
+    {
+    }
+
+    locationInMesh ( 2 2 1.5 ) ;
+}
+
+snapControls
+{
+    tolerance       2;
+    implicitFeatureSnap false;
+    explicitFeatureSnap true;
+    multiRegionFeatureSnap true;
+    detectNearSurfacesSnap true;
+    nSmoothPatch    3;
+    nSolveIter      50;
+    nRelaxIter      5;
+    nFeatureSnapIter 10;
+    nSmoothInternal 3;
+    nFaceSplitInterval -1;
+}
+
+addLayersControls
+{
+    layers
+    {
+    }
+    relativeSizes    true ;
+    expansionRatio    1.2 ;
+    firstLayerThickness   0.1 ;
+    featureAngle    180;
+    slipFeatureAngle 30;
+    nGrow           0;
+    nBufferCellsNoExtrude 0;
+    minMedianAxisAngle 90;
+    maxFaceThicknessRatio 0.2;
+    maxThicknessToMedialRatio 0.3;
+    minThickness    1e-06;
+    nLayerIter      50;
+    nRelaxIter      5;
+    nSmoothSurfaceNormals 10;
+    nSmoothNormals  3;
+    nSmoothThickness 10;
+    nRelaxedIter    10;
+    nMedialAxisIter 10;
+}
+
+meshQualityControls
+{
+    minVol          1e-13;
+    minTetQuality   1e-16;
+    minArea         1e-13;
+    minTwist        0.05;
+    minDeterminant  1e-06;
+    minFaceWeight   0.02;
+    minVolRatio     0.01;
+    minTriangleTwist -1;
+    minFlatness     0.5;
+    maxNonOrtho     70;
+    maxBoundarySkewness 20;
+    maxInternalSkewness 4;
+    maxConcave      80;
+    nSmoothScale    4;
+    errorReduction  0.75;
+
+    relaxed
+    {
+        minVol          1e-30;
+        minTetQuality   1e-30;
+        minArea         1e-30;
+        minTwist        0.001;
+        minDeterminant  1e-06;
+        minFaceWeight   1e-06;
+        minVolRatio     0.01;
+        minTriangleTwist -1;
+        minFlatness     0.5;
+        maxNonOrtho     75;
+        maxBoundarySkewness 20;
+        maxInternalSkewness 8;
+        maxConcave      80;
+        nSmoothScale    4;
+        errorReduction  0.75;
+    }
+}
+mergeTolerance  1e-07;
+debug           0;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/surfaceFeatureExtractDict b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/surfaceFeatureExtractDict
new file mode 100644
index 00000000000..9738136dfde
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/steady/system/surfaceFeatureExtractDict
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      surfaceFeatureExtractDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+roomRecirculation.stl
+{
+    extractionMethod    extractFromSurface;
+    writeObj            yes;
+
+    extractFromSurfaceCoeffs
+    {
+        includedAngle   150;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/CO2 b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/CO2
new file mode 100644
index 00000000000..9f9c66c61d7
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/CO2
@@ -0,0 +1,65 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      CO2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+//How to convert from ppm to % in the air?
+//https://www.rapidtables.com/convert/number/PPM_to_Percent.html
+// 1% = 1/100
+// 1ppm = 1/1000000
+// hence
+// 1ppm = 0.0001%
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.0004;    // 400ppm => 0.04% => 0.0004
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            zeroGradient;
+    }
+
+    inlet
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    mouth
+    {
+        type            fixedValue;
+        value           uniform 0.001;    // 1000ppm => 0.1% => 0.001;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/G b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/G
new file mode 100644
index 00000000000..2236b34a0b6
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/G
@@ -0,0 +1,68 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      G;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 0 -3 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            MarshakRadiation;
+        emissivityMode  lookup;
+        emissivity      uniform 1;
+        value           uniform 0;
+        refValue        uniform 0;
+        refGradient     uniform 0;
+        valueFraction   uniform 0;
+    }
+
+    "(inlet|mouth)"
+    {
+        type            MarshakRadiation;
+        emissivityMode  lookup;
+        emissivity      uniform 1;
+        value           uniform 0;
+        refValue        uniform 0;
+        refGradient     uniform 0;
+        valueFraction   uniform 0;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            MarshakRadiation;
+        emissivityMode  lookup;
+        emissivity      uniform 1;
+        value           uniform 0;
+        refValue        uniform 0;
+        refGradient     uniform 0;
+        valueFraction   uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/H2O b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/H2O
new file mode 100644
index 00000000000..d4f97b35ccb
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/H2O
@@ -0,0 +1,84 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      H2O;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            zeroGradient;
+    }
+
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 0.5; // relative humidity 50%
+    }
+
+    mouth
+    {
+        type            fixedValue;
+        value           uniform 1; // relative humidity 100%
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    exhaust_maxX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake3;
+        fraction        0.95;    // 5% filtering
+        value           $internalField;
+    }
+
+    exhaust_minX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake1;
+        fraction        0.95;
+        value           $internalField;
+    }
+
+    exhaust_maxY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake4;
+        fraction        0.95;
+        value           $internalField;
+    }
+
+    exhaust_minY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake2;
+        fraction        0.95;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/N2 b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/N2
new file mode 100644
index 00000000000..d4940ab312a
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/N2
@@ -0,0 +1,78 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      N2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.79;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            zeroGradient;
+    }
+
+    "(inlet|mouth)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    exhaust_maxX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake3;
+        fraction        0.95;    // 5% filtering
+        value           $internalField;
+    }
+
+    exhaust_minX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake1;
+        fraction        0.95;
+        value           $internalField;
+    }
+
+    exhaust_maxY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake4;
+        fraction        0.95;
+        value           $internalField;
+    }
+
+    exhaust_minY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake2;
+        fraction        0.95;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/O2 b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/O2
new file mode 100644
index 00000000000..a57f7522486
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/O2
@@ -0,0 +1,84 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      O2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.21;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            zeroGradient;
+    }
+
+    "(inlet|mouth)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    mouth
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    exhaust_maxX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake3;
+        fraction        0.95;    // 5% filtering
+        value           $internalField;
+    }
+
+    exhaust_minX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake1;
+        fraction        0.95;
+        value           $internalField;
+    }
+
+    exhaust_maxY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake4;
+        fraction        0.95;
+        value           $internalField;
+    }
+
+    exhaust_minY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake2;
+        fraction        0.95;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/T b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/T
new file mode 100644
index 00000000000..af91e74a72b
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/T
@@ -0,0 +1,96 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 1 0 0 0];
+
+internalField   uniform 293;
+
+boundaryField
+{
+    "(roof|floor|sideWall)"
+    {
+        type            fixedValue;
+        value           uniform 297;
+    }
+
+    humanBody
+    {
+        type            externalWallHeatFluxTemperature;
+        mode            flux;
+        q               uniform 58; // W/m^2
+        value           uniform 310;
+        kappaMethod     fluidThermo;
+        kappa           none;
+        Qr              none;
+    }
+
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 293;
+    }
+
+    mouth
+    {
+        type            fixedValue;
+        value           uniform 310;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    exhaust_maxX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake3;
+        offset          20;
+        value           $internalField;
+    }
+
+    exhaust_minX
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake1;
+        offset          20;
+        value           $internalField;
+    }
+
+    exhaust_maxY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake4;
+        offset          20;
+        value           $internalField;
+    }
+
+    exhaust_minY
+    {
+        type            outletMappedUniformInlet;
+        outletPatch     intake2;
+        offset          20;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/alphat b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/alphat
new file mode 100644
index 00000000000..5e954e192cb
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/alphat
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      alphat;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -1 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            compressible::alphatWallFunction;
+        value           uniform 0;
+    }
+
+    "(inlet|mouth|outlet)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/k b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/k
new file mode 100644
index 00000000000..263a4e5b5af
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/k
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    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.0938;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            kqRWallFunction;
+        value           $internalField;
+    }
+    "(inlet|mouth)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    outlet
+    {
+        type            zeroGradient;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            zeroGradient;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/nut b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/nut
new file mode 100644
index 00000000000..2b42c9b848b
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/nut
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    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
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            nutkWallFunction;
+        value           $internalField;
+    }
+
+    "(inlet|mouth|outlet)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/omega b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/omega
new file mode 100644
index 00000000000..5da2c053c24
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/omega
@@ -0,0 +1,62 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    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 0.223607;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            omegaWallFunction;
+        value           $internalField;
+    }
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 0.223607;
+    }
+
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      uniform 0.223607;
+        value           uniform 0.223607;
+    }
+
+    mouth
+    {
+        type            fixedValue;
+        value           uniform 0.894427;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            inletOutlet;
+        inletValue      uniform 0.223607;
+        value           uniform 0.223607;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            fixedValue;
+        value           uniform 0.223607;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/p_rgh b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/p_rgh
new file mode 100644
index 00000000000..c06176876c5
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/0.orig/p_rgh
@@ -0,0 +1,58 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      p_rgh;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    "(roof|floor|sideWall|humanBody)"
+    {
+        type            fixedFluxPressure;
+        value           $internalField;
+    }
+
+    inlet
+    {
+        type            fixedFluxPressure;
+    }
+
+    mouth
+    {
+        type            fixedFluxPressure;
+    }
+
+    outlet
+    {
+        type            prghPressure;
+        p               $internalField;
+    }
+
+    "(intake1|intake2|intake3|intake4)"
+    {
+        type            prghPressure;
+        p               $internalField;
+    }
+
+    "(exhaust_maxX|exhaust_minX|exhaust_maxY|exhaust_minY)"
+    {
+        type            fixedFluxPressure;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allclean b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allclean
new file mode 100755
index 00000000000..fb1f3847301
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allclean
@@ -0,0 +1,8 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions      # Tutorial clean functions
+#------------------------------------------------------------------------------
+
+cleanCase0
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun
new file mode 100755
index 00000000000..fe4bfdcee39
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun
@@ -0,0 +1,17 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
+#------------------------------------------------------------------------------
+
+[[ -d constant/polyMesh ]] || rm -rf constant/polyMesh
+
+cp -rf ../steady/constant/polyMesh constant
+
+restore0Dir
+
+cp -f ../steady/500/U 0/
+cp -f ../steady/500/p 0/
+
+runApplication $(getApplication)
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun-parallel b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun-parallel
new file mode 100755
index 00000000000..f9174c7abe9
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/Allrun-parallel
@@ -0,0 +1,19 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
+#------------------------------------------------------------------------------
+
+[[ -d constant/polyMesh ]] || rm -rf constant/polyMesh
+
+cp -rf ../steady/constant/polyMesh constant
+
+restore0Dir
+
+cp -f ../steady/500/U 0/
+cp -f ../steady/500/p 0/
+
+runApplication decomposePar
+
+runParallel $(getApplication)
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/chemistryProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/chemistryProperties
new file mode 100644
index 00000000000..de895c17857
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/chemistryProperties
@@ -0,0 +1,39 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      chemistryProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+chemistryType
+{
+    solver              noChemistrySolver;
+}
+
+chemistry               off;
+
+initialChemicalTimeStep 1e-07;
+
+EulerImplicitCoeffs
+{
+    cTauChem            0.05;
+    equilibriumRateLimiter off;
+}
+
+odeCoeffs
+{
+    solver              seulex;
+    eps                 0.05;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/combustionProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/combustionProperties
new file mode 100644
index 00000000000..6ebdf3d7fab
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/combustionProperties
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      combustionProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+combustionModel  none;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/fvOptions b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/fvOptions
new file mode 100644
index 00000000000..b40d0a71817
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/fvOptions
@@ -0,0 +1,26 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvOptions;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+limitT
+{
+    type       limitTemperature;
+    min        101;
+    max        400;
+    selectionMode all;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/g b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/g
new file mode 100644
index 00000000000..3d8763b484b
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/g
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       uniformDimensionedVectorField;
+    object      g;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -2 0 0 0 0];
+
+value           (0 0 -9.81);
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/particleTrackProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/particleTrackProperties
new file mode 100644
index 00000000000..1110f585a65
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/particleTrackProperties
@@ -0,0 +1,24 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      particleTrackProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+cloud           reactingCloud1;
+
+sampleFrequency 1;
+
+maxPositions    1000000;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/radiationProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/radiationProperties
new file mode 100644
index 00000000000..c83a13ecf5f
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/radiationProperties
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      radiationProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+radiation       off;
+
+radiationModel  none;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactingCloud1Properties
new file mode 100644
index 00000000000..250c2606267
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactingCloud1Properties
@@ -0,0 +1,584 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      reactingCloud1Properties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solution
+{
+    active          true;
+    coupled         true;
+    transient       yes;
+    cellValueSourceCorrection on;
+    maxCo           0.3;
+
+    sourceTerms
+    {
+        schemes
+        {
+            rho             explicit 1;
+            U               explicit 1;
+            Yi              explicit 1;
+            h               explicit 1;
+            radiation       explicit 1;
+        }
+    }
+
+    interpolationSchemes
+    {
+        rho             cell;
+        U               cellPoint;
+        thermo:mu       cell;
+        T               cell;
+        Cp              cell;
+        kappa           cell;
+        p               cell;
+    }
+
+    integrationSchemes
+    {
+        U               Euler;
+        T               analytical;
+    }
+}
+
+constantProperties
+{
+    rho0            1000;
+    T0              300;
+    Cp0             4100;
+
+    constantVolume  false;
+}
+
+subModels
+{
+    particleForces
+    {
+        sphereDrag;
+        gravity;
+    }
+
+    injectionModels
+    {
+// using droplets distribution from 2009 Chao paper
+// https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7126899/
+
+// to allow an easier check of the number of particles hitting a patch
+// according to their size, we will reduce the number of model* parcel and
+// comment some of them, so to get a shorter list, easier to verify.
+        model3 // diameter  3 μm => 0.000003m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2; // taken from 3rd column of table https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7126899/table/tbl1/
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000003;
+                    maxValue        0.000003;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model6 // diameter  6 μm => 0.000006m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 27;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000006;
+                    maxValue        0.000006;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model12 // diameter  12 μm => 0.000012m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 9;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000012;
+                    maxValue        0.000012;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model20 // diameter  20 μm => 0.000020m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 5;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000020;
+                    maxValue        0.000020;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model28 // diameter  28 μm => 0.000028m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 3;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000028;
+                    maxValue        0.000028;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model36 // diameter  36 μm => 0.000036m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000036;
+                    maxValue        0.000036;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model45 // diameter  45 μm => 0.000045m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000045;
+                    maxValue        0.000045;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+/*
+        model62 // diameter  62 μm => 0.000062m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000062;
+                    maxValue        0.000062;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model87 // diameter  87 μm => 0.000087m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 1;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000087;
+                    maxValue        0.000087;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model112 // diameter  112 μm => 0.000112m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000112;
+                    maxValue        0.000112;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model137 // diameter  137 μm => 0.000137m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000137;
+                    maxValue        0.000137;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model175 // diameter  175 μm => 0.000175m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000175;
+                    maxValue        0.000175;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model225 // diameter  225 μm => 0.000225m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 2;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000225;
+                    maxValue        0.000225;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model375 // diameter  375 μm => 0.000375m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 1;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000375;
+                    maxValue        0.000375;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+
+        model750 // diameter  750 μm => 0.000750m
+        {
+            type            patchInjection;
+            parcelBasisType fixed;
+            patch           mouth;
+            U0              (4.0 0.0 0.0);
+            nParticle       1; //  1 particles = one parcel
+            parcelsPerSecond 1;
+            sizeDistribution
+            {
+                type uniform;
+                uniformDistribution
+                {
+                    minValue        0.000750;
+                    maxValue        0.000750;
+                }
+            }
+            flowRateProfile constant 1;
+            massTotal       0;
+            SOI 0.0;
+            duration 120.0;
+        }
+*/
+    }
+
+    dispersionModel none;
+
+    patchInteractionModel multiInteraction;
+
+    heatTransferModel RanzMarshall;
+
+    compositionModel singleMixtureFraction;
+
+    phaseChangeModel liquidEvaporation;
+
+    devolatilisationModel none;
+
+    surfaceReactionModel none;
+
+    stochasticCollisionModel none;
+
+    surfaceFilmModel none;
+
+    radiation       off;
+
+    multiInteractionCoeffs
+    {
+        oneInteractionOnly no;
+
+        model1 // for the walls: setting them all sticky
+        {
+            patchInteractionModel    standardWallInteraction;
+            standardWallInteractionCoeffs
+            {
+                type            stick;
+            }
+
+            writeToFile     yes;
+        }
+
+        model2 // for the recycling patches
+        {
+            patchInteractionModel    recycleInteraction;
+            recycleInteractionCoeffs
+            {
+                recyclePatches
+                (
+                    (intake1 exhaust_minX)
+                    (intake2 exhaust_minY)
+                    (intake3 exhaust_maxX)
+                    (intake4 exhaust_maxY)
+                );
+                recycleFraction 0.8;
+            }
+        }
+    }
+
+    RanzMarshallCoeffs
+    {
+        BirdCorrection  true;
+    }
+
+    singleMixtureFractionCoeffs
+    {
+        phases
+        (
+            gas
+            {
+            }
+            liquid
+            {
+                H2O   1;  // the liquid phase is 100% water
+            }
+            solid
+            {
+                C     1;  // the solid phase is 100% carbon
+/*
+it is possible to set multiple solid components; their ratio sum must be 1, for example :
+proteinA 0.7;
+proteinB 0.3;
+*/
+            }
+        );
+        YGasTot0        0;
+        YLiquidTot0     0.8;  // 80% of the droplet is water
+        YSolidTot0      0.2;  // 20% of the droplet is solid (protein nuclei)
+    }
+
+    liquidEvaporationCoeffs
+    {
+        enthalpyTransfer enthalpyDifference;
+
+        activeLiquids   ( H2O );
+    }
+}
+
+cloudFunctions
+{
+    // function to count particles hitting patches
+    // classified according to their size
+
+/*
+in the injection models set above we have
+3   μm ->  2 parcels per second
+6   μm -> 27 parcels per second
+12  μm ->  9 parcels per second
+20  μm ->  5 parcels per second
+28  μm ->  3 parcels per second
+36  μm ->  2 parcels per second
+45  μm ->  2 parcels per second
+
+therefore in the following "patchParticleHistogram1" we can set
+    nBins = 9
+    min = 0μm
+    max = 45μm
+in this ways the particles hitting the patches will be classified in the following ranges:
+    1) 0μm     to 5.01μm  <- the 3μm particles will be counted in this range
+    2) 5.01μm  to 10.01μm <- the 6μm particles will be counted in this range
+    3) 10.01μm to 15.01μm <- the 12μm particles will be counted in this range
+    4) 15.01μm to 20.01μm <- the 20μm particles will be counted in this range
+    5) 20.01μm to 25.01μm
+    6) 25.01μm to 30.01μm <- the 28μm particles will be counted in this range
+    7) 30.01μm to 35.01μm
+    8) 35.01μm to 40.01μm <- the 36μm particles will be counted in this range
+    9) 40.01μm to 45.01μm <- the 45μm particles will be counted in this range
+*/
+
+    patchParticleHistogram1
+    {
+        type            patchParticleHistogram;
+        patches
+        (
+            roof
+            floor
+            sideWall
+            humanBody
+            outlet
+        );
+        nBins            9;
+        min              0.0000001;
+        max              0.000045;
+        maxStoredParcels 100000000;
+    }
+
+    patchPostProcessing1
+    {
+        type            patchPostProcessing;
+        fields          (position origId d);
+        maxStoredParcels 100000000;
+        patches
+        (
+            roof
+            floor
+            sideWall
+            humanBody
+            outlet
+        );
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactions b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactions
new file mode 100644
index 00000000000..e6669a9f1cb
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/reactions
@@ -0,0 +1,10 @@
+species
+(
+    CO2
+    N2
+    O2
+    H2O
+);
+
+reactions
+{}
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermo.incompressiblePoly b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermo.incompressiblePoly
new file mode 100644
index 00000000000..3ff84b4fa2a
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermo.incompressiblePoly
@@ -0,0 +1,158 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      thermo.incompressiblePoly;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+/*
+in order to use the Boussinesq approximation for the density is sufficient to use the icoPolynominial model by setting its coefficients in the following way
+[>> BOUSSINESQ TO icoPolynomial converter]
+
+Rearranging Boussinesq equation in the form of rho = A + B * T
+rho = rho_0 - rho_0 * Beta * (T  - T_0)
+rho = rho_0 + rho_0 * Beta * T_0 - rho_0 * Beta * T
+
+By using the following values :
+        rho_0  = 1;
+        T_0  = 298;
+        Beta = 0.0034; // thermal expansion coefficient of air : At normal standard conditions of 25 degree Celsius or 298 Kelvin, Thermal expansion coefficient of air is said to be around 0.0034/K.
+
+A = rho_0 + rho_0 * Beta * T_0 = 1+1*0.0034*298 = 2.0132
+B = -rho_0 * Beta = -0.0034
+
+Therefore in the icoPolynomial subdictionaries in constant/thermo.incompressiblePoly we will set :
+
+    equationOfState
+    {
+        rhoCoeffs<8>   ( 2.0132 -0.0034 0 0 0 0 0 0 ); // rho = A + B * T
+    }
+*/
+
+N2
+{
+    specie
+    {
+        molWeight       28.0134;
+    }
+    equationOfState
+    {
+        rhoCoeffs<8>   ( 2.0132 -0.0034 0 0 0 0 0 0 );
+    }
+    thermodynamics
+    {
+        Hf              0;
+        Sf              0;
+        CpCoeffs<8>    ( 979.08 0.41787 -0.0011761 1.6742e-06 -7.2559e-10 0 0 0 );
+    }
+    transport
+    {
+        muCoeffs<8>    ( 1.5068e-06 6.1598e-08 -1.8188e-11 0 0 0 0 0 );
+        kappaCoeffs<8> ( 0.0031494 8.4997e-05 -1.2621e-08 0 0 0 0 0 );
+    }
+}
+
+O2
+{
+    specie
+    {
+        molWeight       31.9988;
+    }
+    equationOfState
+    {
+        rhoCoeffs<8>   ( 2.0132 -0.0034 0 0 0 0 0 0 );
+    }
+    thermodynamics
+    {
+        Hf              0;
+        Sf              0;
+        CpCoeffs<8>    ( 834.84 0.29297 -0.00014959 3.4143e-07 -2.2786e-10 0 0 0 );
+    }
+    transport
+    {
+        muCoeffs<8>    ( 1.5068e-06 6.1598e-08 -1.8188e-11 0 0 0 0 0 );
+        kappaCoeffs<8> ( 0.00016082 8.5301e-05 -1.4998e-08 0 0 0 0 0 );
+    }
+}
+
+H2O
+{
+    specie
+    {
+        molWeight       18.0153;
+    }
+    equationOfState
+    {
+        rhoCoeffs<8>   ( 2.0132 -0.0034 0 0 0 0 0 0 );
+    }
+    thermodynamics
+    {
+        Hf              -13423000;
+        Sf              10482;
+        CpCoeffs<8>    ( 1563.1 1.604 -0.0029334 3.2168e-06 -1.1571e-09 0 0 0 );
+    }
+    transport
+    {
+        muCoeffs<8>    ( 1.5068e-06 6.1598e-08 -1.8188e-11 0 0 0 0 0 );
+        kappaCoeffs<8> ( 0.0037972 0.00015336 -1.1859e-08 0 0 0 0 0 );
+    }
+}
+
+CO2
+{
+    specie
+    {
+        molWeight       44.01;
+    }
+    // to be updated: following CO2 coefficients taken from 02 subdictionary
+    equationOfState
+    {
+        rhoCoeffs<8>   ( 2.0132 -0.0034 0 0 0 0 0 0 );
+    }
+    thermodynamics
+    {
+        Hf              0;
+        Sf              0;
+        CpCoeffs<8>    ( 834.84 0.29297 -0.00014959 3.4143e-07 -2.2786e-10 0 0 0 );
+    }
+    transport
+    {
+        muCoeffs<8>    ( 1.5068e-06 6.1598e-08 -1.8188e-11 0 0 0 0 0 );
+        kappaCoeffs<8> ( 0.00016082 8.5301e-05 -1.4998e-08 0 0 0 0 0 );
+    }
+}
+
+air
+{
+    specie
+    {
+        molWeight       28.85;
+    }
+    equationOfState
+    {
+        rhoCoeffs<8>   ( 2.0132 -0.0034 0 0 0 0 0 0 );
+    }
+    thermodynamics
+    {
+        Hf              0;
+        Sf              0;
+        CpCoeffs<8>    ( 948.76 0.39171 -0.00095999 1.393e-06 -6.2029e-10 0 0 0 );
+    }
+    transport
+    {
+        muCoeffs<8>    ( 1.5061e-06 6.16e-08 -1.819e-11 0 0 0 0 0 );
+        kappaCoeffs<8> ( 0.0025219 8.506e-05 -1.312e-08 0 0 0 0 0 );
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermophysicalProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermophysicalProperties
new file mode 100644
index 00000000000..b5ad6f3b00a
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/thermophysicalProperties
@@ -0,0 +1,59 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      thermophysicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType
+{
+    type            heRhoThermo;
+    mixture         reactingMixture;
+    transport       polynomial;
+    thermo          hPolynomial;
+    energy          sensibleEnthalpy;
+    equationOfState icoPolynomial;
+    // the coefficients of the icoPolynomial model are set to follow
+    // the Boussinesq approximation; please inspect the
+    // "thermo.incompressiblePoly" file for details
+    specie          specie;
+}
+
+dpdt no;
+
+chemistryReader foamChemistryReader;
+
+foamChemistryFile "<constant>/reactions";
+
+foamChemistryThermoFile "<constant>/thermo.incompressiblePoly";
+
+liquids
+{
+    H2O;
+}
+
+solids
+{
+    C
+    {
+        rho             2010;
+        Cp              710;
+        kappa           0.04;
+        Hf              0;
+        emissivity      1.0;
+    }
+}
+
+inertSpecie     N2;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/turbulenceProperties b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/turbulenceProperties
new file mode 100644
index 00000000000..475f41de287
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/constant/turbulenceProperties
@@ -0,0 +1,35 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType      LES;
+
+LES
+{
+    LESModel        kEqn;
+
+    turbulence      on;
+    printCoeffs     on;
+
+    delta           cubeRootVol;
+
+    cubeRootVolCoeffs
+    {
+        deltaCoeff      1;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/controlDict b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/controlDict
new file mode 100644
index 00000000000..b87c0325e34
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/controlDict
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     reactingParcelFoam;
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         0.5;
+
+deltaT          1e-6;
+
+writeControl    adjustable;
+
+writeInterval   0.2;
+
+purgeWrite      5;
+
+writeFormat     binary;
+
+writePrecision  8;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   8;
+
+runTimeModifiable true;
+
+adjustTimeStep  yes;
+
+maxCo           1.0;
+
+maxDeltaT       1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/decomposeParDict b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/decomposeParDict
new file mode 100644
index 00000000000..3794d173496
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/decomposeParDict
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 10;
+
+method             scotch;
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSchemes b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSchemes
new file mode 100644
index 00000000000..cdf20576847
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSchemes
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         Euler;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+}
+
+divSchemes
+{
+    default         Gauss upwind;
+
+    div(phi,K)      Gauss linear;
+    div(B)          Gauss linear;
+    div(U)          Gauss linear;
+    div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
+}
+
+laplacianSchemes
+{
+    default         Gauss linear corrected;
+}
+
+interpolationSchemes
+{
+    default         linear;
+}
+
+snGradSchemes
+{
+    default         corrected;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSolution b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSolution
new file mode 100644
index 00000000000..b26f80c17d1
--- /dev/null
+++ b/tutorials/lagrangian/reactingParcelFoam/airRecirculationRoom/transient/system/fvSolution
@@ -0,0 +1,107 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2011                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    rho
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-05;
+        relTol          0.1;
+    }
+
+    rhoFinal
+    {
+        $rho;
+        tolerance       1e-05;
+        relTol          0;
+    }
+
+    "(U|k)"
+    {
+        solver          smoothSolver;
+        smoother        symGaussSeidel;
+        tolerance       1e-06;
+        relTol          0.1;
+    }
+
+    "(U|k)Final"
+    {
+        $U;
+        tolerance       1e-06;
+        relTol          0;
+    }
+
+    p_rgh
+    {
+        solver          GAMG;
+        tolerance       0;
+        relTol          0.1;
+        smoother        GaussSeidel;
+    }
+
+    p_rghFinal
+    {
+        $p_rgh;
+        tolerance       1e-06;
+        relTol          0;
+    }
+
+    Phi
+    {
+        $p_rgh;
+    }
+
+    "(Yi|O2|N2|H2O|CO2)"
+    {
+        solver          PBiCGStab;
+        preconditioner  DILU;
+        tolerance       1e-6;
+        relTol          0;
+    }
+
+    h
+    {
+        $Yi;
+        relTol          0.1;
+    }
+
+    hFinal
+    {
+        $Yi;
+    }
+}
+
+PIMPLE
+{
+    transonic       no;
+    nOuterCorrectors 1;
+    nCorrectors      2;
+    nNonOrthogonalCorrectors 0;
+    momentumPredictor yes;
+}
+
+relaxationFactors
+{
+    equations
+    {
+        ".*Final"       1;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/resources/geometry/roomRecirculation.stl.gz b/tutorials/resources/geometry/roomRecirculation.stl.gz
new file mode 100644
index 0000000000000000000000000000000000000000..a9e8a74a6c87a5534c4473e35469b5811e6d5486
GIT binary patch
literal 1248
zcmV<61Rwh!iwFoxHEmx219ER~ZC_GlV`*|@b!=gDX>V>Wb98I~-JHvA+b|GC_xTF#
z3mcLx$L+R1(RNh`wSpM6t-_DO{rjqEkVaHRaW3yr6K4@vuxOG;!+CM2Q?uJ{vhCqq
zeXo~yS@uwUtIye?Iqs`nme2F&zxrLCXEW!z=v=mqo6EUAX1k{O(OzWP&-!?-ui2v8
z%DG&+KQi2I8P=|tuO;p3!{&L!?Wd>dk6^$k^hSkJ2y7Qmq5W|BBOP~7|FdJ$JgAUy
zh8Fysog1AA``VR~c8TP}85K%F(C(%wlwdouu7Fi0ieZ%k-#7+$-XzTs{8UL8R^E1#
zVek(t8pG1P(S!l*4I^0HWAtu|LeCutmLc+zn3RIkTM0W;WD1~}Krxgc1|dG<!qB@>
zhh8EI=rctr^lmhv9!u|!&}K7aV$FEbPGp2R41$Qt>F++0f{Nc1i~$v*+Y*NLzi(!F
z@%l#RGLD{c3eH2+qL+vQ`b<d_hP$7V!q}*yDHJC4!V;!{8Hqv`jV7XiM+8`GtsP0E
zr9hIQH!chQ&S~_F>je^pcuUD~9)-h-#&BB>14=>Lc?1(JXhc8@%1!7;G(02)*G8-a
zo>j*vSj|Jf+$ORTxbJPzhekK3dS0NB?aH(p_$USK0uRtg2!}<$a4+d^nmQLjcqp39
zP&*@vp+~`=5k+T{Og(az1fF#Z#%B}*D%+@Lu;@6^QYNUGFp+8z)?E>*-N<`0lZFyB
zdSnVL{fJg`V8$|DF>rD%xYa|=gb2HN&k3VoRWo3E4y6}Q!KssOr?pEHbO&eS&@3K3
zL9LRSMRN}*J^+IwBKvk;k1m_SizW|4Q_SCYfqq!8USF2o9~o-5nCA<mUBADTP(mCE
zeu2R;bce;p&~G=2!I6-^2Xac87MTUB*kaWk?dxChsmjicS_gSz4NW)(Cv6ox9TZ>E
z<Xv)U&^fRYx>goS-bm`DBJzHwO7I5HhO$y@QV@8Uo!(Fx0x0}<p%lVUHe8P+ndVeM
zTquT#&v`PWL@#_1?PT(IPGcp66~2(pE1>vdCFJq4uMQuZ&95{e%zD+m9GIrRU9WRA
zWD<uklSVK&JzWa3sRKC<zRBWQ?5Uy{7V`xc1BJrasQ488*#Hw1g7q9P#bbd2s_jvF
zM)e~u46LOj#o+g{6H9|Yue#fp-u}{I5DiNi17Idd`)HKe2-d_Kpn%Q>)eP|z{A+--
zBv1^#r9{>YDi}!9p-GW=P59kv1#^kwBm2?*IunjG2&_Lvr-UpDCj;@&et%R^oBk6U
ze819vvLxP<NJ}A4L(hZ>)u0f&Op=ssDpT+e8nK`n7=nFk;dIcDCSAoM8e&kS$cTQV
zWf21Dy$LI!CE7$;aNLOc`dD2~=db(i;fo3(VR0e9q|->rJL%mkC_OQSVLAD%q)*TT
zBIuC{n}?<-ho4Y-@muFFa#CG|`UI{n&^Ze;T=^6GVpyfpz0??J8l}1lHA*-l^rQ^s
z)x%cGaYzS^wBEoxE-9z&rv6mzc4O{5mI*>#IP`@W+U`7v0S(f0FaV2%k|ZVxLvW-|
zf7uJC*h1%JFDSlv%?akpQ|AB^W1vt7Ug0EqNX;TeHJ}PosOV696Ja3bG*Jv9Z{jyE
Kxg9*|X8-^PP)SDs

literal 0
HcmV?d00001

-- 
GitLab