From 1f0671694fbabfc1a920af26dfb82cff458a3d2c Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 10 Dec 2021 09:52:00 +0000 Subject: [PATCH] ENH: Kutaledze: new nucleate flux model --- .../reactingEuler/multiphaseSystem/Make/files | 4 + .../Kutadeladze/Kutadeladze.C | 135 +++++++++++++++ .../Kutadeladze/Kutadeladze.H | 160 ++++++++++++++++++ .../nucleateFluxModel/nucleateFluxModel.C | 78 +++++++++ .../nucleateFluxModel/nucleateFluxModel.H | 118 +++++++++++++ 5 files changed, 495 insertions(+) create mode 100644 src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.C create mode 100644 src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.H create mode 100644 src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.C create mode 100644 src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.H diff --git a/src/phaseSystemModels/reactingEuler/multiphaseSystem/Make/files b/src/phaseSystemModels/reactingEuler/multiphaseSystem/Make/files index c9994fb8dc..ecb7b82c86 100644 --- a/src/phaseSystemModels/reactingEuler/multiphaseSystem/Make/files +++ b/src/phaseSystemModels/reactingEuler/multiphaseSystem/Make/files @@ -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 diff --git a/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.C b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.C new file mode 100644 index 0000000000..2b0f4edfa7 --- /dev/null +++ b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.C @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +\*---------------------------------------------------------------------------*/ + +#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("Cn", 5.66e-10)), + an_(dict.getOrDefault("an", 2.5)), + bn_(dict.getOrDefault("bn", 1)), + n_(dict.getOrDefault("n", 1)) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp +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("p"); + const scalarField& pb = p.boundaryField()[patchi]; + + const labelUList& cells = liquid.mesh().boundary()[patchi].faceCells(); + + tmp trhoVapor = vapor.thermo().rhoEoS(Tsatw, pb, cells); + const scalarField& rhoVapor = trhoVapor.ref(); + + tmp 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 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_); +} + + +// ************************************************************************* // diff --git a/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.H b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.H new file mode 100644 index 0000000000..079113692f --- /dev/null +++ b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/Kutadeladze/Kutadeladze.H @@ -0,0 +1,160 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +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 ; + an ; + bn ; + n ; + } + \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 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 + +// ************************************************************************* // diff --git a/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.C b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.C new file mode 100644 index 0000000000..d50e7e4ed9 --- /dev/null +++ b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.C @@ -0,0 +1,78 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +\*---------------------------------------------------------------------------*/ + +#include "nucleateFluxModel.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + namespace wallBoilingModels + { + defineTypeNameAndDebug(nucleateFluxModel, 0); + defineRunTimeSelectionTable(nucleateFluxModel, dictionary); + } +} + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +Foam::autoPtr +Foam::wallBoilingModels::nucleateFluxModel::New +( + const dictionary& dict +) +{ + const word modelType(dict.get("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()); +} + + +// ************************************************************************* // diff --git a/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.H b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.H new file mode 100644 index 0000000000..952c3d75ac --- /dev/null +++ b/src/phaseSystemModels/reactingEuler/multiphaseSystem/derivedFvPatchFields/wallBoilingSubModels/nucleateFluxModels/nucleateFluxModel/nucleateFluxModel.H @@ -0,0 +1,118 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +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 New(const dictionary& dict); + + + // Member Functions + + //- Calculate nucleate heat flux + virtual tmp 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 + +// ************************************************************************* //