diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files
index 3cf1a5d3c..16066c175 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/Make/files
@@ -74,4 +74,7 @@ wallDampingModels/linear/linearWallDamping.C
wallDampingModels/cosine/cosineWallDamping.C
wallDampingModels/sine/sineWallDamping.C
+phaseTransferModels/phaseTransferModel/phaseTransferModel.C
+phaseTransferModels/phaseTransferModel/newPhaseTransferModel.C
+
LIB = $(FOAM_LIBBIN)/libreactingEulerianInterfacialModels
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/newPhaseTransferModel.C b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/newPhaseTransferModel.C
new file mode 100644
index 000000000..e2949076f
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/newPhaseTransferModel.C
@@ -0,0 +1,59 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2018 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 "phaseTransferModel.H"
+#include "phasePair.H"
+
+// * * * * * * * * * * * * * * * * Selector * * * * * * * * * * * * * * * * //
+
+Foam::autoPtr Foam::phaseTransferModel::New
+(
+ const dictionary& dict,
+ const phasePair& pair
+)
+{
+ word phaseTransferModelType(dict.lookup("type"));
+
+ Info<< "Selecting phaseTransferModel for "
+ << pair << ": " << phaseTransferModelType << endl;
+
+ dictionaryConstructorTable::iterator cstrIter =
+ dictionaryConstructorTablePtr_->find(phaseTransferModelType);
+
+ if (cstrIter == dictionaryConstructorTablePtr_->end())
+ {
+ FatalErrorInFunction
+ << "Unknown phaseTransferModelType type "
+ << phaseTransferModelType << endl << endl
+ << "Valid phaseTransferModel types are : " << endl
+ << dictionaryConstructorTablePtr_->sortedToc()
+ << exit(FatalError);
+ }
+
+ return cstrIter()(dict, pair);
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/phaseTransferModel.C b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/phaseTransferModel.C
new file mode 100644
index 000000000..54a9b20b5
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/phaseTransferModel.C
@@ -0,0 +1,61 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2018 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 "phaseTransferModel.H"
+#include "phasePair.H"
+#include "BlendedInterfacialModel.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineTypeNameAndDebug(phaseTransferModel, 0);
+ defineBlendedInterfacialModelTypeNameAndDebug(phaseTransferModel, 0);
+ defineRunTimeSelectionTable(phaseTransferModel, dictionary);
+}
+
+const Foam::dimensionSet Foam::phaseTransferModel::dimDmdt =
+ Foam::dimDensity/Foam::dimTime;
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::phaseTransferModel::phaseTransferModel
+(
+ const dictionary& dict,
+ const phasePair& pair
+)
+:
+ pair_(pair)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::phaseTransferModel::~phaseTransferModel()
+{}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/phaseTransferModel.H b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/phaseTransferModel.H
new file mode 100644
index 000000000..ff24b0397
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialModels/phaseTransferModels/phaseTransferModel/phaseTransferModel.H
@@ -0,0 +1,127 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2018 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::phaseTransferModel
+
+Description
+
+SourceFiles
+ phaseTransferModel.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef phaseTransferModel_H
+#define phaseTransferModel_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "volFields.H"
+#include "dictionary.H"
+#include "runTimeSelectionTables.H"
+
+namespace Foam
+{
+
+class phasePair;
+
+/*---------------------------------------------------------------------------*\
+ Class phaseTransferModel Declaration
+\*---------------------------------------------------------------------------*/
+
+class phaseTransferModel
+{
+protected:
+
+ // Protected data
+
+ //- Phase pair
+ const phasePair& pair_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("phaseTransferModel");
+
+
+ // Declare runtime construction
+
+ declareRunTimeSelectionTable
+ (
+ autoPtr,
+ phaseTransferModel,
+ dictionary,
+ (
+ const dictionary& dict,
+ const phasePair& pair
+ ),
+ (dict, pair)
+ );
+
+
+ // Static data members
+
+ //- Mass transfer rate dimensions
+ static const dimensionSet dimDmdt;
+
+
+ // Constructors
+
+ //- Construct from a dictionary and a phase pair
+ phaseTransferModel
+ (
+ const dictionary& dict,
+ const phasePair& pair
+ );
+
+
+ //- Destructor
+ virtual ~phaseTransferModel();
+
+
+ // Selectors
+
+ static autoPtr New
+ (
+ const dictionary& dict,
+ const phasePair& pair
+ );
+
+
+ // Member Functions
+
+ //- The mass transfer rate
+ virtual tmp dmdt() const = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.C
index b567e3927..5f1b9463d 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.C
@@ -366,6 +366,14 @@ Foam::BlendedInterfacialModel::D() const
}
+template
+Foam::tmp
+Foam::BlendedInterfacialModel::dmdt() const
+{
+ return evaluate(&ModelType::dmdt, "dmdt", ModelType::dimDmdt, false);
+}
+
+
template
bool Foam::BlendedInterfacialModel::writeData(Ostream& os) const
{
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.H
index be3dc21bc..1c5e78ea9 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/BlendedInterfacialModel.H
@@ -190,6 +190,9 @@ public:
//- Return the blended diffusivity
tmp D() const;
+ //- Return the blended mass transfer rate
+ tmp dmdt() const;
+
//- Dummy write for regIOobject
bool writeData(Ostream& os) const;
};
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatAndMassTransferPhaseSystem/HeatAndMassTransferPhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatAndMassTransferPhaseSystem/HeatAndMassTransferPhaseSystem.C
deleted file mode 100644
index f6328ddaa..000000000
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatAndMassTransferPhaseSystem/HeatAndMassTransferPhaseSystem.C
+++ /dev/null
@@ -1,324 +0,0 @@
-/*---------------------------------------------------------------------------*\
- ========= |
- \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
- \\ / O peration |
- \\ / A nd | Copyright (C) 2015-2018 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 "HeatAndMassTransferPhaseSystem.H"
-
-#include "BlendedInterfacialModel.H"
-#include "heatTransferModel.H"
-#include "massTransferModel.H"
-
-#include "HashPtrTable.H"
-
-#include "fvcDiv.H"
-#include "fvmSup.H"
-#include "fvMatrix.H"
-#include "zeroGradientFvPatchFields.H"
-
-// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
-
-template
-Foam::HeatAndMassTransferPhaseSystem::
-HeatAndMassTransferPhaseSystem
-(
- const fvMesh& mesh
-)
-:
- BasePhaseSystem(mesh)
-{
- this->generatePairsAndSubModels
- (
- "heatTransfer",
- heatTransferModels_
- );
-
- this->generatePairsAndSubModels
- (
- "massTransfer",
- massTransferModels_
- );
-
- forAllConstIter
- (
- phaseSystem::phasePairTable,
- this->phasePairs_,
- phasePairIter
- )
- {
- const phasePair& pair(phasePairIter());
-
- if (pair.ordered())
- {
- continue;
- }
-
- if
- (
- heatTransferModels_.found(pair)
- && heatTransferModels_[pair][pair.first()].valid()
- && heatTransferModels_[pair][pair.second()].valid()
- )
- {
-
- volScalarField H1(heatTransferModels_[pair][pair.first()]->K());
- volScalarField H2(heatTransferModels_[pair][pair.second()]->K());
-
- Tf_.insert
- (
- pair,
- new volScalarField
- (
- IOobject
- (
- IOobject::groupName("Tf", pair.name()),
- this->mesh().time().timeName(),
- this->mesh(),
- IOobject::NO_READ,
- IOobject::AUTO_WRITE
- ),
- (
- H1*pair.phase1().thermo().T()
- + H2*pair.phase2().thermo().T()
- )
- /max
- (
- H1 + H2,
- dimensionedScalar
- (
- "small",
- heatTransferModel::dimK,
- small
- )
- ),
- zeroGradientFvPatchScalarField::typeName
- )
- );
-
- Tf_[pair]->correctBoundaryConditions();
- }
- }
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
-
-template
-Foam::HeatAndMassTransferPhaseSystem::
-~HeatAndMassTransferPhaseSystem()
-{}
-
-
-// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
-
-template
-Foam::autoPtr
-Foam::HeatAndMassTransferPhaseSystem::heatTransfer() const
-{
- autoPtr eqnsPtr
- (
- new phaseSystem::heatTransferTable()
- );
-
- phaseSystem::heatTransferTable& eqns = eqnsPtr();
-
- forAll(this->phaseModels_, phasei)
- {
- const phaseModel& phase = this->phaseModels_[phasei];
-
- eqns.insert
- (
- phase.name(),
- new fvScalarMatrix(phase.thermo().he(), dimEnergy/dimTime)
- );
- }
-
- // Heat transfer with the interface
- forAllConstIter
- (
- heatTransferModelTable,
- heatTransferModels_,
- heatTransferModelIter
- )
- {
- if
- (
- heatTransferModels_.found(heatTransferModelIter.key())
- )
- {
- const phasePair& pair
- (
- this->phasePairs_[heatTransferModelIter.key()]
- );
-
- const volScalarField& Tf(*Tf_[pair]);
-
- const volScalarField K1
- (
- heatTransferModelIter()[pair.first()]->K()
- );
- const volScalarField K2
- (
- heatTransferModelIter()[pair.second()]->K()
- );
- const volScalarField KEff
- (
- K1*K2
- /max
- (
- K1 + K2,
- dimensionedScalar("small", heatTransferModel::dimK, small)
- )
- );
-
- const volScalarField* K = &K1;
- const volScalarField* otherK = &K2;
-
- forAllConstIter(phasePair, pair, iter)
- {
- const phaseModel& phase = iter();
-
- const volScalarField& he(phase.thermo().he());
- volScalarField Cpv(phase.thermo().Cpv());
-
- *eqns[phase.name()] +=
- (*K)*(Tf - phase.thermo().T())
- + KEff/Cpv*he - fvm::Sp(KEff/Cpv, he);
-
- Swap(K, otherK);
- }
- }
- }
-
- return eqnsPtr;
-}
-
-template
-Foam::autoPtr
-Foam::HeatAndMassTransferPhaseSystem::massTransfer() const
-{
- // Create a mass transfer matrix for each species of each phase
- autoPtr eqnsPtr
- (
- new phaseSystem::massTransferTable()
- );
-
- phaseSystem::massTransferTable& eqns = eqnsPtr();
-
- forAll(this->phaseModels_, phasei)
- {
- const phaseModel& phase = this->phaseModels_[phasei];
-
- const PtrList& Yi = phase.Y();
-
- forAll(Yi, i)
- {
- eqns.insert
- (
- Yi[i].name(),
- new fvScalarMatrix(Yi[i], dimMass/dimTime)
- );
- }
- }
-
- return eqnsPtr;
-}
-
-
-template
-void Foam::HeatAndMassTransferPhaseSystem::correctThermo()
-{
- phaseSystem::correctThermo();
-
- forAllConstIter
- (
- phaseSystem::phasePairTable,
- this->phasePairs_,
- phasePairIter
- )
- {
- if
- (
- this->heatTransferModels_.found(phasePairIter.key())
- )
- {
- const phasePair& pair(phasePairIter());
-
- if (pair.ordered())
- {
- continue;
- }
-
- const phaseModel& phase1 = pair.phase1();
- const phaseModel& phase2 = pair.phase2();
-
- const volScalarField& T1(phase1.thermo().T());
- const volScalarField& T2(phase2.thermo().T());
-
- volScalarField& Tf(*this->Tf_[pair]);
-
- volScalarField H1
- (
- this->heatTransferModels_[pair][pair.first()]->K()
- );
-
- volScalarField H2
- (
- this->heatTransferModels_[pair][pair.second()]->K()
- );
-
- // Limit the H[12] to avoid /0
- H1.max(small);
- H2.max(small);
-
- Tf = (H1*T1 + H2*T2)/(H1 + H2);
-
- Info<< "Tf." << pair.name()
- << ": min = " << min(Tf.primitiveField())
- << ", mean = " << average(Tf.primitiveField())
- << ", max = " << max(Tf.primitiveField())
- << endl;
- }
- }
-}
-
-
-template
-bool Foam::HeatAndMassTransferPhaseSystem::read()
-{
- if (BasePhaseSystem::read())
- {
- bool readOK = true;
-
- // Models ...
-
- return readOK;
- }
- else
- {
- return false;
- }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.C
index 2c4b99511..73f53829e 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.C
@@ -25,6 +25,7 @@ License
#include "InterfaceCompositionPhaseChangePhaseSystem.H"
#include "interfaceCompositionModel.H"
+#include "massTransferModel.H"
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
@@ -65,6 +66,68 @@ InterfaceCompositionPhaseChangePhaseSystem
interfaceCompositionModels_
);
+ this->generatePairsAndSubModels
+ (
+ "massTransfer",
+ massTransferModels_,
+ false
+ );
+
+ // Check that models have been specified in the correct combinations
+ forAllConstIter
+ (
+ interfaceCompositionModelTable,
+ interfaceCompositionModels_,
+ interfaceCompositionModelIter
+ )
+ {
+ const phasePair& pair =
+ this->phasePairs_[interfaceCompositionModelIter.key()];
+
+ if (!pair.ordered())
+ {
+ FatalErrorInFunction
+ << "An interfacial composition model is specified for the "
+ << "unordered " << pair << " pair. Composition models only "
+ << "apply to ordered pairs. A entry for an "
+ << phasePairKey("A", "B", true) << " pair means a model for "
+ << "the A side of the A-B interface; i.e., \"A in the presence "
+ << "of B\""
+ << exit(FatalError);
+ }
+
+ const phasePairKey key(pair.phase1().name(), pair.phase2().name());
+
+ if (!massTransferModels_[key][pair.index(pair.phase1())].valid())
+ {
+ FatalErrorInFunction
+ << "A species transfer model for the " << pair.phase1().name()
+ << " side of the " << key << " pair is not specified. This is "
+ << "required by the corresponding interface composition model."
+ << exit(FatalError);
+ }
+ }
+ forAllConstIter
+ (
+ massTransferModelTable,
+ massTransferModels_,
+ massTransferModelIter
+ )
+ {
+ const phasePair& pair =
+ this->phasePairs_[massTransferModelIter.key()];
+
+ if (!this->heatTransferModels_.found(pair))
+ {
+ FatalErrorInFunction
+ << "A Heat transfer model for " << pair << " pair is not "
+ << "specified. This is required by the corresponding species "
+ << "transfer model"
+ << exit(FatalError);
+ }
+ }
+
+ // Generate mass transfer fields, set to zero
forAllConstIter
(
phaseSystem::phasePairTable,
@@ -157,66 +220,6 @@ Foam::InterfaceCompositionPhaseChangePhaseSystem::dmdts() const
}
-template
-Foam::autoPtr
-Foam::InterfaceCompositionPhaseChangePhaseSystem::
-heatTransfer() const
-{
- autoPtr eqnsPtr =
- BasePhaseSystem::heatTransfer();
-
- phaseSystem::heatTransferTable& eqns = eqnsPtr();
-
- // Source term due to mass transfer
- forAllConstIter
- (
- phaseSystem::phasePairTable,
- this->phasePairs_,
- phasePairIter
- )
- {
- if
- (
- this->heatTransferModels_.found(phasePairIter.key())
- )
- {
- const phasePair& pair(phasePairIter());
-
- if (pair.ordered())
- {
- continue;
- }
-
- const phaseModel& phase1 = pair.phase1();
- const phaseModel& phase2 = pair.phase2();
-
- const volScalarField& he1(phase1.thermo().he());
- const volScalarField& he2(phase2.thermo().he());
-
- const volScalarField K1(phase1.K());
- const volScalarField K2(phase2.K());
-
- const volScalarField dmdt(this->dmdt(pair));
- const volScalarField dmdt21(posPart(dmdt));
- const volScalarField dmdt12(negPart(dmdt));
- const volScalarField& Tf(*this->Tf_[pair]);
-
- *eqns[phase1.name()] +=
- dmdt21*(phase1.thermo().he(phase1.thermo().p(), Tf))
- - fvm::Sp(dmdt21, he1)
- + dmdt21*(K2 - K1);
-
- *eqns[phase2.name()] -=
- dmdt12*(phase2.thermo().he(phase2.thermo().p(), Tf))
- - fvm::Sp(dmdt12, he2)
- + dmdt12*(K1 - K2);
- }
- }
-
- return eqnsPtr;
-}
-
-
template
Foam::autoPtr
Foam::InterfaceCompositionPhaseChangePhaseSystem::
@@ -262,10 +265,8 @@ massTransfer() const
interfaceCompositionModelIter()
);
- const phasePair& pair
- (
- this->phasePairs_[interfaceCompositionModelIter.key()]
- );
+ const phasePair& pair =
+ this->phasePairs_[interfaceCompositionModelIter.key()];
const phaseModel& phase = pair.phase1();
const phaseModel& otherPhase = pair.phase2();
const phasePairKey key(phase.name(), otherPhase.name());
@@ -279,7 +280,7 @@ massTransfer() const
const volScalarField K
(
- this->massTransferModels_[key][phase.name()]->K()
+ massTransferModels_[key][pair.index(phase)]->K()
);
forAllConstIter
@@ -335,10 +336,8 @@ massTransfer() const
template
void Foam::InterfaceCompositionPhaseChangePhaseSystem::
-correctThermo()
+correctInterfaceThermo()
{
- phaseSystem::correctThermo();
-
// This loop solves for the interface temperatures, Tf, and updates the
// interface composition models.
//
@@ -353,23 +352,19 @@ correctThermo()
forAllConstIter
(
- phaseSystem::phasePairTable,
- this->phasePairs_,
- phasePairIter
+ massTransferModelTable,
+ massTransferModels_,
+ massTransferModelIter
)
{
- const phasePair& pair(phasePairIter());
-
- if (pair.ordered())
- {
- continue;
- }
+ const phasePair& pair =
+ this->phasePairs_[massTransferModelIter.key()];
const phasePairKey key12(pair.first(), pair.second(), true);
const phasePairKey key21(pair.second(), pair.first(), true);
- volScalarField H1(this->heatTransferModels_[pair][pair.first()]->K());
- volScalarField H2(this->heatTransferModels_[pair][pair.second()]->K());
+ volScalarField H1(this->heatTransferModels_[pair].first()->K());
+ volScalarField H2(this->heatTransferModels_[pair].second()->K());
dimensionedScalar HSmall("small", heatTransferModel::dimK, small);
volScalarField mDotL
@@ -402,7 +397,7 @@ correctThermo()
{
this->interfaceCompositionModels_[key12]->addMDotL
(
- this->massTransferModels_[pair][pair.first()]->K(),
+ massTransferModelIter().first()->K(),
Tf,
mDotL,
mDotLPrime
@@ -412,7 +407,7 @@ correctThermo()
{
this->interfaceCompositionModels_[key21]->addMDotL
(
- this->massTransferModels_[pair][pair.second()]->K(),
+ massTransferModelIter().second()->K(),
Tf,
mDotL,
mDotLPrime
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.H
index bc9e9831f..a940263a2 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/InterfaceCompositionPhaseChangePhaseSystem/InterfaceCompositionPhaseChangePhaseSystem.H
@@ -48,6 +48,7 @@ namespace Foam
{
class interfaceCompositionModel;
+class massTransferModel;
/*---------------------------------------------------------------------------*\
Class InterfaceCompositionPhaseChangePhaseSystem Declaration
@@ -69,6 +70,13 @@ protected:
phasePairKey::hash
> interfaceCompositionModelTable;
+ typedef HashTable
+ <
+ Pair>>,
+ phasePairKey,
+ phasePairKey::hash
+ > massTransferModelTable;
+
typedef HashPtrTable
iDmdtTable;
@@ -77,6 +85,9 @@ protected:
// Sub Models
+ //- Mass transfer models
+ massTransferModelTable massTransferModels_;
+
//- Interface composition models
interfaceCompositionModelTable interfaceCompositionModels_;
@@ -113,14 +124,11 @@ public:
//- Return the mass transfer rates for each phase
virtual Xfer> dmdts() const;
- //- Return the heat transfer matrices
- virtual autoPtr heatTransfer() const;
-
//- Return the mass transfer matrices
virtual autoPtr massTransfer() const;
//- Correct the thermodynamics
- virtual void correctThermo();
+ virtual void correctInterfaceThermo();
//- Read base phaseProperties dictionary
virtual bool read();
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatTransferPhaseSystem/HeatTransferPhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/OneResistanceHeatTransferPhaseSystem/OneResistanceHeatTransferPhaseSystem.C
similarity index 67%
rename from applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatTransferPhaseSystem/HeatTransferPhaseSystem.C
rename to applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/OneResistanceHeatTransferPhaseSystem/OneResistanceHeatTransferPhaseSystem.C
index c80c29079..aea2a11ed 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatTransferPhaseSystem/HeatTransferPhaseSystem.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/OneResistanceHeatTransferPhaseSystem/OneResistanceHeatTransferPhaseSystem.C
@@ -23,27 +23,34 @@ License
\*---------------------------------------------------------------------------*/
-#include "HeatTransferPhaseSystem.H"
+#include "OneResistanceHeatTransferPhaseSystem.H"
#include "fvmSup.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template
-Foam::HeatTransferPhaseSystem::HeatTransferPhaseSystem
+Foam::OneResistanceHeatTransferPhaseSystem::
+OneResistanceHeatTransferPhaseSystem
(
const fvMesh& mesh
)
:
BasePhaseSystem(mesh)
{
- this->generatePairsAndSubModels("heatTransfer", heatTransferModels_);
+ this->generatePairsAndSubModels
+ (
+ "heatTransfer",
+ heatTransferModels_,
+ false
+ );
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
template
-Foam::HeatTransferPhaseSystem::~HeatTransferPhaseSystem()
+Foam::OneResistanceHeatTransferPhaseSystem::
+~OneResistanceHeatTransferPhaseSystem()
{}
@@ -51,7 +58,8 @@ Foam::HeatTransferPhaseSystem::~HeatTransferPhaseSystem()
template
Foam::autoPtr
-Foam::HeatTransferPhaseSystem::heatTransfer() const
+Foam::OneResistanceHeatTransferPhaseSystem::
+heatTransfer() const
{
autoPtr eqnsPtr
(
@@ -71,6 +79,7 @@ Foam::HeatTransferPhaseSystem::heatTransfer() const
);
}
+ // Heat transfer across the interface
forAllConstIter
(
heatTransferModelTable,
@@ -96,25 +105,47 @@ Foam::HeatTransferPhaseSystem::heatTransfer() const
}
}
- return eqnsPtr;
-}
-
-
-template
-Foam::autoPtr
-Foam::HeatTransferPhaseSystem::massTransfer() const
-{
- autoPtr eqnsPtr
+ // Source term due to mass transfer
+ forAllConstIter
(
- new phaseSystem::massTransferTable()
- );
+ phaseSystem::phasePairTable,
+ this->phasePairs_,
+ phasePairIter
+ )
+ {
+ const phasePair& pair(phasePairIter());
+
+ if (pair.ordered())
+ {
+ continue;
+ }
+
+ const phaseModel& phase1 = pair.phase1();
+ const phaseModel& phase2 = pair.phase2();
+
+ const volScalarField& he1(phase1.thermo().he());
+ const volScalarField& he2(phase2.thermo().he());
+
+ const volScalarField K1(phase1.K());
+ const volScalarField K2(phase2.K());
+
+ const volScalarField dmdt(this->dmdt(pair));
+ const volScalarField dmdt21(posPart(dmdt));
+ const volScalarField dmdt12(negPart(dmdt));
+
+ *eqns[phase1.name()] +=
+ dmdt21*he2 - fvm::Sp(dmdt21, he1) + dmdt21*(K2 - K1);
+
+ *eqns[phase2.name()] -=
+ dmdt12*he1 - fvm::Sp(dmdt12, he2) + dmdt12*(K1 - K2);
+ }
return eqnsPtr;
}
template
-bool Foam::HeatTransferPhaseSystem::read()
+bool Foam::OneResistanceHeatTransferPhaseSystem::read()
{
if (BasePhaseSystem::read())
{
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatTransferPhaseSystem/HeatTransferPhaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/OneResistanceHeatTransferPhaseSystem/OneResistanceHeatTransferPhaseSystem.H
similarity index 82%
rename from applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatTransferPhaseSystem/HeatTransferPhaseSystem.H
rename to applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/OneResistanceHeatTransferPhaseSystem/OneResistanceHeatTransferPhaseSystem.H
index 664d16f15..0f52b0dc7 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatTransferPhaseSystem/HeatTransferPhaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/OneResistanceHeatTransferPhaseSystem/OneResistanceHeatTransferPhaseSystem.H
@@ -22,18 +22,22 @@ License
along with OpenFOAM. If not, see .
Class
- Foam::HeatTransferPhaseSystem
+ Foam::OneResistanceHeatTransferPhaseSystem
Description
- Class which models interfacial heat transfer between a number of phases.
+ Class which models interfacial heat transfer between a number of phases. A
+ single heat transfer model is used for each interface.
+
+See also
+ TwoResistanceHeatTransferPhaseSystem
SourceFiles
- HeatTransferPhaseSystem.C
+ OneResistanceHeatTransferPhaseSystem.C
\*---------------------------------------------------------------------------*/
-#ifndef HeatTransferPhaseSystem_H
-#define HeatTransferPhaseSystem_H
+#ifndef OneResistanceHeatTransferPhaseSystem_H
+#define OneResistanceHeatTransferPhaseSystem_H
#include "phaseSystem.H"
@@ -47,11 +51,11 @@ template class BlendedInterfacialModel;
class heatTransferModel;
/*---------------------------------------------------------------------------*\
- Class HeatTransferPhaseSystem Declaration
+ Class OneResistanceHeatTransferPhaseSystem Declaration
\*---------------------------------------------------------------------------*/
template
-class HeatTransferPhaseSystem
+class OneResistanceHeatTransferPhaseSystem
:
public BasePhaseSystem
{
@@ -80,11 +84,11 @@ public:
// Constructors
//- Construct from fvMesh
- HeatTransferPhaseSystem(const fvMesh&);
+ OneResistanceHeatTransferPhaseSystem(const fvMesh&);
//- Destructor
- virtual ~HeatTransferPhaseSystem();
+ virtual ~OneResistanceHeatTransferPhaseSystem();
// Member Functions
@@ -92,9 +96,6 @@ public:
//- Return the heat transfer matrices
virtual autoPtr heatTransfer() const;
- //- Return the mass transfer matrices
- virtual autoPtr massTransfer() const;
-
//- Read base phaseProperties dictionary
virtual bool read();
};
@@ -107,7 +108,7 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
- #include "HeatTransferPhaseSystem.C"
+ #include "OneResistanceHeatTransferPhaseSystem.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PhaseTransferPhaseSystem/PhaseTransferPhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PhaseTransferPhaseSystem/PhaseTransferPhaseSystem.C
new file mode 100644
index 000000000..9d66b4d2b
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PhaseTransferPhaseSystem/PhaseTransferPhaseSystem.C
@@ -0,0 +1,244 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2018 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 "PhaseTransferPhaseSystem.H"
+#include "phaseTransferModel.H"
+#include "fvmSup.H"
+
+// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
+
+template
+Foam::tmp
+Foam::PhaseTransferPhaseSystem::rDmdt
+(
+ const phasePairKey& key
+) const
+{
+ if (!rDmdt_.found(key))
+ {
+ return phaseSystem::dmdt(key);
+ }
+
+ const scalar rDmdtSign(Pair::compare(rDmdt_.find(key).key(), key));
+
+ return rDmdtSign**rDmdt_[key];
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::PhaseTransferPhaseSystem::PhaseTransferPhaseSystem
+(
+ const fvMesh& mesh
+)
+:
+ BasePhaseSystem(mesh)
+{
+ this->generatePairsAndSubModels
+ (
+ "phaseTransfer",
+ phaseTransferModels_,
+ false
+ );
+
+ forAllConstIter
+ (
+ phaseTransferModelTable,
+ phaseTransferModels_,
+ phaseTransferModelIter
+ )
+ {
+ this->rDmdt_.insert
+ (
+ phaseTransferModelIter.key(),
+ phaseSystem::dmdt(phaseTransferModelIter.key()).ptr()
+ );
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::PhaseTransferPhaseSystem::
+~PhaseTransferPhaseSystem()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
+
+template
+Foam::tmp
+Foam::PhaseTransferPhaseSystem::dmdt
+(
+ const phasePairKey& key
+) const
+{
+ return BasePhaseSystem::dmdt(key) + this->rDmdt(key);
+}
+
+
+template
+Foam::Xfer>
+Foam::PhaseTransferPhaseSystem::dmdts() const
+{
+ PtrList dmdts(BasePhaseSystem::dmdts());
+
+ forAllConstIter(rDmdtTable, rDmdt_, rDmdtIter)
+ {
+ const phasePair& pair = this->phasePairs_[rDmdtIter.key()];
+ const volScalarField& rDmdt = *rDmdtIter();
+
+ this->addField(pair.phase1(), "dmdt", rDmdt, dmdts);
+ this->addField(pair.phase2(), "dmdt", - rDmdt, dmdts);
+ }
+
+ return dmdts.xfer();
+}
+
+
+template
+Foam::autoPtr
+Foam::PhaseTransferPhaseSystem::massTransfer() const
+{
+ // Create a mass transfer matrix for each species of each phase
+ autoPtr eqnsPtr
+ (
+ new phaseSystem::massTransferTable()
+ );
+
+ phaseSystem::massTransferTable& eqns = eqnsPtr();
+
+ forAll(this->phaseModels_, phasei)
+ {
+ const phaseModel& phase = this->phaseModels_[phasei];
+
+ const PtrList& Yi = phase.Y();
+
+ forAll(Yi, i)
+ {
+ eqns.insert
+ (
+ Yi[i].name(),
+ new fvScalarMatrix(Yi[i], dimMass/dimTime)
+ );
+ }
+ }
+
+ // Mass transfer across the interface
+ forAllConstIter
+ (
+ phaseTransferModelTable,
+ phaseTransferModels_,
+ phaseTransferModelIter
+ )
+ {
+ const phasePair& pair(this->phasePairs_[phaseTransferModelIter.key()]);
+
+ const phaseModel& phase = pair.phase1();
+ const phaseModel& otherPhase = pair.phase2();
+
+ const volScalarField dmdt(this->rDmdt(pair));
+ const volScalarField dmdt12(posPart(dmdt));
+ const volScalarField dmdt21(negPart(dmdt));
+
+ const PtrList& Yi = phase.Y();
+
+ forAll(Yi, i)
+ {
+ const word name
+ (
+ IOobject::groupName(Yi[i].member(), phase.name())
+ );
+
+ const word otherName
+ (
+ IOobject::groupName(Yi[i].member(), otherPhase.name())
+ );
+
+ *eqns[name] +=
+ dmdt21*eqns[otherName]->psi()
+ - fvm::Sp(dmdt21, eqns[name]->psi());
+
+ *eqns[otherName] -=
+ dmdt12*eqns[name]->psi()
+ - fvm::Sp(dmdt12, eqns[otherName]->psi());
+ }
+
+ }
+
+ return eqnsPtr;
+}
+
+
+template
+void Foam::PhaseTransferPhaseSystem::correct()
+{
+ BasePhaseSystem::correct();
+
+ forAllConstIter
+ (
+ phaseTransferModelTable,
+ phaseTransferModels_,
+ phaseTransferModelIter
+ )
+ {
+ *rDmdt_[phaseTransferModelIter.key()] =
+ dimensionedScalar("zero", dimDensity/dimTime, 0);
+ }
+
+ forAllConstIter
+ (
+ phaseTransferModelTable,
+ phaseTransferModels_,
+ phaseTransferModelIter
+ )
+ {
+ *rDmdt_[phaseTransferModelIter.key()] +=
+ phaseTransferModelIter()->dmdt();
+ }
+}
+
+
+template
+bool Foam::PhaseTransferPhaseSystem::read()
+{
+ if (BasePhaseSystem::read())
+ {
+ bool readOK = true;
+
+ // Models ...
+
+ return readOK;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PhaseTransferPhaseSystem/PhaseTransferPhaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PhaseTransferPhaseSystem/PhaseTransferPhaseSystem.H
new file mode 100644
index 000000000..ee6acd896
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PhaseTransferPhaseSystem/PhaseTransferPhaseSystem.H
@@ -0,0 +1,135 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2018 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::MassTransferTransferPhaseSystem
+
+Description
+ Class which models non-thermally-coupled mass transfers; i.e.,
+ representation changes, rather than phase changes.
+
+SourceFiles
+ PhaseTransferPhaseSystem.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef PhaseTransferPhaseSystem_H
+#define PhaseTransferPhaseSystem_H
+
+#include "phaseSystem.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class blendingMethod;
+template class BlendedInterfacialModel;
+class phaseTransferModel;
+
+/*---------------------------------------------------------------------------*\
+ Class PhaseTransferPhaseSystem Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class PhaseTransferPhaseSystem
+:
+ public BasePhaseSystem
+{
+protected:
+
+ // Protected typedefs
+
+ typedef HashTable
+ <
+ autoPtr>,
+ phasePairKey,
+ phasePairKey::hash
+ > phaseTransferModelTable;
+
+ typedef HashPtrTable
+ rDmdtTable;
+
+
+ // Protected data
+
+ // Sub Models
+
+ //- Mass transfer models
+ phaseTransferModelTable phaseTransferModels_;
+
+ //- Mass transfer rates
+ rDmdtTable rDmdt_;
+
+ // Protected member functions
+
+ //- Return the representation mass transfer rate
+ virtual tmp rDmdt(const phasePairKey& key) const;
+
+
+public:
+
+ // Constructors
+
+ //- Construct from fvMesh
+ PhaseTransferPhaseSystem(const fvMesh&);
+
+
+ //- Destructor
+ virtual ~PhaseTransferPhaseSystem();
+
+
+ // Member Functions
+
+ //- Return the mass transfer rate for a pair
+ virtual tmp dmdt(const phasePairKey& key) const;
+
+ //- Return the mass transfer rates for each phase
+ virtual Xfer> dmdts() const;
+
+ //- Return the mass transfer matrices
+ virtual autoPtr massTransfer() const;
+
+ //- Correct the mass transfer rates
+ virtual void correct();
+
+ //- Read base phaseProperties dictionary
+ virtual bool read();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+ #include "PhaseTransferPhaseSystem.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.C
index e84f1fcc8..f7f464d02 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.C
@@ -166,45 +166,6 @@ Foam::PopulationBalancePhaseSystem::dmdts() const
}
-template
-Foam::autoPtr
-Foam::PopulationBalancePhaseSystem::heatTransfer() const
-{
- autoPtr eqnsPtr =
- BasePhaseSystem::heatTransfer();
-
- phaseSystem::heatTransferTable& eqns = eqnsPtr();
-
- // Source term due to mass trasfer
- forAllConstIter
- (
- phaseSystem::phasePairTable,
- this->phasePairs_,
- phasePairIter
- )
- {
- const phasePair& pair(phasePairIter());
-
- if (pair.ordered())
- {
- continue;
- }
-
- const volScalarField& he1(pair.phase1().thermo().he());
- const volScalarField& he2(pair.phase2().thermo().he());
-
- const volScalarField dmdt(this->pDmdt(pair));
- const volScalarField dmdt21(posPart(dmdt));
- const volScalarField dmdt12(negPart(dmdt));
-
- *eqns[pair.phase1().name()] += dmdt21*he2 - fvm::Sp(dmdt21, he1);
- *eqns[pair.phase2().name()] -= dmdt12*he1 - fvm::Sp(dmdt12, he2);
- }
-
- return eqnsPtr;
-}
-
-
template
Foam::autoPtr
Foam::PopulationBalancePhaseSystem::massTransfer() const
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.H
index f03a860b8..c8e7f5fe5 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/PopulationBalancePhaseSystem/PopulationBalancePhaseSystem.H
@@ -38,10 +38,7 @@ SourceFiles
#ifndef PopulationBalancePhaseSystem_H
#define PopulationBalancePhaseSystem_H
-#include "HeatAndMassTransferPhaseSystem.H"
-#include "saturationModel.H"
-#include "Switch.H"
-
+#include "phaseSystem.H"
#include "populationBalanceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -101,9 +98,6 @@ public:
//- Return the mass transfer rates for each phase
virtual Xfer> dmdts() const;
- //- Return the heat transfer matrices
- virtual autoPtr heatTransfer() const;
-
//- Return the mass transfer matrices
virtual autoPtr massTransfer() const;
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.C
index c0149414e..dbe044c81 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.C
@@ -81,7 +81,7 @@ ThermalPhaseChangePhaseSystem
(
saturationModel::New(this->subDict("saturationModel"), mesh)
),
- massTransfer_(this->lookup("massTransfer"))
+ phaseChange_(this->lookup("phaseChange"))
{
forAllConstIter
@@ -224,7 +224,7 @@ Foam::ThermalPhaseChangePhaseSystem::heatTransfer() const
phaseSystem::heatTransferTable& eqns = eqnsPtr();
- // Source term due to mass transfer
+ // Add boundary term
forAllConstIter
(
phaseSystem::phasePairTable,
@@ -232,10 +232,7 @@ Foam::ThermalPhaseChangePhaseSystem::heatTransfer() const
phasePairIter
)
{
- if
- (
- this->heatTransferModels_.found(phasePairIter.key())
- )
+ if (this->wMDotL_.found(phasePairIter.key()))
{
const phasePair& pair(phasePairIter());
@@ -247,27 +244,6 @@ Foam::ThermalPhaseChangePhaseSystem::heatTransfer() const
const phaseModel& phase1 = pair.phase1();
const phaseModel& phase2 = pair.phase2();
- const volScalarField& he1(phase1.thermo().he());
- const volScalarField& he2(phase2.thermo().he());
-
- const volScalarField& K1(phase1.K());
- const volScalarField& K2(phase2.K());
-
- const volScalarField dmdt(this->dmdt(pair));
- const volScalarField dmdt21(posPart(dmdt));
- const volScalarField dmdt12(negPart(dmdt));
- const volScalarField& Tf(*this->Tf_[pair]);
-
- *eqns[phase1.name()] +=
- dmdt21*(phase1.thermo().he(phase1.thermo().p(), Tf))
- - fvm::Sp(dmdt21, he1)
- + dmdt21*(K2 - K1);
-
- *eqns[phase2.name()] -=
- dmdt12*(phase2.thermo().he(phase2.thermo().p(), Tf))
- - fvm::Sp(dmdt12, he2)
- + dmdt12*(K1 - K2);
-
*eqns[phase1.name()] += negPart(*this->wMDotL_[pair]);
*eqns[phase2.name()] -= posPart(*this->wMDotL_[pair]);
}
@@ -299,6 +275,7 @@ Foam::ThermalPhaseChangePhaseSystem::massTransfer() const
{
continue;
}
+
const phaseModel& phase = pair.phase1();
const phaseModel& otherPhase = pair.phase2();
@@ -336,195 +313,171 @@ Foam::ThermalPhaseChangePhaseSystem::massTransfer() const
template
-void Foam::ThermalPhaseChangePhaseSystem::correctThermo()
+void
+Foam::ThermalPhaseChangePhaseSystem::correctInterfaceThermo()
{
typedef compressible::alphatPhaseChangeWallFunctionFvPatchScalarField
alphatPhaseChangeWallFunction;
- phaseSystem::correctThermo();
-
forAllConstIter
(
- phaseSystem::phasePairTable,
- this->phasePairs_,
- phasePairIter
+ typename BasePhaseSystem::heatTransferModelTable,
+ this->heatTransferModels_,
+ heatTransferModelIter
)
{
- if
+ const phasePair& pair
(
- this->heatTransferModels_.found(phasePairIter.key())
- )
+ this->phasePairs_[heatTransferModelIter.key()]
+ );
+
+ const phaseModel& phase1 = pair.phase1();
+ const phaseModel& phase2 = pair.phase2();
+
+ const volScalarField& T1(phase1.thermo().T());
+ const volScalarField& T2(phase2.thermo().T());
+
+ const volScalarField& he1(phase1.thermo().he());
+ const volScalarField& he2(phase2.thermo().he());
+
+ volScalarField& iDmdt(*this->iDmdt_[pair]);
+ volScalarField& Tf(*this->Tf_[pair]);
+
+ volScalarField hef1(phase1.thermo().he(phase1.thermo().p(), Tf));
+ volScalarField hef2(phase2.thermo().he(phase2.thermo().p(), Tf));
+
+ volScalarField L
+ (
+ (neg0(iDmdt)*hef2 + pos(iDmdt)*he2)
+ - (pos0(iDmdt)*hef1 + neg(iDmdt)*he1)
+ );
+
+ volScalarField iDmdtNew(iDmdt);
+
+ if (phaseChange_)
{
- const phasePair& pair(phasePairIter());
+ volScalarField H1(heatTransferModelIter().first()->K(0));
+ volScalarField H2(heatTransferModelIter().second()->K(0));
- if (pair.ordered())
- {
- continue;
- }
+ Tf = saturationModel_->Tsat(phase1.thermo().p());
- const phaseModel& phase1 = pair.phase1();
- const phaseModel& phase2 = pair.phase2();
+ iDmdtNew = (H1*(Tf - T1) + H2*(Tf - T2))/L;
+ }
+ else
+ {
+ iDmdtNew == dimensionedScalar("0", iDmdt.dimensions(), 0);
+ }
- const volScalarField& T1(phase1.thermo().T());
- const volScalarField& T2(phase2.thermo().T());
+ volScalarField H1(heatTransferModelIter().first()->K());
+ volScalarField H2(heatTransferModelIter().second()->K());
- const volScalarField& he1(phase1.thermo().he());
- const volScalarField& he2(phase2.thermo().he());
+ // Limit the H[12] to avoid /0
+ H1.max(small);
+ H2.max(small);
- volScalarField& iDmdt(*this->iDmdt_[pair]);
- volScalarField& Tf(*this->Tf_[pair]);
+ Tf = (H1*T1 + H2*T2 + iDmdtNew*L)/(H1 + H2);
- volScalarField hef1(phase1.thermo().he(phase1.thermo().p(), Tf));
- volScalarField hef2(phase2.thermo().he(phase2.thermo().p(), Tf));
+ Info<< "Tf." << pair.name()
+ << ": min = " << min(Tf.primitiveField())
+ << ", mean = " << average(Tf.primitiveField())
+ << ", max = " << max(Tf.primitiveField())
+ << endl;
- volScalarField L
- (
- (neg0(iDmdt)*hef2 + pos(iDmdt)*he2)
- - (pos0(iDmdt)*hef1 + neg(iDmdt)*he1)
- );
+ scalar iDmdtRelax(this->mesh().fieldRelaxationFactor("iDmdt"));
+ iDmdt = (1 - iDmdtRelax)*iDmdt + iDmdtRelax*iDmdtNew;
- volScalarField iDmdtNew(iDmdt);
-
- if (massTransfer_ )
- {
- volScalarField H1
- (
- this->heatTransferModels_[pair][pair.first()]->K(0)
- );
-
- volScalarField H2
- (
- this->heatTransferModels_[pair][pair.second()]->K(0)
- );
-
- Tf = saturationModel_->Tsat(phase1.thermo().p());
-
- iDmdtNew =
- (H1*(Tf - T1) + H2*(Tf - T2))/L;
- }
- else
- {
- iDmdtNew == dimensionedScalar("0", iDmdt.dimensions(), 0);
- }
-
- volScalarField H1
- (
- this->heatTransferModels_[pair][pair.first()]->K()
- );
-
- volScalarField H2
- (
- this->heatTransferModels_[pair][pair.second()]->K()
- );
-
- // Limit the H[12] to avoid /0
- H1.max(small);
- H2.max(small);
-
- Tf = (H1*T1 + H2*T2 + iDmdtNew*L)/(H1 + H2);
-
- Info<< "Tf." << pair.name()
- << ": min = " << min(Tf.primitiveField())
- << ", mean = " << average(Tf.primitiveField())
- << ", max = " << max(Tf.primitiveField())
+ if (phaseChange_)
+ {
+ Info<< "iDmdt." << pair.name()
+ << ": min = " << min(iDmdt.primitiveField())
+ << ", mean = " << average(iDmdt.primitiveField())
+ << ", max = " << max(iDmdt.primitiveField())
+ << ", integral = " << fvc::domainIntegrate(iDmdt).value()
<< endl;
+ }
- scalar iDmdtRelax(this->mesh().fieldRelaxationFactor("iDmdt"));
- iDmdt = (1 - iDmdtRelax)*iDmdt + iDmdtRelax*iDmdtNew;
+ volScalarField& wDmdt(*this->wDmdt_[pair]);
+ volScalarField& wMDotL(*this->wMDotL_[pair]);
+ wDmdt *= 0;
+ wMDotL *= 0;
- if (massTransfer_ )
- {
- Info<< "iDmdt." << pair.name()
- << ": min = " << min(iDmdt.primitiveField())
- << ", mean = " << average(iDmdt.primitiveField())
- << ", max = " << max(iDmdt.primitiveField())
- << ", integral = " << fvc::domainIntegrate(iDmdt).value()
- << endl;
- }
+ bool wallBoilingActive = false;
- volScalarField& wDmdt(*this->wDmdt_[pair]);
- volScalarField& wMDotL(*this->wMDotL_[pair]);
- wDmdt *= 0;
- wMDotL *= 0;
+ forAllConstIter(phasePair, pair, iter)
+ {
+ const phaseModel& phase = iter();
+ const phaseModel& otherPhase = iter.otherPhase();
- bool wallBoilingActive = false;
-
- forAllConstIter(phasePair, pair, iter)
- {
- const phaseModel& phase = iter();
- const phaseModel& otherPhase = iter.otherPhase();
-
- if
+ if
+ (
+ phase.mesh().foundObject
(
- phase.mesh().foundObject
+ "alphat." + phase.name()
+ )
+ )
+ {
+ const volScalarField& alphat =
+ phase.mesh().lookupObject
(
"alphat." + phase.name()
- )
- )
+ );
+
+ const fvPatchList& patches = this->mesh().boundary();
+ forAll(patches, patchi)
{
- const volScalarField& alphat =
- phase.mesh().lookupObject
- (
- "alphat." + phase.name()
- );
+ const fvPatch& currPatch = patches[patchi];
- const fvPatchList& patches = this->mesh().boundary();
- forAll(patches, patchi)
+ if
+ (
+ isA
+ (
+ alphat.boundaryField()[patchi]
+ )
+ )
{
- const fvPatch& currPatch = patches[patchi];
-
- if
- (
- isA
+ const alphatPhaseChangeWallFunction& PCpatch =
+ refCast
(
alphat.boundaryField()[patchi]
- )
- )
+ );
+
+ phasePairKey key(phase.name(), otherPhase.name());
+
+ if (PCpatch.activePhasePair(key))
{
- const alphatPhaseChangeWallFunction& PCpatch =
- refCast
- (
- alphat.boundaryField()[patchi]
- );
+ wallBoilingActive = true;
- phasePairKey key(phase.name(), otherPhase.name());
+ const scalarField& patchDmdt =
+ PCpatch.dmdt(key);
+ const scalarField& patchMDotL =
+ PCpatch.mDotL(key);
- if (PCpatch.activePhasePair(key))
+ const scalar sign
+ (
+ Pair::compare(pair, key)
+ );
+
+ forAll(patchDmdt, facei)
{
- wallBoilingActive = true;
-
- const scalarField& patchDmdt =
- PCpatch.dmdt(key);
- const scalarField& patchMDotL =
- PCpatch.mDotL(key);
-
- const scalar sign
- (
- Pair::compare(pair, key)
- );
-
- forAll(patchDmdt, facei)
- {
- const label faceCelli =
- currPatch.faceCells()[facei];
- wDmdt[faceCelli] -= sign*patchDmdt[facei];
- wMDotL[faceCelli] -= sign*patchMDotL[facei];
- }
+ const label faceCelli =
+ currPatch.faceCells()[facei];
+ wDmdt[faceCelli] -= sign*patchDmdt[facei];
+ wMDotL[faceCelli] -= sign*patchMDotL[facei];
}
}
}
}
}
+ }
- if (wallBoilingActive)
- {
- Info<< "wDmdt." << pair.name()
- << ": min = " << min(wDmdt.primitiveField())
- << ", mean = " << average(wDmdt.primitiveField())
- << ", max = " << max(wDmdt.primitiveField())
- << ", integral = " << fvc::domainIntegrate(wDmdt).value()
- << endl;
- }
+ if (wallBoilingActive)
+ {
+ Info<< "wDmdt." << pair.name()
+ << ": min = " << min(wDmdt.primitiveField())
+ << ", mean = " << average(wDmdt.primitiveField())
+ << ", max = " << max(wDmdt.primitiveField())
+ << ", integral = " << fvc::domainIntegrate(wDmdt).value()
+ << endl;
}
}
}
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.H
index fef8a2680..dccd2e247 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/ThermalPhaseChangePhaseSystem/ThermalPhaseChangePhaseSystem.H
@@ -78,8 +78,8 @@ protected:
//- The saturation model used to evaluate Tsat = Tf
autoPtr saturationModel_;
- // Mass transfer enabled
- Switch massTransfer_;
+ // Phase change enabled
+ Switch phaseChange_;
//- Interfacial Mass transfer rate
iDmdtTable iDmdt_;
@@ -129,8 +129,8 @@ public:
//- Return the mass transfer matrices
virtual autoPtr massTransfer() const;
- //- Correct the thermodynamics
- virtual void correctThermo();
+ //- Correct the interface thermodynamics
+ virtual void correctInterfaceThermo();
//- Read base phaseProperties dictionary
virtual bool read();
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/TwoResistanceHeatTransferPhaseSystem/TwoResistanceHeatTransferPhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/TwoResistanceHeatTransferPhaseSystem/TwoResistanceHeatTransferPhaseSystem.C
new file mode 100644
index 000000000..878806b3f
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/TwoResistanceHeatTransferPhaseSystem/TwoResistanceHeatTransferPhaseSystem.C
@@ -0,0 +1,339 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015-2018 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 "TwoResistanceHeatTransferPhaseSystem.H"
+
+#include "BlendedInterfacialModel.H"
+#include "heatTransferModel.H"
+
+#include "HashPtrTable.H"
+
+#include "fvcDiv.H"
+#include "fvmSup.H"
+#include "fvMatrix.H"
+#include "zeroGradientFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::TwoResistanceHeatTransferPhaseSystem::
+TwoResistanceHeatTransferPhaseSystem
+(
+ const fvMesh& mesh
+)
+:
+ BasePhaseSystem(mesh)
+{
+ this->generatePairsAndSubModels
+ (
+ "heatTransfer",
+ heatTransferModels_,
+ false
+ );
+
+ // Check that models have been specified on both sides of the interfaces
+ forAllConstIter
+ (
+ heatTransferModelTable,
+ heatTransferModels_,
+ heatTransferModelIter
+ )
+ {
+ const phasePair& pair = this->phasePairs_[heatTransferModelIter.key()];
+
+ if (!heatTransferModels_[pair].first().valid())
+ {
+ FatalErrorInFunction
+ << "A heat transfer model for the " << pair.phase1().name()
+ << " side of the " << pair << " pair is not specified"
+ << exit(FatalError);
+ }
+ if (!heatTransferModels_[pair].second().valid())
+ {
+ FatalErrorInFunction
+ << "A heat transfer model for the " << pair.phase2().name()
+ << " side of the " << pair << " pair is not specified"
+ << exit(FatalError);
+ }
+ }
+
+ // Calculate initial Tf-s as if there is no mass transfer
+ forAllConstIter
+ (
+ heatTransferModelTable,
+ heatTransferModels_,
+ heatTransferModelIter
+ )
+ {
+ const phasePair& pair = this->phasePairs_[heatTransferModelIter.key()];
+
+ const phaseModel& phase1 = pair.phase1();
+ const phaseModel& phase2 = pair.phase2();
+
+ const volScalarField& T1(phase1.thermo().T());
+ const volScalarField& T2(phase2.thermo().T());
+
+ volScalarField H1(heatTransferModels_[pair].first()->K());
+ volScalarField H2(heatTransferModels_[pair].second()->K());
+ dimensionedScalar HSmall("small", heatTransferModel::dimK, small);
+
+ Tf_.insert
+ (
+ pair,
+ new volScalarField
+ (
+ IOobject
+ (
+ IOobject::groupName("Tf", pair.name()),
+ this->mesh().time().timeName(),
+ this->mesh(),
+ IOobject::NO_READ,
+ IOobject::AUTO_WRITE
+ ),
+ (H1*T1 + H2*T2)/max(H1 + H2, HSmall)
+ )
+ );
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::TwoResistanceHeatTransferPhaseSystem::
+~TwoResistanceHeatTransferPhaseSystem()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
+
+template
+Foam::autoPtr
+Foam::TwoResistanceHeatTransferPhaseSystem::
+heatTransfer() const
+{
+ autoPtr eqnsPtr
+ (
+ new phaseSystem::heatTransferTable()
+ );
+
+ phaseSystem::heatTransferTable& eqns = eqnsPtr();
+
+ forAll(this->phaseModels_, phasei)
+ {
+ const phaseModel& phase = this->phaseModels_[phasei];
+
+ eqns.insert
+ (
+ phase.name(),
+ new fvScalarMatrix(phase.thermo().he(), dimEnergy/dimTime)
+ );
+ }
+
+ // Heat transfer with the interface
+ forAllConstIter
+ (
+ heatTransferModelTable,
+ heatTransferModels_,
+ heatTransferModelIter
+ )
+ {
+ const phasePair& pair
+ (
+ this->phasePairs_[heatTransferModelIter.key()]
+ );
+
+ const volScalarField& Tf(*Tf_[pair]);
+
+ const Pair> Ks
+ (
+ heatTransferModelIter().first()->K(),
+ heatTransferModelIter().second()->K()
+ );
+
+ const volScalarField KEff
+ (
+ Ks.first()()*Ks.second()()
+ /max
+ (
+ Ks.first()() + Ks.second()(),
+ dimensionedScalar("small", heatTransferModel::dimK, small)
+ )
+ );
+
+ forAllConstIter(phasePair, pair, iter)
+ {
+ const phaseModel& phase = iter();
+
+ const volScalarField& he(phase.thermo().he());
+ const volScalarField Cpv(phase.thermo().Cpv());
+
+ *eqns[phase.name()] +=
+ Ks[iter.index()]*(Tf - phase.thermo().T())
+ + KEff/Cpv*he - fvm::Sp(KEff/Cpv, he);
+ }
+ }
+
+ // Source term due to mass transfer
+ forAllConstIter
+ (
+ phaseSystem::phasePairTable,
+ this->phasePairs_,
+ phasePairIter
+ )
+ {
+ const phasePair& pair(phasePairIter());
+
+ if (pair.ordered())
+ {
+ continue;
+ }
+
+ const phaseModel& phase1 = pair.phase1();
+ const phaseModel& phase2 = pair.phase2();
+
+ const volScalarField& he1(phase1.thermo().he());
+ const volScalarField& he2(phase2.thermo().he());
+
+ const volScalarField K1(phase1.K());
+ const volScalarField K2(phase2.K());
+
+ const volScalarField dmdt(this->dmdt(pair));
+ const volScalarField dmdt21(posPart(dmdt));
+ const volScalarField dmdt12(negPart(dmdt));
+
+ *eqns[phase1.name()] += - fvm::Sp(dmdt21, he1) + dmdt21*(K2 - K1);
+
+ *eqns[phase2.name()] -= - fvm::Sp(dmdt12, he2) + dmdt12*(K1 - K2);
+
+ if (this->heatTransferModels_.found(phasePairIter.key()))
+ {
+ const volScalarField& Tf(*Tf_[pair]);
+
+ *eqns[phase1.name()] +=
+ dmdt21*phase1.thermo().he(phase1.thermo().p(), Tf);
+
+ *eqns[phase2.name()] -=
+ dmdt12*phase2.thermo().he(phase2.thermo().p(), Tf);
+ }
+ else
+ {
+ *eqns[phase1.name()] += dmdt21*he2;
+
+ *eqns[phase2.name()] -= dmdt12*he1;
+ }
+ }
+
+ return eqnsPtr;
+}
+
+
+template
+void Foam::TwoResistanceHeatTransferPhaseSystem::
+correctThermo()
+{
+ phaseSystem::correctThermo();
+
+ correctInterfaceThermo();
+}
+
+
+template
+void Foam::TwoResistanceHeatTransferPhaseSystem::
+correctInterfaceThermo()
+{
+ forAllConstIter
+ (
+ heatTransferModelTable,
+ heatTransferModels_,
+ heatTransferModelIter
+ )
+ {
+ const phasePair& pair
+ (
+ this->phasePairs_[heatTransferModelIter.key()]
+ );
+
+ const phaseModel& phase1 = pair.phase1();
+ const phaseModel& phase2 = pair.phase2();
+
+ const volScalarField& p(phase1.thermo().p());
+
+ const volScalarField& T1(phase1.thermo().T());
+ const volScalarField& T2(phase2.thermo().T());
+
+ volScalarField& Tf(*this->Tf_[pair]);
+
+ const volScalarField L
+ (
+ phase1.thermo().he(p, Tf) - phase2.thermo().he(p, Tf)
+ );
+
+ const volScalarField dmdt(this->dmdt(pair));
+
+ volScalarField H1
+ (
+ this->heatTransferModels_[pair].first()->K()
+ );
+
+ volScalarField H2
+ (
+ this->heatTransferModels_[pair].second()->K()
+ );
+
+ // Limit the H[12] to avoid /0
+ H1.max(small);
+ H2.max(small);
+
+ Tf = (H1*T1 + H2*T2 + dmdt*L)/(H1 + H2);
+
+ Info<< "Tf." << pair.name()
+ << ": min = " << min(Tf.primitiveField())
+ << ", mean = " << average(Tf.primitiveField())
+ << ", max = " << max(Tf.primitiveField())
+ << endl;
+ }
+}
+
+
+template
+bool Foam::TwoResistanceHeatTransferPhaseSystem::read()
+{
+ if (BasePhaseSystem::read())
+ {
+ bool readOK = true;
+
+ // Models ...
+
+ return readOK;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatAndMassTransferPhaseSystem/HeatAndMassTransferPhaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/TwoResistanceHeatTransferPhaseSystem/TwoResistanceHeatTransferPhaseSystem.H
similarity index 68%
rename from applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatAndMassTransferPhaseSystem/HeatAndMassTransferPhaseSystem.H
rename to applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/TwoResistanceHeatTransferPhaseSystem/TwoResistanceHeatTransferPhaseSystem.H
index 5917ce976..3bef3dc92 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/HeatAndMassTransferPhaseSystem/HeatAndMassTransferPhaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/PhaseSystems/TwoResistanceHeatTransferPhaseSystem/TwoResistanceHeatTransferPhaseSystem.H
@@ -22,20 +22,25 @@ License
along with OpenFOAM. If not, see .
Class
- Foam::HeatAndMassTransferPhaseSystem
+ Foam::TwoResistanceHeatTransferPhaseSystem
Description
- Base class to support interfacial heat and mass transfer between a number
- of phases. Can be used on its own to simulate flows without mass transfer
- with two-resistance interfacial heat trasnfer.
+ Class which models interfacial heat transfer between a number of phases.
+ Two heat transfer models are stored at each interface, one for each phase.
+ This permits definition of an interface temperature with which heat transfer
+ occurs. It also allows derived systems to define other thermodynamic
+ properties at the interface and therefore represent phase changes.
+
+See also
+ OneResistanceHeatTransferPhaseSystem
SourceFiles
- HeatAndMassTransferPhaseSystem.C
+ TwoResistanceHeatTransferPhaseSystem.C
\*---------------------------------------------------------------------------*/
-#ifndef HeatAndMassTransferPhaseSystem_H
-#define HeatAndMassTransferPhaseSystem_H
+#ifndef TwoResistanceHeatTransferPhaseSystem_H
+#define TwoResistanceHeatTransferPhaseSystem_H
#include "phaseSystem.H"
@@ -49,14 +54,13 @@ class BlendedInterfacialModel;
class blendingMethod;
class heatTransferModel;
-class massTransferModel;
/*---------------------------------------------------------------------------*\
- Class HeatAndMassTransferPhaseSystem Declaration
+ Class TwoResistanceHeatTransferPhaseSystem Declaration
\*---------------------------------------------------------------------------*/
template
-class HeatAndMassTransferPhaseSystem
+class TwoResistanceHeatTransferPhaseSystem
:
public BasePhaseSystem
{
@@ -66,24 +70,11 @@ protected:
typedef HashTable
<
- HashTable
- <
- autoPtr>
- >,
+ Pair>>,
phasePairKey,
phasePairKey::hash
> heatTransferModelTable;
- typedef HashTable
- <
- HashTable
- <
- autoPtr>
- >,
- phasePairKey,
- phasePairKey::hash
- > massTransferModelTable;
-
// Protected data
@@ -95,34 +86,30 @@ protected:
//- Heat transfer models
heatTransferModelTable heatTransferModels_;
- //- Mass transfer models
- massTransferModelTable massTransferModels_;
-
public:
// Constructors
//- Construct from fvMesh
- HeatAndMassTransferPhaseSystem(const fvMesh&);
+ TwoResistanceHeatTransferPhaseSystem(const fvMesh&);
//- Destructor
- virtual ~HeatAndMassTransferPhaseSystem();
+ virtual ~TwoResistanceHeatTransferPhaseSystem();
// Member Functions
//- Return the heat transfer matrices
- virtual autoPtr
- heatTransfer() const;
-
- //- Return the mass transfer matrices
- virtual autoPtr massTransfer() const;
+ virtual autoPtr heatTransfer() const;
//- Correct the thermodynamics
virtual void correctThermo();
+ //- Correct the interface thermodynamics
+ virtual void correctInterfaceThermo();
+
//- Read base phaseProperties dictionary
virtual bool read();
};
@@ -135,7 +122,7 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
- #include "HeatAndMassTransferPhaseSystem.C"
+ #include "TwoResistanceHeatTransferPhaseSystem.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePair.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePair.H
index 423bba0f2..06f0328f0 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePair.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePair.H
@@ -164,6 +164,10 @@ public:
// the given phase
inline const phaseModel& otherPhase(const phaseModel& phase) const;
+ //- Return the index of the given phase. Generates a FatalError if
+ // this phasePair does not contain the given phase
+ inline label index(const phaseModel& phase) const;
+
//- Return gravitation acceleration
inline const uniformDimensionedVectorField& g() const;
@@ -192,6 +196,12 @@ public:
inline explicit const_iterator(const phasePair&);
+ // Access
+
+ //- Return the current index
+ inline label index() const;
+
+
// Member operators
inline bool operator==(const const_iterator&) const;
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePairI.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePairI.H
index 5a1373f45..683edd650 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePairI.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phasePair/phasePair/phasePairI.H
@@ -67,6 +67,27 @@ inline const Foam::phaseModel& Foam::phasePair::otherPhase
}
+inline Foam::label Foam::phasePair::index(const phaseModel& phase) const
+{
+ if (&phase1_ == &phase)
+ {
+ return 0;
+ }
+ else if (&phase2_ == &phase)
+ {
+ return 1;
+ }
+ else
+ {
+ FatalErrorInFunction
+ << "this phasePair does not contain phase " << phase.name()
+ << exit(FatalError);
+
+ return -1;
+ }
+}
+
+
inline const Foam::uniformDimensionedVectorField& Foam::phasePair::g() const
{
return g_;
@@ -92,6 +113,12 @@ inline Foam::phasePair::const_iterator::const_iterator(const phasePair& pair)
{}
+inline Foam::label Foam::phasePair::const_iterator::index() const
+{
+ return index_;
+}
+
+
inline bool Foam::phasePair::const_iterator::operator==
(
const const_iterator& iter
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
index a466ab05a..680008464 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
@@ -214,20 +214,22 @@ protected:
autoPtr>,
phasePairKey,
phasePairKey::hash
- >& models
+ >& models,
+ const bool correctFixedFluxBCs = true
);
- //- Generate pairs and per-phase sub-model tables
+ //- Generate pairs and two-sided sub-model tables
template
void generatePairsAndSubModels
(
const word& modelName,
HashTable
<
- HashTable>,
+ Pair>,
phasePairKey,
phasePairKey::hash
- >& models
+ >& models,
+ const bool correctFixedFluxBCs = true
);
//- Add the field to a phase-indexed list, with the given name,
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C
index 8d835991e..16d352b8e 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C
@@ -85,7 +85,8 @@ void Foam::phaseSystem::generatePairsAndSubModels
autoPtr>,
phasePairKey,
phasePairKey::hash
- >& models
+ >& models,
+ const bool correctFixedFluxBCs
)
{
typedef
@@ -127,7 +128,8 @@ void Foam::phaseSystem::generatePairsAndSubModels
blending,
tempModels.found(key ) ? tempModels[key ] : noModel,
tempModels.found(key1In2) ? tempModels[key1In2] : noModel,
- tempModels.found(key2In1) ? tempModels[key2In1] : noModel
+ tempModels.found(key2In1) ? tempModels[key2In1] : noModel,
+ correctFixedFluxBCs
)
)
);
@@ -157,10 +159,11 @@ void Foam::phaseSystem::generatePairsAndSubModels
const word& modelName,
HashTable
<
- HashTable>,
+ Pair>,
phasePairKey,
phasePairKey::hash
- >& models
+ >& models,
+ const bool correctFixedFluxBCs
)
{
typedef
@@ -169,31 +172,41 @@ void Foam::phaseSystem::generatePairsAndSubModels
forAll(phaseModels_, phasei)
{
+ const phaseModel& phase = phaseModels_[phasei];
+
modelTypeTable tempModels;
generatePairsAndSubModels
(
- IOobject::groupName(modelName, phaseModels_[phasei].name()),
- tempModels
+ IOobject::groupName(modelName, phase.name()),
+ tempModels,
+ correctFixedFluxBCs
);
- forAllConstIter(typename modelTypeTable, tempModels, tempModelIter)
+ forAllIter(typename modelTypeTable, tempModels, tempModelIter)
{
- const phasePairKey key(tempModelIter.key());
+ const phasePairKey& key(tempModelIter.key());
if (!models.found(key))
{
models.insert
(
key,
- HashTable>()
+ Pair>()
);
}
- models[tempModelIter.key()].insert
- (
- phaseModels_[phasei].name(),
- *tempModelIter
- );
+ const phasePair& pair = phasePairs_[key];
+
+ if (!pair.contains(phase))
+ {
+ FatalErrorInFunction
+ << "A two-sided " << modelType::typeName << " was "
+ << "specified for the " << phase.name() << " side of the "
+ << pair << " pair, but that phase is not part of that pair."
+ << exit(FatalError);
+ }
+
+ models[key][pair.index(phase)] = tempModelIter().ptr();
}
}
}
diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/multiphaseSystem/multiphaseSystems.C b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/multiphaseSystem/multiphaseSystems.C
index 9d1e750e0..1b68ee8e4 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/multiphaseSystem/multiphaseSystems.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/multiphaseSystem/multiphaseSystems.C
@@ -28,8 +28,9 @@ License
#include "phaseSystem.H"
#include "multiphaseSystem.H"
#include "MomentumTransferPhaseSystem.H"
-#include "HeatTransferPhaseSystem.H"
-#include "HeatAndMassTransferPhaseSystem.H"
+#include "OneResistanceHeatTransferPhaseSystem.H"
+#include "TwoResistanceHeatTransferPhaseSystem.H"
+#include "PhaseTransferPhaseSystem.H"
#include "PopulationBalancePhaseSystem.H"
#include "InterfaceCompositionPhaseChangePhaseSystem.H"
#include "ThermalPhaseChangePhaseSystem.H"
@@ -39,41 +40,32 @@ License
namespace Foam
{
typedef
- HeatTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ OneResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
- heatAndMomentumTransferMultiphaseSystem;
+ basicMultiphaseSystem;
addNamedToRunTimeSelectionTable
(
multiphaseSystem,
- heatAndMomentumTransferMultiphaseSystem,
+ basicMultiphaseSystem,
dictionary,
- heatAndMomentumTransferMultiphaseSystem
- );
-
- typedef
- HeatAndMassTransferPhaseSystem
- <
- MomentumTransferPhaseSystem
- >
- heatAndMassTransferMultiphaseSystem;
-
- addNamedToRunTimeSelectionTable
- (
- multiphaseSystem,
- heatAndMassTransferMultiphaseSystem,
- dictionary,
- heatAndMassTransferMultiphaseSystem
+ basicMultiphaseSystem
);
typedef
InterfaceCompositionPhaseChangePhaseSystem
<
- HeatAndMassTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ TwoResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
>
interfaceCompositionPhaseChangeMultiphaseSystem;
@@ -89,9 +81,12 @@ namespace Foam
typedef
ThermalPhaseChangePhaseSystem
<
- HeatAndMassTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ TwoResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
>
thermalPhaseChangeMultiphaseSystem;
@@ -105,12 +100,14 @@ namespace Foam
);
typedef
-
PopulationBalancePhaseSystem
<
- HeatAndMassTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ OneResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
>
populationBalanceMultiphaseSystem;
@@ -128,9 +125,12 @@ namespace Foam
<
PopulationBalancePhaseSystem
<
- HeatAndMassTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ TwoResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
>
>
diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystems.C b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystems.C
index 10cdd1b42..7d49fd0c2 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystems.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystems.C
@@ -28,8 +28,9 @@ License
#include "phaseSystem.H"
#include "twoPhaseSystem.H"
#include "MomentumTransferPhaseSystem.H"
-#include "HeatTransferPhaseSystem.H"
-#include "HeatAndMassTransferPhaseSystem.H"
+#include "OneResistanceHeatTransferPhaseSystem.H"
+#include "TwoResistanceHeatTransferPhaseSystem.H"
+#include "PhaseTransferPhaseSystem.H"
#include "PopulationBalancePhaseSystem.H"
#include "InterfaceCompositionPhaseChangePhaseSystem.H"
#include "ThermalPhaseChangePhaseSystem.H"
@@ -39,41 +40,32 @@ License
namespace Foam
{
typedef
- HeatTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ OneResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
- heatAndMomentumTransferTwoPhaseSystem;
+ basicTwoPhaseSystem;
addNamedToRunTimeSelectionTable
(
twoPhaseSystem,
- heatAndMomentumTransferTwoPhaseSystem,
+ basicTwoPhaseSystem,
dictionary,
- heatAndMomentumTransferTwoPhaseSystem
- );
-
- typedef
- HeatAndMassTransferPhaseSystem
- <
- MomentumTransferPhaseSystem
- >
- heatAndMassTransferTwoPhaseSystem;
-
- addNamedToRunTimeSelectionTable
- (
- twoPhaseSystem,
- heatAndMassTransferTwoPhaseSystem,
- dictionary,
- heatAndMassTransferTwoPhaseSystem
+ basicTwoPhaseSystem
);
typedef
InterfaceCompositionPhaseChangePhaseSystem
<
- HeatAndMassTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ TwoResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
>
interfaceCompositionPhaseChangeTwoPhaseSystem;
@@ -89,10 +81,13 @@ namespace Foam
typedef
ThermalPhaseChangePhaseSystem
<
- HeatAndMassTransferPhaseSystem
- <
- MomentumTransferPhaseSystem
- >
+ PhaseTransferPhaseSystem
+ <
+ TwoResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
+ >
>
thermalPhaseChangeTwoPhaseSystem;
@@ -107,9 +102,12 @@ namespace Foam
typedef
PopulationBalancePhaseSystem
<
- HeatAndMassTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ OneResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
>
populationBalanceTwoPhaseSystem;
@@ -127,9 +125,12 @@ namespace Foam
<
PopulationBalancePhaseSystem
<
- HeatAndMassTransferPhaseSystem
+ PhaseTransferPhaseSystem
<
- MomentumTransferPhaseSystem
+ TwoResistanceHeatTransferPhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
>
>
>
diff --git a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/binaryBreakup/constant/phaseProperties b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/binaryBreakup/constant/phaseProperties
index 8ecbc1b6c..94adfd76f 100644
--- a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/binaryBreakup/constant/phaseProperties
+++ b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/binaryBreakup/constant/phaseProperties
@@ -168,28 +168,10 @@ drag
virtualMass
();
-heatTransfer.air1
+heatTransfer
();
-heatTransfer.air2
-();
-
-heatTransfer.air3
-();
-
-heatTransfer.water
-();
-
-massTransfer.air1
-();
-
-massTransfer.air2
-();
-
-massTransfer.air3
-();
-
-massTransfer.water
+phaseTransfer
();
lift
diff --git a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/breakup/constant/phaseProperties b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/breakup/constant/phaseProperties
index 5ec6f774c..24c2a5b78 100644
--- a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/breakup/constant/phaseProperties
+++ b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/breakup/constant/phaseProperties
@@ -169,28 +169,10 @@ drag
virtualMass
();
-heatTransfer.air1
+heatTransfer
();
-heatTransfer.air2
-();
-
-heatTransfer.air3
-();
-
-heatTransfer.water
-();
-
-massTransfer.air1
-();
-
-massTransfer.air2
-();
-
-massTransfer.air3
-();
-
-massTransfer.water
+phaseTransfer
();
lift
diff --git a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/coalescence/constant/phaseProperties b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/coalescence/constant/phaseProperties
index e6b4288c8..d6ca9e0b2 100644
--- a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/coalescence/constant/phaseProperties
+++ b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/coalescence/constant/phaseProperties
@@ -210,28 +210,10 @@ drag
virtualMass
();
-heatTransfer.air1
+heatTransfer
();
-heatTransfer.air2
-();
-
-heatTransfer.air3
-();
-
-heatTransfer.water
-();
-
-massTransfer.air1
-();
-
-massTransfer.air2
-();
-
-massTransfer.air3
-();
-
-massTransfer.water
+phaseTransfer
();
lift
diff --git a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/simultaneousCoalescenceAndBreakup/constant/phaseProperties b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/simultaneousCoalescenceAndBreakup/constant/phaseProperties
index a43d0afd9..dc2d97f54 100644
--- a/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/simultaneousCoalescenceAndBreakup/constant/phaseProperties
+++ b/test/multiphase/reactingMultiphaseEulerFoam/populationBalanceModeling/simultaneousCoalescenceAndBreakup/constant/phaseProperties
@@ -174,28 +174,10 @@ drag
virtualMass
();
-heatTransfer.air1
+heatTransfer
();
-heatTransfer.air2
-();
-
-heatTransfer.air3
-();
-
-heatTransfer.water
-();
-
-massTransfer.air1
-();
-
-massTransfer.air2
-();
-
-massTransfer.air3
-();
-
-massTransfer.water
+phaseTransfer
();
lift
diff --git a/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/drift/constant/phaseProperties b/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/drift/constant/phaseProperties
index 7dfd21d74..00292d2a8 100644
--- a/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/drift/constant/phaseProperties
+++ b/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/drift/constant/phaseProperties
@@ -141,16 +141,10 @@ drag
virtualMass
();
-heatTransfer.air
+heatTransfer
();
-heatTransfer.water
-();
-
-massTransfer.air
-();
-
-massTransfer.water
+phaseTransfer
();
lift
diff --git a/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/negativeDrift/constant/phaseProperties b/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/negativeDrift/constant/phaseProperties
index 14e2b7db7..babadfb29 100644
--- a/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/negativeDrift/constant/phaseProperties
+++ b/test/multiphase/reactingTwoPhaseEulerFoam/populationBalanceModeling/negativeDrift/constant/phaseProperties
@@ -135,16 +135,10 @@ drag
virtualMass
();
-heatTransfer.air
+heatTransfer
();
-heatTransfer.water
-();
-
-massTransfer.air
-();
-
-massTransfer.water
+phaseTransfer
();
lift
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_2phase/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_2phase/constant/phaseProperties
index 698ff5793..490294524 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_2phase/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_2phase/constant/phaseProperties
@@ -19,7 +19,7 @@ type thermalPhaseChangeMultiphaseSystem;
phases (gas liquid);
-massTransfer on;
+phaseChange on;
gas
{
@@ -143,10 +143,7 @@ heatTransfer.liquid
}
);
-massTransfer.gas
-();
-
-massTransfer.liquid
+phaseTransfer
();
lift
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_3phase/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_3phase/constant/phaseProperties
index b9f16eaf5..c7577b216 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_3phase/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/RAS/wallBoiling1D_3phase/constant/phaseProperties
@@ -19,7 +19,7 @@ type thermalPhaseChangeMultiphaseSystem;
phases (gas gas2 liquid);
-massTransfer on;
+phaseChange on;
gas
{
@@ -203,13 +203,7 @@ heatTransfer.liquid
}
);
-massTransfer.gas
-();
-
-massTransfer.gas2
-();
-
-massTransfer.liquid
+phaseTransfer
();
lift
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bed/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bed/constant/phaseProperties
index 301afa9ae..fb719a694 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bed/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bed/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferMultiphaseSystem;
+type basicMultiphaseSystem;
phases (air water solid);
@@ -191,6 +191,9 @@ virtualMass
heatTransfer
();
+phaseTransfer
+();
+
lift
();
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
index a7e648285..b9d6c15e4 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferMultiphaseSystem;
+type basicMultiphaseSystem;
phases (air water);
@@ -159,6 +159,9 @@ heatTransfer
}
);
+phaseTransfer
+();
+
lift
();
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnFixedPolydisperse/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnFixedPolydisperse/constant/phaseProperties
index 4653dff1a..4ac33c9f1 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnFixedPolydisperse/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnFixedPolydisperse/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferMultiphaseSystem;
+type basicMultiphaseSystem;
phases (air1 air2 water);
@@ -302,6 +302,9 @@ heatTransfer
}
);
+phaseTransfer
+();
+
lift
();
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnPolydisperse/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnPolydisperse/constant/phaseProperties
index f376397ec..df9a58f72 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnPolydisperse/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumnPolydisperse/constant/phaseProperties
@@ -334,97 +334,48 @@ virtualMass
}
);
-heatTransfer.air1
+heatTransfer
(
(air1 in water)
{
- type spherical;
- residualAlpha 1e-3;
+ type RanzMarshall;
+ residualAlpha 1e-4;
}
(water in air1)
{
- type RanzMarshall;
- residualAlpha 1e-3;
- }
-
- (air1 in air2)
- {
- type spherical;
- residualAlpha 1e-3;
- }
-
- (air2 in air1)
- {
- type spherical;
- residualAlpha 1e-3;
- }
-);
-
-heatTransfer.air2
-(
- (air2 in water)
- {
- type spherical;
- residualAlpha 1e-3;
- }
-
- (water in air2)
- {
- type RanzMarshall;
- residualAlpha 1e-3;
- }
-
- (air1 in air2)
- {
- type spherical;
- residualAlpha 1e-3;
- }
-
- (air2 in air1)
- {
- type spherical;
- residualAlpha 1e-3;
- }
-);
-
-heatTransfer.water
-(
- (air1 in water)
- {
- type RanzMarshall;
- residualAlpha 1e-3;
- }
-
- (water in air1)
- {
- type spherical;
- residualAlpha 1e-3;
+ type RanzMarshall;
+ residualAlpha 1e-4;
}
(air2 in water)
{
- type RanzMarshall;
- residualAlpha 1e-3;
+ type RanzMarshall;
+ residualAlpha 1e-4;
}
(water in air2)
{
- type spherical;
- residualAlpha 1e-3;
+ type RanzMarshall;
+ residualAlpha 1e-4;
+ }
+
+ (air1 in air2)
+ {
+ type RanzMarshall;
+ residualAlpha 1e-4;
+ }
+
+ (air2 in air1)
+ {
+ type RanzMarshall;
+ residualAlpha 1e-4;
}
);
-massTransfer.air1
+phaseTransfer
();
-massTransfer.air2
-();
-
-massTransfer.water
-();
-
-
lift
();
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
index 1a63c74cb..6ab28d87c 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferMultiphaseSystem;
+type basicMultiphaseSystem;
phases (water oil mercury air);
@@ -456,6 +456,9 @@ heatTransfer
}
);
+phaseTransfer
+();
+
lift
();
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties
index a34d27b99..4e6e5032b 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/trickleBed/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferMultiphaseSystem;
+type basicMultiphaseSystem;
phases (air water solid);
@@ -176,6 +176,9 @@ virtualMass
heatTransfer
();
+phaseTransfer
+();
+
lift
();
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties
index 2e2cdb3ce..495b7548a 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (air water);
@@ -153,6 +153,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/constant/phaseProperties
index d53b4d719..32267f044 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (solids gas);
@@ -100,6 +100,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties
index 2e2cdb3ce..495b7548a 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (air water);
@@ -153,6 +153,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/constant/phaseProperties
index 0dcc5e83d..1cbcbc71c 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/constant/phaseProperties
@@ -196,6 +196,10 @@ massTransfer.liquid
(
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnPolydisperse/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnPolydisperse/constant/phaseProperties
index 15ffaf76f..37c9b4d49 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnPolydisperse/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnPolydisperse/constant/phaseProperties
@@ -201,41 +201,22 @@ virtualMass
}
);
-heatTransfer.air
+heatTransfer
(
(air in water)
{
- type spherical;
- residualAlpha 1e-3;
+ type RanzMarshall;
+ residualAlpha 1e-4;
}
(water in air)
{
- type RanzMarshall;
- residualAlpha 1e-3;
+ type RanzMarshall;
+ residualAlpha 1e-4;
}
);
-heatTransfer.water
-(
- (air in water)
- {
- type RanzMarshall;
- residualAlpha 1e-3;
- }
-
- (water in air)
- {
- type spherical;
- residualAlpha 1e-3;
- }
-);
-
-massTransfer.air
-(
-);
-
-massTransfer.water
+phaseTransfer
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties
index 39a5e3d5d..bf53d2f36 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (particles air);
@@ -95,6 +95,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/constant/phaseProperties
index 22004881b..99a9ddc93 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/constant/phaseProperties
@@ -19,7 +19,7 @@ type thermalPhaseChangeTwoPhaseSystem;
phases (gas liquid);
-massTransfer on;
+phaseChange on;
gas
{
@@ -126,10 +126,7 @@ heatTransfer.liquid
}
);
-massTransfer.gas
-();
-
-massTransfer.liquid
+phaseTransfer
();
lift
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling1D/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling1D/constant/phaseProperties
index 9a67ecb95..d2f05c458 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling1D/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling1D/constant/phaseProperties
@@ -19,7 +19,7 @@ type thermalPhaseChangeTwoPhaseSystem;
phases (gas liquid);
-massTransfer on;
+phaseChange on;
gas
{
@@ -118,11 +118,9 @@ heatTransfer.liquid
}
);
-massTransfer.gas
-();
-
-massTransfer.liquid
-();
+phaseTransfer
+(
+);
lift
();
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/constant/phaseProperties
index da182023b..17fff560b 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/constant/phaseProperties
@@ -19,7 +19,7 @@ type thermalPhaseChangeTwoPhaseSystem;
phases (gas liquid);
-massTransfer on;
+phaseChange on;
gas
{
@@ -169,10 +169,7 @@ heatTransfer.liquid
}
);
-massTransfer.gas
-();
-
-massTransfer.liquid
+phaseTransfer
();
lift
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingPolyDisperse/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingPolyDisperse/constant/phaseProperties
index a5ee44680..f80721020 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingPolyDisperse/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingPolyDisperse/constant/phaseProperties
@@ -19,7 +19,7 @@ type thermalPhaseChangePopulationBalanceTwoPhaseSystem;
phases (gas liquid);
-massTransfer on;
+phaseChange on;
populationBalances (bubbles);
@@ -188,10 +188,7 @@ heatTransfer.liquid
}
);
-massTransfer.gas
-();
-
-massTransfer.liquid
+phaseTransfer
();
lift
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
index 92508e67a..e79e79b7b 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (air water);
@@ -156,6 +156,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/constant/phaseProperties
index 91f7bf3a3..98af514ee 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/constant/phaseProperties
@@ -207,6 +207,10 @@ massTransfer.liquid
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/constant/phaseProperties
index 17a75c8bb..10a402fc0 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/constant/phaseProperties
@@ -216,6 +216,10 @@ massTransfer.liquid
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties
index 2e3ef5368..4b33cc740 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (air water);
@@ -176,6 +176,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties
index 140b966ae..98588881a 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (particles air);
@@ -97,6 +97,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/constant/phaseProperties
index 1412341ad..2ed64632d 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (air water);
@@ -154,6 +154,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
index 02325b51f..303d5b4a8 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
@@ -15,7 +15,7 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-type heatAndMomentumTransferTwoPhaseSystem;
+type basicTwoPhaseSystem;
phases (air water);
@@ -153,6 +153,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/constant/phaseProperties b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/constant/phaseProperties
index 5d6b10626..6164a30b1 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/constant/phaseProperties
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/constant/phaseProperties
@@ -19,7 +19,7 @@ type thermalPhaseChangeTwoPhaseSystem;
phases (steam water);
-massTransfer on;
+phaseChange on;
steam
{
@@ -126,10 +126,7 @@ heatTransfer.water
}
);
-massTransfer.steam
-();
-
-massTransfer.water
+phaseTransfer
();
lift
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties
index 34551827f..f4713a115 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/constant/phaseProperties
@@ -136,6 +136,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties
index 34551827f..f4713a115 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/constant/phaseProperties
@@ -136,6 +136,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties
index 18e714aec..5d7265a41 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/constant/phaseProperties
@@ -88,6 +88,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
index c96162d7c..1dd33cd57 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/constant/phaseProperties
@@ -137,6 +137,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties
index e74028c4b..2c53b52ae 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/constant/phaseProperties
@@ -157,6 +157,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties
index e0ec9c1cd..5a4018061 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/constant/phaseProperties
@@ -89,6 +89,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/constant/phaseProperties
index ab168c846..f4507a578 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/constant/phaseProperties
@@ -137,6 +137,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties b/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
index 808de74ee..d656a5ced 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/constant/phaseProperties
@@ -136,6 +136,10 @@ heatTransfer
}
);
+phaseTransfer
+(
+);
+
lift
(
);