driftFluxFoam::relativeVelocityModels: Added MichaelsBolger model for flocculated suspensions
Description
Michaels & Bolger relative velocity model
Reference:
\verbatim
Michaels, A. S., & Bolger, J. C. (1962).
Settling rates and sediment volumes
of flocculated kaolin suspensions.
Industrial & Engineering Chemistry Fundamentals, 1(1), 24-33.
\endverbatim
Usage
Example usage:
\verbatim
relativeVelocityModel MichaelsBolger;
MichaelsBolgerCoeffs
{
a0 0; // Extended Michaels & Bolger coefficient,
a1 4.65; // Exponent
alphaMax 0.6; // Maximum dispersed phase-fraction
// (packing fraction)
}
\endverbatim
This commit is contained in:
@ -24,6 +24,7 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "incompressibleTwoPhaseInteractingMixture.H"
|
#include "incompressibleTwoPhaseInteractingMixture.H"
|
||||||
|
#include "mixtureViscosityModel.H"
|
||||||
#include "relativeVelocityModel.H"
|
#include "relativeVelocityModel.H"
|
||||||
#include "fvcDiv.H"
|
#include "fvcDiv.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
@ -48,7 +49,9 @@ incompressibleTwoPhaseInteractingMixture
|
|||||||
:
|
:
|
||||||
twoPhaseMixture(U.mesh()),
|
twoPhaseMixture(U.mesh()),
|
||||||
|
|
||||||
muModel_(mixtureViscosityModel::New(U.mesh(), phase1Name())),
|
U_(U),
|
||||||
|
|
||||||
|
muModel_(mixtureViscosityModel::New(*this)),
|
||||||
nucModel_(viscosityModel::New(U.mesh(), phase2Name())),
|
nucModel_(viscosityModel::New(U.mesh(), phase2Name())),
|
||||||
|
|
||||||
rhod_("rho", dimDensity, muModel_()),
|
rhod_("rho", dimDensity, muModel_()),
|
||||||
@ -59,9 +62,7 @@ incompressibleTwoPhaseInteractingMixture
|
|||||||
dimLength,
|
dimLength,
|
||||||
muModel_->lookupOrDefault("d", 0.0)
|
muModel_->lookupOrDefault("d", 0.0)
|
||||||
),
|
),
|
||||||
alphaMax_(muModel_->lookupOrDefault("alphaMax", 1.0)),
|
alphaMax_(lookupOrDefault("alphaMax", 1.0)),
|
||||||
|
|
||||||
U_(U),
|
|
||||||
|
|
||||||
g_(g),
|
g_(g),
|
||||||
|
|
||||||
@ -95,6 +96,20 @@ Foam::incompressibleTwoPhaseInteractingMixture::
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
const Foam::volScalarField&
|
||||||
|
Foam::incompressibleTwoPhaseInteractingMixture::alphad() const
|
||||||
|
{
|
||||||
|
return alpha1();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::volScalarField&
|
||||||
|
Foam::incompressibleTwoPhaseInteractingMixture::alphac() const
|
||||||
|
{
|
||||||
|
return alpha2();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::mixtureViscosityModel&
|
const Foam::mixtureViscosityModel&
|
||||||
Foam::incompressibleTwoPhaseInteractingMixture::muModel() const
|
Foam::incompressibleTwoPhaseInteractingMixture::muModel() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -39,7 +39,6 @@ SourceFiles
|
|||||||
|
|
||||||
#include "twoPhaseMixture.H"
|
#include "twoPhaseMixture.H"
|
||||||
#include "viscosityModel.H"
|
#include "viscosityModel.H"
|
||||||
#include "mixtureViscosityModel.H"
|
|
||||||
#include "uniformDimensionedFields.H"
|
#include "uniformDimensionedFields.H"
|
||||||
#include "IOMRFZoneList.H"
|
#include "IOMRFZoneList.H"
|
||||||
|
|
||||||
@ -48,6 +47,7 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
class mixtureViscosityModel;
|
||||||
class relativeVelocityModel;
|
class relativeVelocityModel;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
@ -61,6 +61,8 @@ class incompressibleTwoPhaseInteractingMixture
|
|||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
|
volVectorField& U_;
|
||||||
|
|
||||||
autoPtr<mixtureViscosityModel> muModel_;
|
autoPtr<mixtureViscosityModel> muModel_;
|
||||||
autoPtr<viscosityModel> nucModel_;
|
autoPtr<viscosityModel> nucModel_;
|
||||||
|
|
||||||
@ -73,8 +75,6 @@ class incompressibleTwoPhaseInteractingMixture
|
|||||||
//- Optional maximum dispersed phase-fraction (e.g. packing limit)
|
//- Optional maximum dispersed phase-fraction (e.g. packing limit)
|
||||||
scalar alphaMax_;
|
scalar alphaMax_;
|
||||||
|
|
||||||
volVectorField& U_;
|
|
||||||
|
|
||||||
//- Acceleration due to gravity
|
//- Acceleration due to gravity
|
||||||
const uniformDimensionedVectorField& g_;
|
const uniformDimensionedVectorField& g_;
|
||||||
|
|
||||||
@ -109,6 +109,12 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return const-access to the continuous phase-fraction
|
||||||
|
const volScalarField& alphac() const;
|
||||||
|
|
||||||
|
//- Return const-access to the dispersed phase-fraction
|
||||||
|
const volScalarField& alphad() const;
|
||||||
|
|
||||||
//- Return const-access to the mixture viscosityModel
|
//- Return const-access to the mixture viscosityModel
|
||||||
const mixtureViscosityModel& muModel() const;
|
const mixtureViscosityModel& muModel() const;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2014-2021 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -49,11 +49,10 @@ namespace mixtureViscosityModels
|
|||||||
|
|
||||||
Foam::mixtureViscosityModels::BinghamPlastic::BinghamPlastic
|
Foam::mixtureViscosityModels::BinghamPlastic::BinghamPlastic
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
plastic(mesh, group),
|
plastic(mixture),
|
||||||
yieldStressCoeff_
|
yieldStressCoeff_
|
||||||
(
|
(
|
||||||
"BinghamCoeff",
|
"BinghamCoeff",
|
||||||
@ -95,7 +94,7 @@ Foam::mixtureViscosityModels::BinghamPlastic::mu
|
|||||||
(
|
(
|
||||||
log10(vGreat),
|
log10(vGreat),
|
||||||
yieldStressExponent_
|
yieldStressExponent_
|
||||||
*(max(alpha_, scalar(0)) + yieldStressOffset_)
|
*(max(mixture_.alphad(), scalar(0)) + yieldStressOffset_)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
- pow
|
- pow
|
||||||
|
|||||||
@ -74,8 +74,11 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from mixture
|
||||||
BinghamPlastic(const fvMesh& mesh, const word& group);
|
BinghamPlastic
|
||||||
|
(
|
||||||
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -2,9 +2,12 @@ EXE_INC = \
|
|||||||
-I../incompressibleTwoPhaseInteractingMixture \
|
-I../incompressibleTwoPhaseInteractingMixture \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/physicalProperties/lnInclude \
|
-I$(LIB_SRC)/physicalProperties/lnInclude \
|
||||||
-I$(LIB_SRC)/twoPhaseModels/twoPhaseMixture/lnInclude
|
-I$(LIB_SRC)/twoPhaseModels/twoPhaseMixture/lnInclude \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
|
-I$(LIB_SRC)/meshTools/lnInclude
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-ltwoPhaseMixture \
|
-ltwoPhaseMixture \
|
||||||
-lphysicalProperties \
|
-lphysicalProperties \
|
||||||
-lfiniteVolume
|
-lfiniteVolume \
|
||||||
|
-lmeshTools
|
||||||
|
|||||||
@ -49,34 +49,16 @@ namespace mixtureViscosityModels
|
|||||||
|
|
||||||
Foam::mixtureViscosityModels::Quemada::Quemada
|
Foam::mixtureViscosityModels::Quemada::Quemada
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixtureViscosityModel(mesh, group),
|
mixtureViscosityModel(mixture),
|
||||||
alphaMax_
|
|
||||||
(
|
|
||||||
"alphaMax",
|
|
||||||
dimless,
|
|
||||||
optionalSubDict(typeName + "Coeffs").lookup("alphaMax")
|
|
||||||
),
|
|
||||||
q_(optionalSubDict(typeName + "Coeffs").lookupOrDefault("q", scalar(2))),
|
q_(optionalSubDict(typeName + "Coeffs").lookupOrDefault("q", scalar(2))),
|
||||||
muMax_
|
muMax_
|
||||||
(
|
(
|
||||||
"muMax",
|
"muMax",
|
||||||
dimDynamicViscosity,
|
dimDynamicViscosity,
|
||||||
optionalSubDict(typeName + "Coeffs").lookup("muMax")
|
optionalSubDict(typeName + "Coeffs").lookup("muMax")
|
||||||
),
|
|
||||||
alpha_
|
|
||||||
(
|
|
||||||
mesh.lookupObject<volScalarField>
|
|
||||||
(
|
|
||||||
IOobject::groupName
|
|
||||||
(
|
|
||||||
lookupOrDefault<word>("alpha", "alpha"),
|
|
||||||
group
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -90,7 +72,11 @@ Foam::mixtureViscosityModels::Quemada::mu
|
|||||||
const volVectorField& U
|
const volVectorField& U
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return min(muc*pow(1.0 - alpha_/alphaMax_, -q_), muMax_);
|
return min
|
||||||
|
(
|
||||||
|
muc*pow(max(1 - mixture_.alphad()/mixture_.alphaMax(), 0.0), -q_),
|
||||||
|
muMax_
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -100,8 +86,8 @@ bool Foam::mixtureViscosityModels::Quemada::read()
|
|||||||
{
|
{
|
||||||
const dictionary& dict = optionalSubDict(typeName + "Coeffs");
|
const dictionary& dict = optionalSubDict(typeName + "Coeffs");
|
||||||
|
|
||||||
dict.lookup("alphaMax") >> alphaMax_;
|
|
||||||
dict.lookup("q") >> q_;
|
dict.lookup("q") >> q_;
|
||||||
|
dict.lookup("muMax") >> muMax_;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,10 +40,11 @@ Usage
|
|||||||
\verbatim
|
\verbatim
|
||||||
viscosityModel Quemada;
|
viscosityModel Quemada;
|
||||||
|
|
||||||
alphaMax 0.6; // Maximum dispersed phase-fraction (packing fraction)
|
rho 1996; // Dispersed phase density
|
||||||
q 2; // Exponent, defaults to 2
|
|
||||||
|
q 2; // Exponent, defaults to 2
|
||||||
|
muMax 1e-2; // Maximum viscosity (for numerical stability)
|
||||||
|
|
||||||
rho 1996;
|
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
@ -75,18 +76,12 @@ class Quemada
|
|||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- Maximum dispersed phase-fraction (packing fraction)
|
|
||||||
dimensionedScalar alphaMax_;
|
|
||||||
|
|
||||||
//- Exponent (defaults to 2)
|
//- Exponent (defaults to 2)
|
||||||
scalar q_;
|
scalar q_;
|
||||||
|
|
||||||
//- Maximum viscosity
|
//- Maximum viscosity
|
||||||
dimensionedScalar muMax_;
|
dimensionedScalar muMax_;
|
||||||
|
|
||||||
//- Dispersed phase fraction
|
|
||||||
const volScalarField& alpha_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -96,8 +91,8 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from mixture
|
||||||
Quemada(const fvMesh& mesh, const word& group);
|
Quemada(const incompressibleTwoPhaseInteractingMixture& mixture);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2014-2021 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -39,11 +39,11 @@ namespace Foam
|
|||||||
|
|
||||||
Foam::mixtureViscosityModel::mixtureViscosityModel
|
Foam::mixtureViscosityModel::mixtureViscosityModel
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
viscosityModel(mesh, group)
|
viscosityModel(mixture.U().mesh(), mixture.phase1Name()),
|
||||||
|
mixture_(mixture)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2014-2021 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -42,7 +42,7 @@ SourceFiles
|
|||||||
#ifndef mixtureViscosityModel_H
|
#ifndef mixtureViscosityModel_H
|
||||||
#define mixtureViscosityModel_H
|
#define mixtureViscosityModel_H
|
||||||
|
|
||||||
#include "dictionary.H"
|
#include "incompressibleTwoPhaseInteractingMixture.H"
|
||||||
#include "viscosityModel.H"
|
#include "viscosityModel.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
|
||||||
@ -60,6 +60,14 @@ class mixtureViscosityModel
|
|||||||
public viscosityModel
|
public viscosityModel
|
||||||
{
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Mixture properties
|
||||||
|
const incompressibleTwoPhaseInteractingMixture& mixture_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
@ -74,20 +82,22 @@ public:
|
|||||||
mixtureViscosityModel,
|
mixtureViscosityModel,
|
||||||
dictionary,
|
dictionary,
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
),
|
),
|
||||||
(mesh, group)
|
(mixture)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from mixture
|
||||||
mixtureViscosityModel(const fvMesh& U, const word& group);
|
mixtureViscosityModel
|
||||||
|
(
|
||||||
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
|
);
|
||||||
|
|
||||||
//- Disallow default bitwise copy construction
|
//- Disallow default bitwise copy construction
|
||||||
mixtureViscosityModel(const mixtureViscosityModel&);
|
mixtureViscosityModel(const mixtureViscosityModel&) = delete;
|
||||||
|
|
||||||
|
|
||||||
// Selectors
|
// Selectors
|
||||||
@ -95,8 +105,7 @@ public:
|
|||||||
//- Return a reference to the selected viscosity model
|
//- Return a reference to the selected viscosity model
|
||||||
static autoPtr<mixtureViscosityModel> New
|
static autoPtr<mixtureViscosityModel> New
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2014-2021 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -31,15 +31,18 @@ License
|
|||||||
|
|
||||||
Foam::autoPtr<Foam::mixtureViscosityModel> Foam::mixtureViscosityModel::New
|
Foam::autoPtr<Foam::mixtureViscosityModel> Foam::mixtureViscosityModel::New
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const word modelType
|
const word modelType
|
||||||
(
|
(
|
||||||
IOdictionary
|
IOdictionary
|
||||||
(
|
(
|
||||||
viscosityModel::findModelDict(mesh, group)
|
viscosityModel::findModelDict
|
||||||
|
(
|
||||||
|
mixture.U().mesh(),
|
||||||
|
mixture.phase1Name()
|
||||||
|
)
|
||||||
).lookup("viscosityModel")
|
).lookup("viscosityModel")
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -58,7 +61,7 @@ Foam::autoPtr<Foam::mixtureViscosityModel> Foam::mixtureViscosityModel::New
|
|||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
return autoPtr<mixtureViscosityModel>(cstrIter()(mesh, group));
|
return autoPtr<mixtureViscosityModel>(cstrIter()(mixture));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -48,11 +48,10 @@ namespace mixtureViscosityModels
|
|||||||
|
|
||||||
Foam::mixtureViscosityModels::plastic::plastic
|
Foam::mixtureViscosityModels::plastic::plastic
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixtureViscosityModel(mesh, group),
|
mixtureViscosityModel(mixture),
|
||||||
plasticCoeffs_(optionalSubDict(typeName + "Coeffs")),
|
plasticCoeffs_(optionalSubDict(typeName + "Coeffs")),
|
||||||
plasticViscosityCoeff_
|
plasticViscosityCoeff_
|
||||||
(
|
(
|
||||||
@ -66,18 +65,7 @@ Foam::mixtureViscosityModels::plastic::plastic
|
|||||||
dimless,
|
dimless,
|
||||||
plasticCoeffs_.lookup("exponent")
|
plasticCoeffs_.lookup("exponent")
|
||||||
),
|
),
|
||||||
muMax_("muMax", dimDynamicViscosity, plasticCoeffs_.lookup("muMax")),
|
muMax_("muMax", dimDynamicViscosity, plasticCoeffs_.lookup("muMax"))
|
||||||
alpha_
|
|
||||||
(
|
|
||||||
mesh.lookupObject<volScalarField>
|
|
||||||
(
|
|
||||||
IOobject::groupName
|
|
||||||
(
|
|
||||||
lookupOrDefault<word>("alpha", "alpha"),
|
|
||||||
group
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -98,7 +86,7 @@ Foam::mixtureViscosityModels::plastic::mu
|
|||||||
pow
|
pow
|
||||||
(
|
(
|
||||||
scalar(10),
|
scalar(10),
|
||||||
plasticViscosityExponent_*alpha_
|
plasticViscosityExponent_*mixture_.alphad()
|
||||||
) - scalar(1)
|
) - scalar(1)
|
||||||
),
|
),
|
||||||
muMax_
|
muMax_
|
||||||
|
|||||||
@ -73,9 +73,6 @@ protected:
|
|||||||
//- Maximum viscosity
|
//- Maximum viscosity
|
||||||
dimensionedScalar muMax_;
|
dimensionedScalar muMax_;
|
||||||
|
|
||||||
//- Plastic phase fraction
|
|
||||||
const volScalarField& alpha_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -85,8 +82,8 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from mixture
|
||||||
plastic(const fvMesh& mesh, const word& group);
|
plastic(const incompressibleTwoPhaseInteractingMixture& mixture);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2014-2021 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -48,22 +48,10 @@ namespace mixtureViscosityModels
|
|||||||
|
|
||||||
Foam::mixtureViscosityModels::slurry::slurry
|
Foam::mixtureViscosityModels::slurry::slurry
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const incompressibleTwoPhaseInteractingMixture& mixture
|
||||||
const word& group
|
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixtureViscosityModel(mesh, group),
|
mixtureViscosityModel(mixture)
|
||||||
alpha_
|
|
||||||
(
|
|
||||||
mesh.lookupObject<volScalarField>
|
|
||||||
(
|
|
||||||
IOobject::groupName
|
|
||||||
(
|
|
||||||
lookupOrDefault<word>("alpha", "alpha"),
|
|
||||||
group
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -76,9 +64,11 @@ Foam::mixtureViscosityModels::slurry::mu
|
|||||||
const volVectorField& U
|
const volVectorField& U
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
const volScalarField& alphad = mixture_.alphad();
|
||||||
|
|
||||||
return
|
return
|
||||||
(
|
(
|
||||||
muc*(1.0 + 2.5*alpha_ + 10.05*sqr(alpha_) + 0.00273*exp(16.6*alpha_))
|
muc*(1.0 + 2.5*alphad + 10.05*sqr(alphad) + 0.00273*exp(16.6*alphad))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,11 +66,6 @@ class slurry
|
|||||||
:
|
:
|
||||||
public mixtureViscosityModel
|
public mixtureViscosityModel
|
||||||
{
|
{
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- Slurry phase fraction
|
|
||||||
const volScalarField& alpha_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -80,8 +75,8 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from mixture
|
||||||
slurry(const fvMesh& mesh, const word& group);
|
slurry(const incompressibleTwoPhaseInteractingMixture& mixture);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
relativeVelocityModel/relativeVelocityModel.C
|
relativeVelocityModel/relativeVelocityModel.C
|
||||||
simple/simple.C
|
simple/simple.C
|
||||||
general/general.C
|
general/general.C
|
||||||
|
MichaelsBolger/MichaelsBolger.C
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libdriftFluxRelativeVelocityModels
|
LIB = $(FOAM_LIBBIN)/libdriftFluxRelativeVelocityModels
|
||||||
|
|||||||
@ -0,0 +1,80 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2022 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "MichaelsBolger.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace relativeVelocityModels
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(MichaelsBolger, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
relativeVelocityModel,
|
||||||
|
MichaelsBolger,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::relativeVelocityModels::MichaelsBolger::MichaelsBolger
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const incompressibleTwoPhaseInteractingMixture& mixture,
|
||||||
|
const uniformDimensionedVectorField& g
|
||||||
|
)
|
||||||
|
:
|
||||||
|
relativeVelocityModel(dict, mixture, g),
|
||||||
|
a0_("a0", dimless, dict),
|
||||||
|
a1_("a1", dimless, dict),
|
||||||
|
alphaMax_("alphaMax", dimless, dict),
|
||||||
|
Vc_("Vc", dimTime, dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::relativeVelocityModels::MichaelsBolger::~MichaelsBolger()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::relativeVelocityModels::MichaelsBolger::correct()
|
||||||
|
{
|
||||||
|
Udm_ =
|
||||||
|
(mixture_.rhoc()/mixture_.rho())*Vc_
|
||||||
|
*(a0_ + pow(max(1 - mixture_.alphad()/mixture().alphaMax(), 0.0), a1_))
|
||||||
|
*acceleration();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,130 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2022 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::relativeVelocityModels::MichaelsBolger
|
||||||
|
|
||||||
|
Description
|
||||||
|
Michaels & Bolger relative velocity model
|
||||||
|
|
||||||
|
Reference:
|
||||||
|
\verbatim
|
||||||
|
Michaels, A. S., & Bolger, J. C. (1962).
|
||||||
|
Settling rates and sediment volumes
|
||||||
|
of flocculated kaolin suspensions.
|
||||||
|
Industrial & Engineering Chemistry Fundamentals, 1(1), 24-33.
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
Usage
|
||||||
|
Example usage:
|
||||||
|
\verbatim
|
||||||
|
relativeVelocityModel MichaelsBolger;
|
||||||
|
|
||||||
|
MichaelsBolgerCoeffs
|
||||||
|
{
|
||||||
|
a0 0; // Extended Michaels & Bolger coefficient,
|
||||||
|
a1 4.65; // Exponent
|
||||||
|
|
||||||
|
alphaMax 0.6; // Maximum dispersed phase-fraction
|
||||||
|
// (packing fraction)
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
MichaelsBolger.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef MichaelsBolger_H
|
||||||
|
#define MichaelsBolger_H
|
||||||
|
|
||||||
|
#include "relativeVelocityModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace relativeVelocityModels
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class MichaelsBolger Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class MichaelsBolger
|
||||||
|
:
|
||||||
|
public relativeVelocityModel
|
||||||
|
{
|
||||||
|
// Private Data
|
||||||
|
|
||||||
|
//- Extended Michaels & Bolger coefficient, defaults to 0
|
||||||
|
dimensionedScalar a0_;
|
||||||
|
|
||||||
|
//- Exponent, defaults to 4.65
|
||||||
|
dimensionedScalar a1_;
|
||||||
|
|
||||||
|
//- alphaMax coefficient
|
||||||
|
dimensionedScalar alphaMax_;
|
||||||
|
|
||||||
|
//- Drift velocity coefficient
|
||||||
|
dimensionedScalar Vc_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("MichaelsBolger");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
MichaelsBolger
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const incompressibleTwoPhaseInteractingMixture& mixture,
|
||||||
|
const uniformDimensionedVectorField& g
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
~MichaelsBolger();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Update the diffusion velocity
|
||||||
|
virtual void correct();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace relativeVelocityModels
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -65,11 +65,13 @@ Foam::relativeVelocityModels::general::~general()
|
|||||||
|
|
||||||
void Foam::relativeVelocityModels::general::correct()
|
void Foam::relativeVelocityModels::general::correct()
|
||||||
{
|
{
|
||||||
|
const volScalarField& alphad = mixture_.alphad();
|
||||||
|
|
||||||
Udm_ =
|
Udm_ =
|
||||||
(rhoc_/rho())*Vc_*acceleration()
|
(mixture_.rhoc()/mixture_.rho())*Vc_*acceleration()
|
||||||
*(
|
*(
|
||||||
exp(-a_*max(alphad_ - residualAlpha_, scalar(0)))
|
exp(-a_*max(alphad - residualAlpha_, scalar(0)))
|
||||||
- exp(-a1_*max(alphad_ - residualAlpha_, scalar(0)))
|
- exp(-a1_*max(alphad - residualAlpha_, scalar(0)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -76,22 +76,18 @@ Foam::relativeVelocityModel::relativeVelocityModel
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixture_(mixture),
|
mixture_(mixture),
|
||||||
alphac_(mixture.alpha2()),
|
|
||||||
alphad_(mixture.alpha1()),
|
|
||||||
rhoc_(mixture.rhoc()),
|
|
||||||
rhod_(mixture.rhod()),
|
|
||||||
g_(g),
|
g_(g),
|
||||||
Udm_
|
Udm_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"Udm",
|
"Udm",
|
||||||
alphac_.time().timeName(),
|
mixture.U().time().timeName(),
|
||||||
alphac_.mesh(),
|
mixture.U().mesh(),
|
||||||
IOobject::READ_IF_PRESENT,
|
IOobject::READ_IF_PRESENT,
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
alphac_.mesh(),
|
mixture_.U().mesh(),
|
||||||
dimensionedVector(dimVelocity, Zero),
|
dimensionedVector(dimVelocity, Zero),
|
||||||
UdmPatchFieldTypes()
|
UdmPatchFieldTypes()
|
||||||
)
|
)
|
||||||
@ -145,12 +141,6 @@ Foam::relativeVelocityModel::~relativeVelocityModel()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::tmp<Foam::volScalarField> Foam::relativeVelocityModel::rho() const
|
|
||||||
{
|
|
||||||
return alphac_*rhoc_ + alphad_*rhod_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::volVectorField>
|
Foam::tmp<Foam::volVectorField>
|
||||||
Foam::relativeVelocityModel::acceleration() const
|
Foam::relativeVelocityModel::acceleration() const
|
||||||
{
|
{
|
||||||
@ -162,8 +152,8 @@ Foam::relativeVelocityModel::acceleration() const
|
|||||||
|
|
||||||
Foam::tmp<Foam::volSymmTensorField> Foam::relativeVelocityModel::tauDm() const
|
Foam::tmp<Foam::volSymmTensorField> Foam::relativeVelocityModel::tauDm() const
|
||||||
{
|
{
|
||||||
const volScalarField betac(alphac_*rhoc_);
|
const volScalarField betac(mixture_.alphac()*mixture_.rhoc());
|
||||||
const volScalarField betad(alphad_*rhod_);
|
const volScalarField betad(mixture_.alphad()*mixture_.rhod());
|
||||||
|
|
||||||
// Calculate the relative velocity of the continuous phase w.r.t the mean
|
// Calculate the relative velocity of the continuous phase w.r.t the mean
|
||||||
const volVectorField Ucm(betad*Udm_/betac);
|
const volVectorField Ucm(betad*Udm_/betac);
|
||||||
|
|||||||
@ -62,27 +62,13 @@ protected:
|
|||||||
//- Mixture properties
|
//- Mixture properties
|
||||||
const incompressibleTwoPhaseInteractingMixture& mixture_;
|
const incompressibleTwoPhaseInteractingMixture& mixture_;
|
||||||
|
|
||||||
//- Name of the continuous phase
|
|
||||||
const word continuousPhaseName_;
|
|
||||||
|
|
||||||
//- Continuous phase fraction
|
|
||||||
const volScalarField& alphac_;
|
|
||||||
|
|
||||||
//- Dispersed phase fraction
|
|
||||||
const volScalarField& alphad_;
|
|
||||||
|
|
||||||
//- Continuous density
|
|
||||||
const dimensionedScalar& rhoc_;
|
|
||||||
|
|
||||||
//- Dispersed density
|
|
||||||
const dimensionedScalar& rhod_;
|
|
||||||
|
|
||||||
//- Acceleration due to gravity
|
//- Acceleration due to gravity
|
||||||
const uniformDimensionedVectorField& g_;
|
const uniformDimensionedVectorField& g_;
|
||||||
|
|
||||||
//- Dispersed diffusion velocity
|
//- Dispersed diffusion velocity
|
||||||
mutable volVectorField Udm_;
|
mutable volVectorField Udm_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
@ -138,9 +124,6 @@ public:
|
|||||||
return mixture_;
|
return mixture_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return the mixture mean density
|
|
||||||
tmp<volScalarField> rho() const;
|
|
||||||
|
|
||||||
//- Return the diffusion velocity of the dispersed phase
|
//- Return the diffusion velocity of the dispersed phase
|
||||||
const volVectorField& Udm() const
|
const volVectorField& Udm() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -49,8 +49,7 @@ Foam::relativeVelocityModels::simple::simple
|
|||||||
:
|
:
|
||||||
relativeVelocityModel(dict, mixture, g),
|
relativeVelocityModel(dict, mixture, g),
|
||||||
a_("a", dimless, dict),
|
a_("a", dimless, dict),
|
||||||
Vc_("Vc", dimTime, dict),
|
Vc_("Vc", dimTime, dict)
|
||||||
residualAlpha_("residualAlpha", dimless, dict)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -65,8 +64,8 @@ Foam::relativeVelocityModels::simple::~simple()
|
|||||||
void Foam::relativeVelocityModels::simple::correct()
|
void Foam::relativeVelocityModels::simple::correct()
|
||||||
{
|
{
|
||||||
Udm_ =
|
Udm_ =
|
||||||
(rhoc_/rho())*Vc_*acceleration()
|
(mixture_.rhoc()/mixture_.rho())*Vc_*acceleration()
|
||||||
*pow(scalar(10), -a_*max(alphad_, scalar(0)));
|
*pow(scalar(10), -a_*max(mixture_.alphad(), scalar(0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -60,9 +60,6 @@ class simple
|
|||||||
//- Drift velocity coefficient
|
//- Drift velocity coefficient
|
||||||
dimensionedScalar Vc_;
|
dimensionedScalar Vc_;
|
||||||
|
|
||||||
//- Residual phase fraction
|
|
||||||
dimensionedScalar residualAlpha_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user