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; } }