Commit 1f067169 authored by sergio's avatar sergio Committed by Andrew Heather
Browse files

ENH: Kutaledze: new nucleate flux model

parent 66156998
......@@ -228,6 +228,10 @@ TDNBModels = $(wallBoilingSubModels)/TDNBModels
$(TDNBModels)/TDNBModel/TDNBModel.C
$(TDNBModels)/Schroeder/Schroeder.C
nucleateFluxModels = $(wallBoilingSubModels)/nucleateFluxModels
$(nucleateFluxModels)/nucleateFluxModel/nucleateFluxModel.C
$(nucleateFluxModels)/Kutadeladze/Kutadeladze.C
/* Turbulence */
turbulence/multiphaseCompressibleTurbulenceModels.C
......
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd
-------------------------------------------------------------------------------
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 "Kutadeladze.H"
#include "addToRunTimeSelectionTable.H"
#include "uniformDimensionedFields.H"
#include "phasePairKey.H"
#include "phaseSystem.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace wallBoilingModels
{
namespace nucleateFluxModels
{
defineTypeNameAndDebug(Kutadeladze, 0);
addToRunTimeSelectionTable
(
nucleateFluxModel,
Kutadeladze,
dictionary
);
}
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::wallBoilingModels::nucleateFluxModels::Kutadeladze::Kutadeladze
(
const dictionary& dict
)
:
nucleateFluxModel(),
Cn_(dict.getOrDefault<scalar>("Cn", 5.66e-10)),
an_(dict.getOrDefault<scalar>("an", 2.5)),
bn_(dict.getOrDefault<scalar>("bn", 1)),
n_(dict.getOrDefault<scalar>("n", 1))
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::tmp<Foam::scalarField>
Foam::wallBoilingModels::nucleateFluxModels::Kutadeladze::qNucleate
(
const phaseModel& liquid,
const phaseModel& vapor,
const label patchi,
const scalarField& Tl,
const scalarField& Tsatw,
const scalarField& L
) const
{
const auto& p = liquid.mesh().lookupObject<volScalarField>("p");
const scalarField& pb = p.boundaryField()[patchi];
const labelUList& cells = liquid.mesh().boundary()[patchi].faceCells();
tmp<scalarField> trhoVapor = vapor.thermo().rhoEoS(Tsatw, pb, cells);
const scalarField& rhoVapor = trhoVapor.ref();
tmp<scalarField> trhoLiq = liquid.thermo().rhoEoS(Tsatw, pb, cells);
const scalarField& rhoLiq = trhoLiq.ref();
const phasePairKey pair(liquid.name(), vapor.name());
const scalarField sigma
(
liquid.fluid().sigma(pair)().boundaryField()[patchi]
);
const fvPatchScalarField& Tw =
liquid.thermo().T().boundaryField()[patchi];
const scalarField kappaLiquid(liquid.kappa(patchi));
tmp<volScalarField> tCpliq = liquid.thermo().Cp();
const volScalarField& Cpliq = tCpliq();
const scalarField& Cpliquid = Cpliq.boundaryField()[patchi];
const scalarField muLiquid(liquid.mu(patchi));
const scalarField deltaTsub
(
pow(max((Tw-Tsatw), scalar(0)), an_)
);
return
Cn_*kappaLiquid*pow(Cpliquid, 1.5)*pow(rhoLiq,1.28)*pow(pb,1.75)
*deltaTsub
/
(pow(muLiquid, 0.625)*pow(sigma,0.9)*pow(L,1.5)*pow(rhoVapor,1.5));
}
void Foam::wallBoilingModels::nucleateFluxModels::Kutadeladze::write
(
Ostream& os
) const
{
nucleateFluxModel::write(os);
os.writeEntry("Cn", Cn_);
os.writeEntry("an", an_);
os.writeEntry("bn", bn_);
os.writeEntry("n", n_);
}
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd
-------------------------------------------------------------------------------
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::wallBoilingModels::nucleateFluxModels::Kutadeladze
Description
Nucleate flux sub-cooling correlation
References:
\verbatim
Wang, L., Li, Y., Zhang, F., Xie, F., & Ma, Y. (2016).
Correlations for calculating heat transfer of hydrogen pool boiling.
International Journal of Hydrogen Energy, 41(38), 17118-17131.
\endverbatim
Usage
Example of the model specification:
\verbatim
nucleateFluxModel
{
// Mandatory entries
type Kutadeladze;
// Optional entries
Cn <scalar>;
an <scalar>;
bn <scalar>;
n <scalar>;
}
\endverbatim
where the entries mean:
\table
Property | Description | Type | Reqd | Deflt
type | Type name: Kutadeladze | word | yes | -
Cn | Model coefficient | scalar | no | 5.66e-10
an | Coefficient for deltaT sub-cooling | scalar | no | 2.5
bn | Exponent for n | scalar | no | 1
n | Nucleating boiling paramemeter | scalar | no | 1
\endtable
SourceFiles
Kutadeladze.C
\*---------------------------------------------------------------------------*/
#ifndef Kutadeladze_H
#define Kutadeladze_H
#include "nucleateFluxModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace wallBoilingModels
{
namespace nucleateFluxModels
{
/*---------------------------------------------------------------------------*\
Class Kutadeladze Declaration
\*---------------------------------------------------------------------------*/
class Kutadeladze
:
public nucleateFluxModel
{
// Private Data
//- Model coefficient
scalar Cn_;
//- Coefficient for deltaT sub-cooling
scalar an_;
//- Exponent for n
scalar bn_;
//- Nucleating boiling paramemeter
scalar n_;
// Private Member Functions
//- No copy construct
Kutadeladze(const Kutadeladze&) = delete;
//- No copy assignment
void operator=(const Kutadeladze&) = delete;
public:
//- Runtime type information
TypeName("Kutadeladze");
// Constructors
//- Construct from a dictionary
Kutadeladze(const dictionary& dict);
//- Destructor
virtual ~Kutadeladze() = default;
// Member Functions
//- Calculate and return the nucleation-site density
virtual tmp<scalarField> qNucleate
(
const phaseModel& liquid,
const phaseModel& vapor,
const label patchi,
const scalarField& Tl,
const scalarField& Tsatw,
const scalarField& L
) const;
//- Write
virtual void write(Ostream& os) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace nucleateFluxModels
} // End namespace wallBoilingModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd
-------------------------------------------------------------------------------
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 "nucleateFluxModel.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace wallBoilingModels
{
defineTypeNameAndDebug(nucleateFluxModel, 0);
defineRunTimeSelectionTable(nucleateFluxModel, dictionary);
}
}
// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
Foam::autoPtr<Foam::wallBoilingModels::nucleateFluxModel>
Foam::wallBoilingModels::nucleateFluxModel::New
(
const dictionary& dict
)
{
const word modelType(dict.get<word>("type"));
Info<< "Selecting nucleateFluxModel: " << modelType << endl;
auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType);
if (!cstrIter.found())
{
FatalIOErrorInLookup
(
dict,
"nucleateFluxModel",
modelType,
*dictionaryConstructorTablePtr_
) << abort(FatalIOError);
}
return cstrIter()(dict);
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::wallBoilingModels::nucleateFluxModel::write(Ostream& os) const
{
os.writeEntry("type", this->type());
}
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd
-------------------------------------------------------------------------------
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::wallBoilingModels::nucleateFluxModel
Description
Base class for nucleation flux models
SourceFiles
nucleateFluxModel.C
\*---------------------------------------------------------------------------*/
#ifndef nucleateFluxModel_H
#define nucleateFluxModel_H
#include "volFields.H"
#include "dictionary.H"
#include "runTimeSelectionTables.H"
#include "phaseModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace wallBoilingModels
{
/*---------------------------------------------------------------------------*\
Class nucleateFluxModel Declaration
\*---------------------------------------------------------------------------*/
class nucleateFluxModel
{
public:
//- Runtime type information
TypeName("nucleateFluxModel");
//- Declare runtime construction
declareRunTimeSelectionTable
(
autoPtr,
nucleateFluxModel,
dictionary,
(
const dictionary& dict
),
(dict)
);
// Generated Methods
//- Default construct
nucleateFluxModel() = default;
//- Destructor
virtual ~nucleateFluxModel() = default;
// Selectors
//- Select default constructed
static autoPtr<nucleateFluxModel> New(const dictionary& dict);
// Member Functions
//- Calculate nucleate heat flux
virtual tmp<scalarField> qNucleate
(
const phaseModel& liquid,
const phaseModel& vapor,
const label patchi,
const scalarField& Tl,
const scalarField& Tsatw,
const scalarField& L
) const = 0;
//- Write
virtual void write(Ostream& os) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace wallBoilingModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment