diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake b/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake
index db3b015506..6f26df52f3 100755
--- a/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake
@@ -9,6 +9,7 @@ wmake $targetType interfacialModels
wmake $targetType interfacialCompositionModels
wmake $targetType multiphaseCompressibleMomentumTransportModels
wmake $targetType multiphaseThermophysicalTransportModels
+wmake $targetType multiphaseReactions
multiphaseEulerFoam/Allwmake $targetType $*
wmake $targetType functionObjects
diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam/Make/options b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam/Make/options
index c122b6ca9b..74f515d235 100644
--- a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam/Make/options
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam/Make/options
@@ -18,6 +18,7 @@ EXE_LIBS = \
-leulerianInterfacialCompositionModels \
-lmultiphaseMomentumTransportModels \
-lmultiphaseThermophysicalTransportModels \
+ -lmultiphaseReactions \
-lthermophysicalTransportModels \
-lfiniteVolume \
-lfvOptions \
diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/Make/files b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/Make/files
new file mode 100644
index 0000000000..8d89c2db04
--- /dev/null
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/Make/files
@@ -0,0 +1,3 @@
+phaseSurfaceArrheniusReactionRate/makephaseSurfaceArrheniusReactions.C
+
+LIB = $(FOAM_LIBBIN)/libmultiphaseReactions
diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/Make/options b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/Make/options
new file mode 100644
index 0000000000..f614671d4e
--- /dev/null
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/Make/options
@@ -0,0 +1,15 @@
+EXE_INC = \
+ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I../phaseSystems/lnInclude
+
+LIB_LIBS = \
+ -lspecie \
+ -lfluidThermophysicalModels \
+ -lreactionThermophysicalModels \
+ -lchemistryModel \
+ -lfiniteVolume \
+ -lphaseSystem
diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/makephaseSurfaceArrheniusReactions.C b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/makephaseSurfaceArrheniusReactions.C
new file mode 100644
index 0000000000..dabd075057
--- /dev/null
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/makephaseSurfaceArrheniusReactions.C
@@ -0,0 +1,44 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2021 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 "makeReaction.H"
+
+#include "phaseSurfaceArrheniusReactionRate.H"
+
+#include "forCommonGases.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ forCommonGases
+ (
+ makeGeneralReaction,
+ IrreversibleReaction,
+ phaseSurfaceArrheniusReactionRate
+ )
+}
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/phaseSurfaceArrheniusReactionRate.H b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/phaseSurfaceArrheniusReactionRate.H
new file mode 100644
index 0000000000..94988cae37
--- /dev/null
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/phaseSurfaceArrheniusReactionRate.H
@@ -0,0 +1,149 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2021 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 .
+
+Class
+ Foam::phaseSurfaceArrheniusReactionRate
+
+Description
+ A modified Arrhenius reaction rate given by:
+
+ k = (A * T^beta * exp(-Ta/T))*a
+
+ Where a is the phase surface area per unit volume. The name of the phase is
+ specified by the user.
+
+SourceFiles
+ phaseSurfaceArrheniusReactionRateI.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef phaseSurfaceArrheniusReactionRate_H
+#define phaseSurfaceArrheniusReactionRate_H
+
+#include "ArrheniusReactionRate.H"
+#include "speciesTable.H"
+#include "volFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of friend functions and operators
+
+class phaseSurfaceArrheniusReactionRate;
+
+Ostream& operator<<(Ostream&, const phaseSurfaceArrheniusReactionRate&);
+
+/*---------------------------------------------------------------------------*\
+ Class phaseSurfaceArrheniusReactionRate Declaration
+\*---------------------------------------------------------------------------*/
+
+class phaseSurfaceArrheniusReactionRate
+:
+ public ArrheniusReactionRate
+{
+ // Private Data
+
+ //- Name of the phase
+ const word phaseName_;
+
+ //- Reference to the object registry
+ const objectRegistry& ob_;
+
+ //- Surface area per unit volume field
+ mutable tmp tA_;
+
+
+public:
+
+ // Constructors
+
+ //- Construct from dictionary
+ inline phaseSurfaceArrheniusReactionRate
+ (
+ const speciesTable& species,
+ const objectRegistry& ob,
+ const dictionary& dict
+ );
+
+
+ // Member Functions
+
+ //- Return the type name
+ static word type()
+ {
+ return "phaseSurfaceArrhenius";
+ }
+
+ //- Pre-evaluation hook
+ inline void preEvaluate() const;
+
+ //- Post-evaluation hook
+ inline void postEvaluate() const;
+
+ //- Evaluate the rate
+ inline scalar operator()
+ (
+ const scalar p,
+ const scalar T,
+ const scalarField& c,
+ const label li
+ ) const;
+
+ //- Evaluate the derivative
+ inline scalar ddT
+ (
+ const scalar p,
+ const scalar T,
+ const scalarField& c,
+ const label li
+ ) const;
+
+ //- Write to stream
+ inline void write(Ostream& os) const;
+
+
+ // Ostream Operator
+
+ inline friend Ostream& operator<<
+ (
+ Ostream&,
+ const phaseSurfaceArrheniusReactionRate&
+ );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "phaseSurfaceArrheniusReactionRateI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/phaseSurfaceArrheniusReactionRateI.H b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/phaseSurfaceArrheniusReactionRateI.H
new file mode 100644
index 0000000000..5f7e8b78bf
--- /dev/null
+++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseReactions/phaseSurfaceArrheniusReactionRate/phaseSurfaceArrheniusReactionRateI.H
@@ -0,0 +1,110 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2021 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 "phaseSurfaceArrheniusReactionRate.H"
+#include "phaseSystem.H"
+#include "diameterModel.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+inline Foam::phaseSurfaceArrheniusReactionRate::
+phaseSurfaceArrheniusReactionRate
+(
+ const speciesTable& species,
+ const objectRegistry& ob,
+ const dictionary& dict
+)
+:
+ ArrheniusReactionRate(species, dict),
+ phaseName_(dict.lookup("phase")),
+ ob_(ob),
+ tA_(nullptr)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+inline void Foam::phaseSurfaceArrheniusReactionRate::preEvaluate() const
+{
+ ArrheniusReactionRate::preEvaluate();
+
+ const phaseModel& phase =
+ ob_.lookupObject(IOobject::groupName("alpha", phaseName_));
+
+ tA_ = phase.dPtr()->a();
+}
+
+
+inline void Foam::phaseSurfaceArrheniusReactionRate::postEvaluate() const
+{
+ ArrheniusReactionRate::postEvaluate();
+
+ tA_.clear();
+}
+
+
+inline Foam::scalar Foam::phaseSurfaceArrheniusReactionRate::operator()
+(
+ const scalar p,
+ const scalar T,
+ const scalarField& c,
+ const label li
+) const
+{
+ return ArrheniusReactionRate::operator()(p, T, c, li)*tA_()[li];
+}
+
+
+inline Foam::scalar Foam::phaseSurfaceArrheniusReactionRate::ddT
+(
+ const scalar p,
+ const scalar T,
+ const scalarField& c,
+ const label li
+) const
+{
+ return ArrheniusReactionRate::ddT(p, T, c, li)*tA_()[li];
+}
+
+
+inline void Foam::phaseSurfaceArrheniusReactionRate::write(Ostream& os) const
+{
+ ArrheniusReactionRate::write(os);
+ writeEntry(os, "phase", phaseName_);
+}
+
+
+inline Foam::Ostream& Foam::operator<<
+(
+ Ostream& os,
+ const phaseSurfaceArrheniusReactionRate& arr
+)
+{
+ arr.write(os);
+ return os;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.particles b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.particles
index 8031abf2e2..fd0eb6b303 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.particles
+++ b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.particles
@@ -36,10 +36,9 @@ boundaryField
wall
{
type fixedProfile;
- profile table;
-
- profileCoeffs
+ profile
{
+ type tableFile;
format csv; // Input format
nHeaderLine 0; // Number of header lines
refColumn 0; // Reference column index
diff --git a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.vapor b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.vapor
index 93f6da69a9..8e98f2267d 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.vapor
+++ b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesis/0/T.vapor
@@ -36,10 +36,9 @@ boundaryField
wall
{
type fixedProfile;
- profile table;
-
- profileCoeffs
+ profile
{
+ type tableFile;
format csv; // Input format
nHeaderLine 0; // Number of header lines
refColumn 0; // Reference column index
diff --git a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.particles b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.particles
index 8031abf2e2..fd0eb6b303 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.particles
+++ b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.particles
@@ -36,10 +36,9 @@ boundaryField
wall
{
type fixedProfile;
- profile table;
-
- profileCoeffs
+ profile
{
+ type tableFile;
format csv; // Input format
nHeaderLine 0; // Number of header lines
refColumn 0; // Reference column index
diff --git a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.vapor b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.vapor
index 93f6da69a9..8e98f2267d 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.vapor
+++ b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/0/T.vapor
@@ -36,10 +36,9 @@ boundaryField
wall
{
type fixedProfile;
- profile table;
-
- profileCoeffs
+ profile
{
+ type tableFile;
format csv; // Input format
nHeaderLine 0; // Number of header lines
refColumn 0; // Reference column index
diff --git a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/phaseProperties b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/phaseProperties
index 2dea3a65cd..d03acce77e 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/phaseProperties
+++ b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/phaseProperties
@@ -78,8 +78,6 @@ particles
f28{dSph 7.873E-06; value 0.0; kappa 1.5E+10; Df 1.8; alphaC 1;}
f29{dSph 1.136E-05; value 0.0; kappa 1.5E+10; Df 1.8; alphaC 1;}
);
-
- storeA on;
}
Sct 1.0;
diff --git a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/reactions.vapor b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/reactions.vapor
index fa8e426bbb..27478c7a0e 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/reactions.vapor
+++ b/tutorials/multiphase/multiphaseEulerFoam/laminar/titaniaSynthesisSurface/constant/reactions.vapor
@@ -40,7 +40,7 @@ reactions
oxidationAtSurface
{
- type irreversibleSurfaceArrhenius;
+ type irreversiblePhaseSurfaceArrhenius;
reaction "O2^0 + TiCl4 = TiO2_s + 2Cl2";
@@ -48,7 +48,7 @@ reactions
beta 0.0;
Ta 8993;
- a a.particles;
+ phase particles;
}
}