ENH: twoPhaseEulerFoam: Removed requirement that a model (most likely "none") had to be specified for all pairs

This commit is contained in:
william
2014-01-23 16:37:16 +00:00
parent acf490cb44
commit 87115af2d0
23 changed files with 238 additions and 541 deletions

View File

@ -35,6 +35,8 @@ namespace Foam
defineRunTimeSelectionTable(dragModel, dictionary);
}
const Foam::dimensionSet Foam::dragModel::dimK(1, -3, -1, 0, 0);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View File

@ -93,6 +93,12 @@ public:
);
// Static data members
//- Coefficient dimensions
static const dimensionSet dimK;
// Constructors
// Construct without residual constants

View File

@ -34,6 +34,8 @@ namespace Foam
defineRunTimeSelectionTable(heatTransferModel, dictionary);
}
const Foam::dimensionSet Foam::heatTransferModel::dimK(1, -1, -3, -1, 0);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View File

@ -80,6 +80,12 @@ public:
);
// Static data members
//- Coefficient dimensions
static const dimensionSet dimK;
// Constructors
//- Construct froma dictionary and a phase pair

View File

@ -35,6 +35,8 @@ namespace Foam
defineRunTimeSelectionTable(liftModel, dictionary);
}
const Foam::dimensionSet Foam::liftModel::dimF(1, -2, -2, 0, 0);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View File

@ -81,6 +81,12 @@ public:
);
// Static data members
//- Force dimensions
static const dimensionSet dimF;
// Constructors
//- Construct from a dictionary and a phase pair

View File

@ -34,6 +34,8 @@ namespace Foam
defineRunTimeSelectionTable(turbulentDispersionModel, dictionary);
}
const Foam::dimensionSet Foam::turbulentDispersionModel::dimF(1, -2, -2, 0, 0);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View File

@ -80,6 +80,11 @@ public:
(dict, pair)
);
// Static data members
//- Force dimensions
static const dimensionSet dimF;
// Constructors

View File

@ -34,6 +34,8 @@ namespace Foam
defineRunTimeSelectionTable(virtualMassModel, dictionary);
}
const Foam::dimensionSet Foam::virtualMassModel::dimK(dimDensity);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View File

@ -83,6 +83,12 @@ public:
);
// Static data members
//- Coefficient dimensions
static const dimensionSet dimK;
// Constructors
//- Construct from a dictionary and a phase pair

View File

@ -26,6 +26,8 @@ License
#include "wallLubricationModel.H"
#include "phasePair.H"
const Foam::dimensionSet Foam::wallLubricationModel::dimF(1, -2, -2, 0, 0);
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam

View File

@ -84,6 +84,12 @@ public:
);
// Static data members
//- Coefficient dimensions
static const dimensionSet dimF;
// Constructors
//- Construct from components

View File

@ -66,30 +66,6 @@ Foam::BlendedInterfacialModel<modelType>::BlendedInterfacialModel
pair_(pair),
pair1In2_(pair1In2),
pair2In1_(pair2In1),
model_
(
modelType::New
(
modelTable[pair_],
pair_
)
),
model1In2_
(
modelType::New
(
modelTable[pair1In2_],
pair1In2_
)
),
model2In1_
(
modelType::New
(
modelTable[pair2In1_],
pair2In1_
)
),
blending_
(
blendingMethod::New
@ -105,7 +81,43 @@ Foam::BlendedInterfacialModel<modelType>::BlendedInterfacialModel
dimless,
blendingDict.lookup("residualAlpha")
)
{}
{
if (modelTable.found(pair_))
{
model_.set
(
modelType::New
(
modelTable[pair_],
pair_
).ptr()
);
}
if (modelTable.found(pair1In2_))
{
model1In2_.set
(
modelType::New
(
modelTable[pair1In2_],
pair1In2_
).ptr()
);
}
if (modelTable.found(pair2In1_))
{
model2In1_.set
(
modelType::New
(
modelTable[pair2In1_],
pair2In1_
).ptr()
);
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
@ -121,21 +133,56 @@ template<class modelType>
Foam::tmp<Foam::volScalarField>
Foam::BlendedInterfacialModel<modelType>::K() const
{
tmp<volScalarField> f1(blending_->f1());
tmp<volScalarField> f2(blending_->f2());
tmp<volScalarField> f1, f2;
tmp<volScalarField> c
if (model_.valid() || model1In2_.valid())
{
f1 = blending_->f1();
}
if (model_.valid() || model2In1_.valid())
{
f2 = blending_->f2();
}
tmp<volScalarField> x
(
model_->K()*(f1() - f2())
+ model1In2_->K()*(1 - f1)
+ model2In1_->K()*f2
new volScalarField
(
IOobject
(
modelType::typeName + "Coeff",
pair_.phase1().mesh().time().timeName(),
pair_.phase1().mesh()
),
pair_.phase1().mesh(),
dimensionedScalar("zero", modelType::dimK, 0)
)
);
c() *= max(pair_.phase1()*pair_.phase2(), residualAlpha_);
if (model_.valid())
{
x() += model_->K()*(f1() - f2());
}
correctFixedFluxBCs(c());
if (model1In2_.valid())
{
x() += model1In2_->K()*(1 - f1);
}
return c;
if (model2In1_.valid())
{
x() += model2In1_->K()*f2;
}
if (model_.valid() || model1In2_.valid() || model2In1_.valid())
{
x() *= max(pair_.phase1()*pair_.phase2(), residualAlpha_);
correctFixedFluxBCs(x());
}
return x;
}
@ -144,19 +191,54 @@ template<class Type>
Foam::tmp<Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh> >
Foam::BlendedInterfacialModel<modelType>::F() const
{
tmp<volScalarField> f1(blending_->f1());
tmp<volScalarField> f2(blending_->f2());
tmp<volScalarField> f1, f2;
tmp<GeometricField<Type, fvPatchField, volMesh> > v
if (model_.valid() || model1In2_.valid())
{
f1 = blending_->f1();
}
if (model_.valid() || model2In1_.valid())
{
f2 = blending_->f2();
}
tmp<GeometricField<Type, fvPatchField, volMesh> > x
(
model_->F()*(f1() - f2())
+ model1In2_->F()*(1 - f1)
- model2In1_->F()*f2
new GeometricField<Type, fvPatchField, volMesh>
(
IOobject
(
modelType::typeName + "Coeff",
pair_.phase1().mesh().time().timeName(),
pair_.phase1().mesh()
),
pair_.phase1().mesh(),
dimensioned<Type>("zero", modelType::dimF, pTraits<Type>::zero)
)
);
correctFixedFluxBCs(v());
if (model_.valid())
{
x() += model_->F()*(f1() - f2());
}
return v;
if (model1In2_.valid())
{
x() += model1In2_->F()*(1 - f1);
}
if (model2In1_.valid())
{
x() -= model2In1_->F()*f2; // note : subtraction
}
if (model_.valid() || model1In2_.valid() || model2In1_.valid())
{
correctFixedFluxBCs(x());
}
return x;
}

View File

@ -38,6 +38,8 @@ SourceFiles
#include "phasePair.H"
#include "orderedPhasePair.H"
#include "geometricZeroField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
@ -50,6 +52,8 @@ namespace Foam
template<class modelType>
class BlendedInterfacialModel
{
private:
// Private data
//- Unordered phase pair

View File

@ -37,16 +37,20 @@ Foam::orderedPhasePair::orderedPhasePair
const dictTable& aspectRatioTable
)
:
phasePair(dispersed, continuous, g, sigmaTable, true),
aspectRatio_
phasePair(dispersed, continuous, g, sigmaTable, true)
{
if (aspectRatioTable.found(*this))
{
aspectRatio_.set
(
aspectRatioModel::New
(
aspectRatioTable[*this],
*this
)
)
{}
).ptr()
);
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
@ -79,6 +83,13 @@ Foam::word Foam::orderedPhasePair::name() const
Foam::tmp<Foam::volScalarField> Foam::orderedPhasePair::E() const
{
if (!aspectRatio_.valid())
{
FatalErrorIn("Foam::orderedPhasePair::E() const")
<< "Aspect ratio model not specified for " << *this << "."
<< exit(FatalError);
}
return aspectRatio_->E();
}

View File

@ -185,7 +185,7 @@ Foam::tmp<Foam::volScalarField> Foam::phasePair::Ta() const
Foam::tmp<Foam::volScalarField> Foam::phasePair::E() const
{
FatalErrorIn("Foam::phasePair::dispersed() const")
FatalErrorIn("Foam::phasePair::E() const")
<< "Requested aspect ratio of the dispersed phase in an unordered pair"
<< exit(FatalError);

View File

@ -110,21 +110,18 @@ drag
}
);
lift
virtualMass
(
(air in water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
);
@ -141,67 +138,18 @@ heatTransfer
type RanzMarshall;
residualRe 1e-3;
}
(air and water)
{
type none;
}
);
virtualMass
lift
(
(air in water)
{
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type constantCoefficient;
Cvm 0.5;
}
(air and water)
{
type none;
}
);
wallLubrication
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
turbulentDispersion
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
// Minimum allowable pressure

View File

@ -110,21 +110,18 @@ drag
}
);
lift
virtualMass
(
(air in water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
);
@ -141,67 +138,18 @@ heatTransfer
type RanzMarshall;
residualRe 1e-3;
}
(air and water)
{
type none;
}
);
virtualMass
lift
(
(air in water)
{
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type constantCoefficient;
Cvm 0.5;
}
(air and water)
{
type none;
}
);
wallLubrication
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
turbulentDispersion
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
// Minimum allowable pressure

View File

@ -52,17 +52,6 @@ sigma
aspectRatio
(
(particles in air)
{
type constant;
E0 1.0;
}
(air in particles)
{
type constant;
E0 1.0;
}
);
drag
@ -78,33 +67,14 @@ drag
type none;
}
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
lift
virtualMass
(
(particles in air)
{
type none;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
);
@ -115,71 +85,18 @@ heatTransfer
type RanzMarshall;
residualRe 1e-3;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
virtualMass
lift
(
(particles in air)
{
type constantCoefficient;
Cvm 0.5;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
wallLubrication
(
(particles in air)
{
type none;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
turbulentDispersion
(
(particles in air)
{
type none;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
// Minimum allowable pressure

View File

@ -110,21 +110,18 @@ drag
}
);
lift
virtualMass
(
(air in water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
);
@ -141,67 +138,18 @@ heatTransfer
type RanzMarshall;
residualRe 1e-3;
}
(air and water)
{
type none;
}
);
virtualMass
lift
(
(air in water)
{
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type constantCoefficient;
Cvm 0.5;
}
(air and water)
{
type none;
}
);
wallLubrication
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
turbulentDispersion
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
// Minimum allowable pressure

View File

@ -19,32 +19,11 @@ phases (air water);
air
{
diameterModel IATE;
IATECoeffs
diameterModel isothermal;
isothermalCoeffs
{
dMax 1e-2;
dMin 1e-4;
residualAlpha 1e-6;
sources
(
wakeEntrainmentCoalescence
{
Cwe 0.002;
}
randomCoalescence
{
Crc 0.04;
C 3;
alphaMax 0.75;
}
turbulentBreakUp
{
Cti 0.085;
WeCr 6;
}
);
d0 3e-3;
p0 1e5;
}
}
@ -131,21 +110,18 @@ drag
}
);
lift
virtualMass
(
(air in water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
);
@ -162,67 +138,18 @@ heatTransfer
type RanzMarshall;
residualRe 1e-3;
}
(air and water)
{
type none;
}
);
virtualMass
lift
(
(air in water)
{
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type constantCoefficient;
Cvm 0.5;
}
(air and water)
{
type none;
}
);
wallLubrication
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
turbulentDispersion
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
// Minimum allowable pressure

View File

@ -52,17 +52,6 @@ sigma
aspectRatio
(
(particles in air)
{
type constant;
E0 1.0;
}
(air in particles)
{
type constant;
E0 1.0;
}
);
drag
@ -78,33 +67,14 @@ drag
type none;
}
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
lift
virtualMass
(
(particles in air)
{
type none;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
);
@ -115,71 +85,18 @@ heatTransfer
type RanzMarshall;
residualRe 1e-3;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
virtualMass
lift
(
(particles in air)
{
type constantCoefficient;
Cvm 0.5;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
wallLubrication
(
(particles in air)
{
type none;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
turbulentDispersion
(
(particles in air)
{
type none;
}
(air in particles)
{
type none;
}
(particles and air)
{
type none;
}
);
// Minimum allowable pressure

View File

@ -110,21 +110,18 @@ drag
}
);
lift
virtualMass
(
(air in water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
type constantCoefficient;
Cvm 0.5;
}
);
@ -141,67 +138,18 @@ heatTransfer
type RanzMarshall;
residualRe 1e-3;
}
(air and water)
{
type none;
}
);
virtualMass
lift
(
(air in water)
{
type constantCoefficient;
Cvm 0.5;
}
(water in air)
{
type constantCoefficient;
Cvm 0.5;
}
(air and water)
{
type none;
}
);
wallLubrication
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
turbulentDispersion
(
(air in water)
{
type none;
}
(water in air)
{
type none;
}
(air and water)
{
type none;
}
);
// Minimum allowable pressure