diff --git a/etc/codeTemplates/dynamicCode/fluidReactionThermo b/etc/codeTemplates/dynamicCode/fluidReactionThermo
new file mode 100644
index 0000000000..8c8875327d
--- /dev/null
+++ b/etc/codeTemplates/dynamicCode/fluidReactionThermo
@@ -0,0 +1,113 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object fluidThermo;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+type
+(
+ hePsiThermo
+ heRhoThermo
+);
+
+baseType
+(
+ hePsiThermo psiReactionThermo
+ heRhoThermo rhoReactionThermo
+);
+
+energy
+(
+ sensibleEnthalpy
+ absoluteEnthalpy
+ sensibleInternalEnergy
+ absoluteInternalEnergy
+);
+
+mixture
+(
+ singleComponentMixture
+ coefficientMultiComponentMixture
+ valueMultiComponentMixture
+ coefficientWilkeMultiComponentMixture
+);
+
+renameMixture
+(
+ pureMixture singleComponentMixture
+ multiComponentMixture coefficientMultiComponentMixture
+);
+
+transport
+(
+ const
+ icoTabulated
+ logPolynomial
+ polynomial
+ sutherland
+ tabulated
+ WLF
+);
+
+thermo
+(
+ eConst
+ eIcoTabulated
+ ePolynomial
+ ePower
+ eTabulated
+ hConst
+ hIcoTabulated
+ hPolynomial
+ hPower
+ hTabulated
+ janaf
+);
+
+equationOfState
+(
+ adiabaticPerfectFluid
+ Boussinesq
+ icoPolynomial
+ icoTabulated
+ incompressiblePerfectGas
+ linear
+ PengRobinsonGas
+ perfectFluid
+ perfectGas
+ rhoConst
+ rhoTabulated
+ rPolynomial
+);
+
+codeOptions
+#{
+EXE_INC = \
+ -I$(LIB_SRC)/transportModels/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
+ -I$(LIB_SRC)/finiteVolume/lnInclude
+#};
+
+codeLibs
+#{
+LIB_LIBS = \
+ -ltransportModels \
+ -lspecie \
+ -lfluidThermophysicalModels \
+ -lfiniteVolume
+#};
+
+
+// ************************************************************************* //
diff --git a/etc/codeTemplates/dynamicCode/fluidReactionThermo.C b/etc/codeTemplates/dynamicCode/fluidReactionThermo.C
new file mode 100644
index 0000000000..04218c2876
--- /dev/null
+++ b/etc/codeTemplates/dynamicCode/fluidReactionThermo.C
@@ -0,0 +1,93 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) YEAR OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "forThermo.H"
+#include "makeReactionThermo.H"
+
+#include "specie.H"
+
+#include "thermo.H"
+
+// EoS
+#include "${equationOfState}.H"
+
+// Thermo
+#include "${thermo}Thermo.H"
+#include "${energy}.H"
+
+// Transport
+#include "${transport}Transport.H"
+
+// psi/rho
+#include "${baseType}.H"
+#include "${type}.H"
+#include "psiReactionThermo.H"
+
+// Mixture
+#include "${mixture}.H"
+
+
+// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
+
+extern "C"
+{
+ // dynamicCode:
+ // SHA1 = ${SHA1sum}
+ //
+ // Unique function name that can be checked if the correct library version
+ // has been loaded
+ void ${typeName}_${SHA1sum}(bool load)
+ {
+ if (load)
+ {
+ // code that can be explicitly executed after loading
+ }
+ else
+ {
+ // code that can be explicitly executed before unloading
+ }
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ forThermo
+ (
+ ${transport}Transport,
+ ${energy},
+ ${thermo}Thermo,
+ ${equationOfState},
+ specie,
+ makeReactionThermo,
+ ${baseType},
+ ${type},
+ ${mixture}
+ );
+}
+
+// ************************************************************************* //
diff --git a/etc/codeTemplates/dynamicCode/fluidThermo.C b/etc/codeTemplates/dynamicCode/fluidThermo.C
index 2d82103fef..4c835e49f3 100644
--- a/etc/codeTemplates/dynamicCode/fluidThermo.C
+++ b/etc/codeTemplates/dynamicCode/fluidThermo.C
@@ -82,7 +82,7 @@ namespace Foam
${thermo}Thermo,
${equationOfState},
specie,
- makeThermos,
+ makeThermo,
${baseType},
${type},
${mixture}
diff --git a/etc/codeTemplates/dynamicCode/psiuReactionThermo.C b/etc/codeTemplates/dynamicCode/psiuReactionThermo.C
index af657745ed..947e99f18c 100644
--- a/etc/codeTemplates/dynamicCode/psiuReactionThermo.C
+++ b/etc/codeTemplates/dynamicCode/psiuReactionThermo.C
@@ -82,7 +82,7 @@ namespace Foam
${thermo}Thermo,
${equationOfState},
specie,
- makePsiuReactionThermos,
+ makePsiuReactionThermo,
${mixture}
);
}
diff --git a/src/thermophysicalModels/basic/basicThermo/compileThermo.C b/src/thermophysicalModels/basic/basicThermo/compileThermo.C
index cb9aaaaa7d..a1b178d7e1 100644
--- a/src/thermophysicalModels/basic/basicThermo/compileThermo.C
+++ b/src/thermophysicalModels/basic/basicThermo/compileThermo.C
@@ -70,11 +70,11 @@ void Foam::compileThermo::setFilterVariable
(
dynamicCode& dynCode,
const dynamicCodeContext& context,
- const word& name
+ const word& name,
+ const word& type
) const
{
const HashSet types(context.dict().lookup(name));
- const word type(thermoTypeDict_.lookup(name));
if (!types.found(type))
{
FatalIOErrorInFunction(thermoTypeDict_)
@@ -87,6 +87,50 @@ void Foam::compileThermo::setFilterVariable
}
+void Foam::compileThermo::setFilterVariable
+(
+ dynamicCode& dynCode,
+ const dynamicCodeContext& context,
+ const word& name
+) const
+{
+ setFilterVariable
+ (
+ dynCode,
+ context,
+ name,
+ thermoTypeDict_.lookup(name)
+ );
+}
+
+
+void Foam::compileThermo::setFilterRenamedVariable
+(
+ dynamicCode& dynCode,
+ const dynamicCodeContext& context,
+ const word& name,
+ const word& typeRenameMapName
+) const
+{
+ word type(thermoTypeDict_.lookup(name));
+
+ if (context.dict().found(typeRenameMapName))
+ {
+ const HashTable renameMap
+ (
+ context.dict().lookup(typeRenameMapName)
+ );
+
+ if (renameMap.found(type))
+ {
+ type = renameMap[type];
+ }
+ }
+
+ setFilterVariable(dynCode, context, name, type);
+}
+
+
void Foam::compileThermo::prepare
(
dynamicCode& dynCode,
@@ -95,14 +139,13 @@ void Foam::compileThermo::prepare
{
dynCode.setFilterVariable("typeName", codeName());
- const HashTable typeToBaseMap(context.dict().lookup("baseType"));
-
const word type(thermoTypeDict_.lookup("type"));
dynCode.setFilterVariable("type", type);
+ const HashTable typeToBaseMap(context.dict().lookup("baseType"));
dynCode.setFilterVariable("baseType", typeToBaseMap[type]);
- setFilterVariable(dynCode, context, "mixture");
+ setFilterRenamedVariable(dynCode, context, "mixture", "renameMixture");
setFilterVariable(dynCode, context, "transport");
setFilterVariable(dynCode, context, "thermo");
setFilterVariable(dynCode, context, "equationOfState");
diff --git a/src/thermophysicalModels/basic/basicThermo/compileThermo.H b/src/thermophysicalModels/basic/basicThermo/compileThermo.H
index e9112c3b6e..7eee5259f7 100644
--- a/src/thermophysicalModels/basic/basicThermo/compileThermo.H
+++ b/src/thermophysicalModels/basic/basicThermo/compileThermo.H
@@ -59,6 +59,14 @@ class compileThermo
const word& instantiatedThermoName
) const;
+ void setFilterVariable
+ (
+ dynamicCode& dynCode,
+ const dynamicCodeContext& context,
+ const word& name,
+ const word& type
+ ) const;
+
void setFilterVariable
(
dynamicCode& dynCode,
@@ -66,6 +74,14 @@ class compileThermo
const word& name
) const;
+ void setFilterRenamedVariable
+ (
+ dynamicCode& dynCode,
+ const dynamicCodeContext& context,
+ const word& name,
+ const word& typeRenameMapName
+ ) const;
+
//- Adapt the context for the current object
virtual void prepare(dynamicCode&, const dynamicCodeContext&) const;
diff --git a/src/thermophysicalModels/reactionThermo/makeReactionThermo.H b/src/thermophysicalModels/reactionThermo/makeReactionThermo.H
index d2d555b29b..96a23d7490 100644
--- a/src/thermophysicalModels/reactionThermo/makeReactionThermo.H
+++ b/src/thermophysicalModels/reactionThermo/makeReactionThermo.H
@@ -81,6 +81,19 @@ License
addReactionThermo(BaseReactionThermo, CThermo, Mixture, ThermoPhys)
+#define makePsiuReactionThermo(Mixture, ThermoPhys) \
+ \
+ defineReactionThermo \
+ ( \
+ psiuReactionThermo, \
+ heheuPsiThermo, \
+ Mixture, \
+ ThermoPhys \
+ ); \
+ \
+ addThermo(psiuReactionThermo, heheuPsiThermo, Mixture, ThermoPhys)
+
+
#define makePsiuReactionThermos(Mixture, ThermoPhys) \
\
defineReactionThermo \