diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
index 1ad2ab94623f1797d8bf11c940abd35681238cd6..a6535179931c6723446012a9c46767749f667ba7 100644
--- a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
+++ b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C
@@ -1928,7 +1928,7 @@ int main(int argc, char *argv[])
 
     forAll(regionSizes, regionI)
     {
-        Info<< regionI << "\t\t" << regionSizes[regionI] << nl;
+        Info<< regionI << '\t' << regionSizes[regionI] << nl;
     }
     Info<< endl;
 
@@ -1939,7 +1939,7 @@ int main(int argc, char *argv[])
         << "------\t----\t----" << endl;
     forAll(regionToZones, regionI)
     {
-        Info<< regionI << "\t\t" << flatOutput(regionToZones[regionI])
+        Info<< regionI << '\t' << flatOutput(regionToZones[regionI])
             << '\t'
             << regionNames[regionI] << nl;
     }
@@ -1987,8 +1987,8 @@ int main(int argc, char *argv[])
         const edge& e = interfaces[interI];
 
         Info<< interI
-            << "\t\t\t" << e[0] << "\t\t" << e[1]
-            << "\t\t" << interfaceSizes[interI] << nl;
+            << "\t\t" << e[0] << "\t" << e[1]
+            << "\t" << interfaceSizes[interI] << nl;
     }
     Info<< endl;
 
diff --git a/src/thermophysicalModels/basic/Make/files b/src/thermophysicalModels/basic/Make/files
index 83ee06f8bf1fa7bd777a1e2f035467e2d7356641..f23011032ce3b3b91f5690beb91e7fa9daa54e37 100644
--- a/src/thermophysicalModels/basic/Make/files
+++ b/src/thermophysicalModels/basic/Make/files
@@ -3,10 +3,12 @@ fluidThermo/fluidThermo.C
 
 psiThermo/psiThermo.C
 psiThermo/psiThermos.C
+psiThermo/psiZoneThermos.C
 
 rhoThermo/rhoThermo.C
 rhoThermo/rhoThermos.C
 rhoThermo/liquidThermo.C
+rhoThermo/rhoZoneThermos.C
 
 derivedFvPatchFields/fixedEnergy/fixedEnergyFvPatchScalarField.C
 derivedFvPatchFields/gradientEnergy/gradientEnergyFvPatchScalarField.C
diff --git a/src/thermophysicalModels/basic/mixtures/pureZoneMixture/pureZoneMixture.C b/src/thermophysicalModels/basic/mixtures/pureZoneMixture/pureZoneMixture.C
new file mode 100644
index 0000000000000000000000000000000000000000..e01eb41b80df115b50b6a1b549b40fca6463e3fc
--- /dev/null
+++ b/src/thermophysicalModels/basic/mixtures/pureZoneMixture/pureZoneMixture.C
@@ -0,0 +1,164 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021,2022 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "pureZoneMixture.H"
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+template<class ThermoType>
+const ThermoType& Foam::pureZoneMixture<ThermoType>::constructSpeciesData
+(
+    const dictionary& thermoDict
+)
+{
+    const auto& czs = mesh_.cellZones();
+
+    const auto* dictPtr = thermoDict.findDict("none");
+
+    speciesData_.setSize(dictPtr ? czs.size()+1 : czs.size());
+    forAll(czs, i)
+    {
+        speciesData_.set
+        (
+            i,
+            new ThermoType(thermoDict.subDict(czs[i].name()))
+        );
+    }
+
+    if (dictPtr)
+    {
+        speciesData_.set(czs.size(), new ThermoType(*dictPtr));
+    }
+
+    return speciesData_[0];
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+
+template<class ThermoType>
+Foam::pureZoneMixture<ThermoType>::pureZoneMixture
+(
+    const dictionary& thermoDict,
+    const fvMesh& mesh,
+    const word& phaseName
+)
+:
+    basicMixture(thermoDict, mesh, phaseName),
+    mesh_(mesh),
+    mixture_("mixture", constructSpeciesData(thermoDict.subDict("mixture")))
+{
+    // Cache index per cell. This is the cellZone except for unzoned cells
+    // which are last
+
+    const auto& czs = mesh_.cellZones();
+    zoneID_.setSize(mesh_.nCells(), czs.size());
+    for (const auto& cz : czs)
+    {
+        UIndirectList<label>(zoneID_, cz) = cz.index();
+    }
+
+    // Check if any unzoned cells but no 'none' specification
+    if (speciesData_.size() == czs.size())
+    {
+        const label noneCelli = zoneID_.find(czs.size());
+        if (noneCelli != -1)
+        {
+            FatalErrorInFunction << "Have unzoned cell " << noneCelli
+                << " at " << mesh_.cellCentres()[noneCelli]
+                << " but no \"none\" entry in \"mixture\""
+                << exit(FatalError);
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class ThermoType>
+const ThermoType& Foam::pureZoneMixture<ThermoType>::cellMixture
+(
+    const label celli
+) const
+{
+    mixture_ = speciesData_[zoneID_[celli]];
+    return mixture_;
+}
+
+
+template<class ThermoType>
+const ThermoType& Foam::pureZoneMixture<ThermoType>::patchFaceMixture
+(
+    const label patchi,
+    const label facei
+) const
+{
+    const label celli = mesh_.boundary()[patchi].faceCells()[facei];
+    mixture_ = speciesData_[zoneID_[celli]];
+    return mixture_;
+}
+
+
+template<class ThermoType>
+const ThermoType& Foam::pureZoneMixture<ThermoType>::cellVolMixture
+(
+    const scalar p,
+    const scalar T,
+    const label celli
+) const
+{
+    // (per zone) constant density
+    return this->cellMixture(celli);
+}
+
+
+template<class ThermoType>
+const ThermoType& Foam::pureZoneMixture<ThermoType>::
+patchFaceVolMixture
+(
+    const scalar p,
+    const scalar T,
+    const label patchi,
+    const label facei
+) const
+{
+    return this->patchFaceMixture(patchi, facei);
+}
+
+
+template<class ThermoType>
+void Foam::pureZoneMixture<ThermoType>::read
+(
+    const dictionary& thermoDict
+)
+{
+    constructSpeciesData(thermoDict);
+}
+
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/basic/mixtures/pureZoneMixture/pureZoneMixture.H b/src/thermophysicalModels/basic/mixtures/pureZoneMixture/pureZoneMixture.H
new file mode 100644
index 0000000000000000000000000000000000000000..8c19cc858e50ac0a9ae0f804f33a4e7cabe28645
--- /dev/null
+++ b/src/thermophysicalModels/basic/mixtures/pureZoneMixture/pureZoneMixture.H
@@ -0,0 +1,195 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021,2022 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::pureZoneMixture
+
+Description
+    Version of pureMixture that uses different mixtures for different
+    cellZones.
+    Every cellZone has to provide an entry for its mixture. A reserved
+    entry 'none' is for all unzoned cells.
+
+    Example of the zone based mixture specification:
+    \verbatim
+    mixture
+    {
+        solid1
+        {
+            specie
+            {
+                molWeight   50;
+            }
+
+            transport
+            {
+                kappa   80;
+            }
+
+            thermodynamics
+            {
+                Hf      0;
+                Cp      450;
+            }
+
+            equationOfState
+            {
+                rho     8000;
+            }
+        }
+        solid2
+        {
+            //- Start off from 'solid1' properties
+            ${solid1}
+
+            //- Selectively overwrite properties
+            transport
+            {
+                kappa   8;
+            }
+        }
+    }
+    \endverbatim
+
+
+SourceFiles
+    pureZoneMixture.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef pureZoneMixture_H
+#define pureZoneMixture_H
+
+#include "basicMixture.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                      Class pureZoneMixture Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class ThermoType>
+class pureZoneMixture
+:
+    public basicMixture
+{
+    // Private data
+
+        const fvMesh& mesh_;
+
+        //- Inverse zone info
+        labelList zoneID_;
+
+        //- Species data
+        PtrList<ThermoType> speciesData_;
+
+        //- Temporary storage for the cell/face mixture thermo data
+        mutable ThermoType mixture_;
+
+
+    // Private Member Functions
+
+        //- Construct the species data from the given dictionary and return the
+        //  data for the first specie to initialise the mixture thermo data
+        const ThermoType& constructSpeciesData(const dictionary& thermoDict);
+
+        //- No copy construct
+        pureZoneMixture(const pureZoneMixture<ThermoType>&) = delete;
+
+
+public:
+
+    //- The type of thermodynamics this mixture is instantiated for
+    typedef ThermoType thermoType;
+
+
+    // Constructors
+
+        //- Construct from dictionary, mesh and phase name
+        pureZoneMixture
+        (
+            const dictionary& thermoDict,
+            const fvMesh& mesh,
+            const word& phaseName
+        );
+
+
+    //- Destructor
+    virtual ~pureZoneMixture() = default;
+
+
+    // Member functions
+
+        //- Return the instantiated type name
+        static word typeName()
+        {
+            return "pureZoneMixture<" + ThermoType::typeName() + '>';
+        }
+
+        const ThermoType& cellMixture(const label celli) const;
+
+        const ThermoType& patchFaceMixture
+        (
+            const label patchi,
+            const label facei
+        ) const;
+
+        const ThermoType& cellVolMixture
+        (
+            const scalar p,
+            const scalar T,
+            const label celli
+        ) const;
+
+        const ThermoType& patchFaceVolMixture
+        (
+            const scalar p,
+            const scalar T,
+            const label patchi,
+            const label facei
+        ) const;
+
+        //- Read dictionary
+        void read(const dictionary&);
+};
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+    #include "pureZoneMixture.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/basic/psiThermo/psiZoneThermos.C b/src/thermophysicalModels/basic/psiThermo/psiZoneThermos.C
new file mode 100644
index 0000000000000000000000000000000000000000..8e2b3ca0bba3ebd665d3a8ee78ef8a516bb48f09
--- /dev/null
+++ b/src/thermophysicalModels/basic/psiThermo/psiZoneThermos.C
@@ -0,0 +1,226 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021,2022 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "psiThermo.H"
+#include "makeThermo.H"
+
+#include "specie.H"
+#include "perfectGas.H"
+#include "PengRobinsonGas.H"
+#include "hConstThermo.H"
+#include "eConstThermo.H"
+#include "janafThermo.H"
+#include "sensibleEnthalpy.H"
+#include "sensibleInternalEnergy.H"
+#include "thermo.H"
+
+#include "constTransport.H"
+#include "sutherlandTransport.H"
+
+#include "hPolynomialThermo.H"
+#include "polynomialTransport.H"
+
+#include "hePsiThermo.H"
+#include "pureZoneMixture.H"
+
+#include "thermoPhysicsTypes.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/* * * * * * * * * * * * * * * * * Enthalpy-based * * * * * * * * * * * * * */
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+// Note: pureZoneMixture copies mixture model for every evaluation of cell
+//       so can become expensive for complex models (e.g. with tables)
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    PengRobinsonGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    PengRobinsonGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    PengRobinsonGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    PengRobinsonGas,
+    specie
+);
+
+
+/* * * * * * * * * * * * * * Internal-energy-based * * * * * * * * * * * * * */
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    janafThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    psiThermo,
+    hePsiThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    janafThermo,
+    PengRobinsonGas,
+    specie
+);
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/basic/rhoThermo/rhoZoneThermos.C b/src/thermophysicalModels/basic/rhoThermo/rhoZoneThermos.C
new file mode 100644
index 0000000000000000000000000000000000000000..81b3fb7c3af1f34e6449347cbab181529f644cb1
--- /dev/null
+++ b/src/thermophysicalModels/basic/rhoThermo/rhoZoneThermos.C
@@ -0,0 +1,717 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021,2022 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "rhoThermo.H"
+#include "makeThermo.H"
+
+#include "specie.H"
+#include "perfectGas.H"
+#include "incompressiblePerfectGas.H"
+#include "Boussinesq.H"
+#include "rhoConst.H"
+#include "rPolynomial.H"
+#include "perfectFluid.H"
+#include "PengRobinsonGas.H"
+#include "adiabaticPerfectFluid.H"
+#include "icoTabulated.H"
+
+#include "hConstThermo.H"
+#include "eConstThermo.H"
+#include "janafThermo.H"
+#include "hTabulatedThermo.H"
+#include "sensibleEnthalpy.H"
+#include "sensibleInternalEnergy.H"
+#include "thermo.H"
+
+#include "constTransport.H"
+#include "sutherlandTransport.H"
+#include "WLFTransport.H"
+
+#include "icoPolynomial.H"
+#include "hPolynomialThermo.H"
+#include "polynomialTransport.H"
+#include "tabulatedTransport.H"
+
+#include "heRhoThermo.H"
+#include "pureZoneMixture.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/* * * * * * * * * * * * * * * Private Static Data * * * * * * * * * * * * * */
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+// Note: pureZoneMixture copies mixture model for every evaluation of cell
+//       so can become expensive for complex models (e.g. with tables)
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    tabulatedTransport,
+    sensibleEnthalpy,
+    hTabulatedThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    rhoConst,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    perfectFluid,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    rPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    tabulatedTransport,
+    sensibleEnthalpy,
+    hTabulatedThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    adiabaticPerfectFluid,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    icoPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    tabulatedTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    icoPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    rPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    incompressiblePerfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    incompressiblePerfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    incompressiblePerfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    tabulatedTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    Boussinesq,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    Boussinesq,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    Boussinesq,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    PengRobinsonGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    PengRobinsonGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    janafThermo,
+    PengRobinsonGas,
+    specie
+);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    tabulatedTransport,
+    sensibleInternalEnergy,
+    hTabulatedThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    janafThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    janafThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    rhoConst,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    rhoConst,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    perfectFluid,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    rPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    perfectFluid,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    rPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    adiabaticPerfectFluid,
+    specie
+);
+
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    adiabaticPerfectFluid,
+    specie
+);
+
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleInternalEnergy,
+    hPolynomialThermo,
+    icoPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    tabulatedTransport,
+    sensibleInternalEnergy,
+    hPolynomialThermo,
+    icoPolynomial,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleInternalEnergy,
+    hPolynomialThermo,
+    icoTabulated,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    incompressiblePerfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    incompressiblePerfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    janafThermo,
+    incompressiblePerfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    constTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    Boussinesq,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    hConstThermo,
+    Boussinesq,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    sutherlandTransport,
+    sensibleInternalEnergy,
+    janafThermo,
+    Boussinesq,
+    specie
+);
+
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    WLFTransport,
+    sensibleInternalEnergy,
+    eConstThermo,
+    rhoConst,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    perfectGas,
+    specie
+);
+
+makeThermos
+(
+    rhoThermo,
+    heRhoThermo,
+    pureZoneMixture,
+    polynomialTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    incompressiblePerfectGas,
+    specie
+);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/solidThermo/Make/files b/src/thermophysicalModels/solidThermo/Make/files
index b7e2eb623bcf9eb6d12009fab24c9653c40d5b35..ab4a311e7cd72ef616bbfb7837118cc0b3204cd4 100644
--- a/src/thermophysicalModels/solidThermo/Make/files
+++ b/src/thermophysicalModels/solidThermo/Make/files
@@ -4,4 +4,7 @@ solidThermo/solidThermos.C
 solidReactionThermo/solidReactionThermo.C
 solidReactionThermo/solidReactionThermos.C
 
+solidThermo/heZoneSolidThermos.C
+
+
 LIB = $(FOAM_LIBBIN)/libsolidThermo
diff --git a/src/thermophysicalModels/solidThermo/solidThermo/heZoneSolidThermos.C b/src/thermophysicalModels/solidThermo/solidThermo/heZoneSolidThermos.C
new file mode 100644
index 0000000000000000000000000000000000000000..c7db6f4d4e460473ad2661f5ed1cf8468f1be673
--- /dev/null
+++ b/src/thermophysicalModels/solidThermo/solidThermo/heZoneSolidThermos.C
@@ -0,0 +1,157 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021,2022 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "makeSolidThermo.H"
+#include "solidThermo.H"
+#include "pureZoneMixture.H"
+#include "heSolidThermo.H"
+
+#include "specie.H"
+#include "rhoConst.H"
+#include "icoPolynomial.H"
+#include "icoTabulated.H"
+#include "hConstThermo.H"
+#include "hPowerThermo.H"
+#include "hPolynomialThermo.H"
+#include "hTabulatedThermo.H"
+#include "constIsoSolidTransport.H"
+#include "constAnIsoSolidTransport.H"
+#include "exponentialSolidTransport.H"
+#include "polynomialSolidTransport.H"
+#include "tabulatedSolidTransport.H"
+#include "tabulatedAnIsoSolidTransport.H"
+#include "sensibleEnthalpy.H"
+#include "thermo.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/* * * * * * * * * * * * * * * * * Enthalpy-based * * * * * * * * * * * * * */
+
+makeSolidThermo
+(
+    solidThermo,
+    heSolidThermo,
+    pureZoneMixture,
+    constIsoSolidTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    rhoConst,
+    specie
+);
+
+// Note: pureZoneMixture copies mixture model for every evaluation of cell
+//       so can become expensive for complex models (e.g. with tables)
+
+makeSolidThermo
+(
+    solidThermo,
+    heSolidThermo,
+    pureZoneMixture,
+    constAnIsoSolidTransport,
+    sensibleEnthalpy,
+    hConstThermo,
+    rhoConst,
+    specie
+);
+
+makeSolidThermo
+(
+    solidThermo,
+    heSolidThermo,
+    pureZoneMixture,
+    exponentialSolidTransport,
+    sensibleEnthalpy,
+    hPowerThermo,
+    rhoConst,
+    specie
+);
+
+makeSolidThermo
+(
+    solidThermo,
+    heSolidThermo,
+    pureZoneMixture,
+    polynomialSolidTransport,
+    sensibleEnthalpy,
+    hPolynomialThermo,
+    icoPolynomial,
+    specie
+);
+
+makeSolidThermo
+(
+    solidThermo,
+    heSolidThermo,
+    pureZoneMixture,
+    tabulatedSolidTransport,
+    sensibleEnthalpy,
+    hTabulatedThermo,
+    icoPolynomial,
+    specie
+);
+
+makeSolidThermo
+(
+    solidThermo,
+    heSolidThermo,
+    pureZoneMixture,
+    tabulatedSolidTransport,
+    sensibleEnthalpy,
+    hTabulatedThermo,
+    icoTabulated,
+    specie
+);
+
+//- TBD. Needs clone
+//makeSolidThermo
+//(
+//    solidThermo,
+//    heSolidThermo,
+//    pureZoneMixture,
+//    tabulatedAnIsoSolidTransport,
+//    sensibleEnthalpy,
+//    hTabulatedThermo,
+//    icoPolynomial,
+//    specie
+//);
+
+//makeSolidThermoPhysicsType
+//(
+//    solidThermo,
+//    heSolidThermo,
+//    pureZoneMixture,
+//    hTransportThermoPoly8SolidThermoPhysics
+//);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //