mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Adding humidityTemperatureCoupledMixed BC and directionalPressureGradientExplicitSource and the corresponding tutorial
tutorials/heatTransfer/chtMultiRegionFoam/windshieldCondensation
This commit is contained in:
@ -12,6 +12,7 @@ $(BCs)/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchSca
|
|||||||
$(BCs)/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C
|
$(BCs)/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C
|
||||||
$(BCs)/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C
|
$(BCs)/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C
|
||||||
$(BCs)/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C
|
$(BCs)/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C
|
||||||
|
$(BCs)/humidityTemperatureCoupledMixed/humidityTemperatureCoupledMixedFvPatchScalarField.C
|
||||||
|
|
||||||
turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C
|
turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C
|
||||||
turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C
|
turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C
|
||||||
|
|||||||
@ -5,6 +5,7 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||||
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
||||||
-I$(LIB_SRC)/thermophysicalModels/solidSpecie/lnInclude \
|
-I$(LIB_SRC)/thermophysicalModels/solidSpecie/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude
|
-I$(LIB_SRC)/meshTools/lnInclude
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,799 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd
|
||||||
|
\\/ 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 "humidityTemperatureCoupledMixedFvPatchScalarField.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "surfaceFields.H"
|
||||||
|
#include "mappedPatchBase.H"
|
||||||
|
#include "fixedGradientFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField::
|
||||||
|
massTransferMode,
|
||||||
|
4
|
||||||
|
>::names[] =
|
||||||
|
{
|
||||||
|
"constantMass",
|
||||||
|
"condensation",
|
||||||
|
"evaporation",
|
||||||
|
"condensationAndEvaporation"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField::
|
||||||
|
massTransferMode,
|
||||||
|
4
|
||||||
|
> Foam::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField:: MassModeTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF),
|
||||||
|
temperatureCoupledBase(patch(), "fluidThermo", "undefined", "undefined-K"),
|
||||||
|
mode_(mConstantMass),
|
||||||
|
TnbrName_("undefined-Tnbr"),
|
||||||
|
QrNbrName_("undefined-Qr"),
|
||||||
|
QrName_("undefined-Qr"),
|
||||||
|
specieName_("undefined"),
|
||||||
|
liquid_(NULL),
|
||||||
|
liquidDict_(NULL),
|
||||||
|
mass_(patch().size(), 0.0),
|
||||||
|
Tvap_(0.0),
|
||||||
|
myKDelta_(patch().size(), 0.0),
|
||||||
|
dmHfg_(patch().size(), 0.0),
|
||||||
|
mpCpTp_(patch().size(), 0.0),
|
||||||
|
Mcomp_(0.0),
|
||||||
|
L_(0.0),
|
||||||
|
fluid_(false),
|
||||||
|
cp_(patch().size(), 0.0),
|
||||||
|
thickness_(patch().size(), 0.0),
|
||||||
|
rho_(patch().size(), 0.0)
|
||||||
|
{
|
||||||
|
this->refValue() = 0.0;
|
||||||
|
this->refGrad() = 0.0;
|
||||||
|
this->valueFraction() = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const humidityTemperatureCoupledMixedFvPatchScalarField& psf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(psf, p, iF, mapper),
|
||||||
|
temperatureCoupledBase(patch(), psf),
|
||||||
|
mode_(psf.mode_),
|
||||||
|
TnbrName_(psf.TnbrName_),
|
||||||
|
QrNbrName_(psf.QrNbrName_),
|
||||||
|
QrName_(psf.QrName_),
|
||||||
|
specieName_(psf.specieName_),
|
||||||
|
liquid_(psf.liquid_),
|
||||||
|
liquidDict_(psf.liquidDict_),
|
||||||
|
mass_(psf.mass_, mapper),
|
||||||
|
Tvap_(psf.Tvap_),
|
||||||
|
myKDelta_(psf.myKDelta_, mapper),
|
||||||
|
dmHfg_(psf.dmHfg_, mapper),
|
||||||
|
mpCpTp_(psf.mpCpTp_, mapper),
|
||||||
|
Mcomp_(psf.Mcomp_),
|
||||||
|
L_(psf.L_),
|
||||||
|
fluid_(psf.fluid_),
|
||||||
|
cp_(psf.cp_, mapper),
|
||||||
|
thickness_(psf.thickness_, mapper),
|
||||||
|
rho_(psf.rho_, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF),
|
||||||
|
temperatureCoupledBase(patch(), dict),
|
||||||
|
mode_(mCondensationAndEvaporation),
|
||||||
|
TnbrName_(dict.lookupOrDefault<word>("Tnbr", "T")),
|
||||||
|
QrNbrName_(dict.lookupOrDefault<word>("QrNbr", "none")),
|
||||||
|
QrName_(dict.lookupOrDefault<word>("Qr", "none")),
|
||||||
|
specieName_(dict.lookupOrDefault<word>("specieName", "none")),
|
||||||
|
liquid_(NULL),
|
||||||
|
liquidDict_(),
|
||||||
|
mass_(patch().size(), 0.0),
|
||||||
|
Tvap_(0.0),
|
||||||
|
myKDelta_(patch().size(), 0.0),
|
||||||
|
dmHfg_(patch().size(), 0.0),
|
||||||
|
mpCpTp_(patch().size(), 0.0),
|
||||||
|
Mcomp_(0.0),
|
||||||
|
L_(0.0),
|
||||||
|
fluid_(false),
|
||||||
|
cp_(patch().size(), 0.0),
|
||||||
|
thickness_(patch().size(), 0.0),
|
||||||
|
rho_(patch().size(), 0.0)
|
||||||
|
{
|
||||||
|
if (!isA<mappedPatchBase>(this->patch().patch()))
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"humidityTemperatureCoupledMixedFvPatchScalarField::"
|
||||||
|
"humidityTemperatureCoupledMixedFvPatchScalarField\n"
|
||||||
|
"(\n"
|
||||||
|
" const fvPatch&,\n"
|
||||||
|
" const DimensionedField<scalar, volMesh>&,\n"
|
||||||
|
" const dictionary&\n"
|
||||||
|
")\n"
|
||||||
|
) << "\n patch type '" << p.type()
|
||||||
|
<< "' not type '" << mappedPatchBase::typeName << "'"
|
||||||
|
<< "\n for patch " << p.name()
|
||||||
|
<< " of field " << dimensionedInternalField().name()
|
||||||
|
<< " in file " << dimensionedInternalField().objectPath()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
|
|
||||||
|
if (dict.found("mode"))
|
||||||
|
{
|
||||||
|
mode_ = MassModeTypeNames_.read(dict.lookup("mode"));
|
||||||
|
fluid_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fluid_)
|
||||||
|
{
|
||||||
|
if (mode_ == mConstantMass)
|
||||||
|
{
|
||||||
|
thickness_ = scalarField("thickness", dict, p.size());
|
||||||
|
cp_ = scalarField("cp", dict, p.size());
|
||||||
|
rho_ = scalarField("rho", dict, p.size());
|
||||||
|
}
|
||||||
|
else if (mode_ > mConstantMass)
|
||||||
|
{
|
||||||
|
Mcomp_ = readScalar(dict.lookup("carrierMolWeight"));
|
||||||
|
L_ = readScalar(dict.lookup("L"));
|
||||||
|
Tvap_ = readScalar(dict.lookup("Tvap"));
|
||||||
|
liquidDict_ = dict.subDict("liquid");
|
||||||
|
liquid_.reset
|
||||||
|
(
|
||||||
|
liquidProperties::New(liquidDict_.subDict(specieName_)).ptr()
|
||||||
|
);
|
||||||
|
if (dict.found("thickness"))
|
||||||
|
{
|
||||||
|
scalarField& Tp = *this;
|
||||||
|
const scalarField magSf = patch().magSf();
|
||||||
|
// Assume initially standard pressure for rho calculation
|
||||||
|
scalar pf = 1e5;
|
||||||
|
thickness_ = scalarField("thickness", dict, p.size());
|
||||||
|
forAll (thickness_, i)
|
||||||
|
{
|
||||||
|
mass_[i] = thickness_[i]*liquid_->rho(pf, Tp[i])*magSf[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fluid_ = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"humidityTemperatureCoupledMixedFvPatchScalarField::"
|
||||||
|
"humidityTemperatureCoupledMixedFvPatchScalarField\n"
|
||||||
|
"(\n"
|
||||||
|
" const fvPatch&,\n"
|
||||||
|
" const DimensionedField<scalar, volMesh>&,\n"
|
||||||
|
" const dictionary& \n"
|
||||||
|
")\n"
|
||||||
|
)
|
||||||
|
<< "Did not find mode " << mode_
|
||||||
|
<< " on patch " << patch().name()
|
||||||
|
<< nl
|
||||||
|
<< "Please set 'mode' to one of "
|
||||||
|
<< MassModeTypeNames_.toc()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (dict.found("refValue"))
|
||||||
|
{
|
||||||
|
// Full restart
|
||||||
|
refValue() = scalarField("refValue", dict, p.size());
|
||||||
|
refGrad() = scalarField("refGradient", dict, p.size());
|
||||||
|
valueFraction() = scalarField("valueFraction", dict, p.size());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Start from user entered data. Assume fixedValue.
|
||||||
|
refValue() = *this;
|
||||||
|
refGrad() = 0.0;
|
||||||
|
valueFraction() = 1.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const humidityTemperatureCoupledMixedFvPatchScalarField& psf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(psf, iF),
|
||||||
|
temperatureCoupledBase(patch(), psf),
|
||||||
|
mode_(psf.mode_),
|
||||||
|
TnbrName_(psf.TnbrName_),
|
||||||
|
QrNbrName_(psf.QrNbrName_),
|
||||||
|
QrName_(psf.QrName_),
|
||||||
|
specieName_(psf.specieName_),
|
||||||
|
liquid_(psf.liquid_),
|
||||||
|
liquidDict_(psf.liquidDict_),
|
||||||
|
mass_(psf.mass_),
|
||||||
|
Tvap_(psf.Tvap_),
|
||||||
|
myKDelta_(psf.myKDelta_),
|
||||||
|
dmHfg_(psf.dmHfg_),
|
||||||
|
mpCpTp_(psf.mpCpTp_),
|
||||||
|
Mcomp_(psf.Mcomp_),
|
||||||
|
L_(psf.L_),
|
||||||
|
fluid_(psf.fluid_),
|
||||||
|
cp_(psf.cp_),
|
||||||
|
thickness_(psf.thickness_),
|
||||||
|
rho_(psf.rho_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
scalar humidityTemperatureCoupledMixedFvPatchScalarField::Sh
|
||||||
|
(
|
||||||
|
const scalar Re,
|
||||||
|
const scalar Sc
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (Re < 5.0E+05)
|
||||||
|
{
|
||||||
|
return 0.664*sqrt(Re)*cbrt(Sc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0.037*pow(Re, 0.8)*cbrt(Sc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
scalar humidityTemperatureCoupledMixedFvPatchScalarField::htcCondensation
|
||||||
|
(
|
||||||
|
const scalar Tsat,
|
||||||
|
const scalar Re
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (Tsat > 295 && Tsat < 373)
|
||||||
|
{
|
||||||
|
return 51104 + 2044*Tsat;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 255510;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
volScalarField& humidityTemperatureCoupledMixedFvPatchScalarField::
|
||||||
|
thicknessField
|
||||||
|
(
|
||||||
|
const word& fieldName,
|
||||||
|
const fvMesh& mesh
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (!mesh.foundObject<volScalarField>(fieldName))
|
||||||
|
{
|
||||||
|
tmp<volScalarField> tField
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
fieldName,
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar("zero", dimLength, 0.0)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
volScalarField& field = tField();
|
||||||
|
|
||||||
|
field.rename(fieldName);
|
||||||
|
field.writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
|
||||||
|
tField.ptr()->store();
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
const_cast<volScalarField&>
|
||||||
|
(
|
||||||
|
mesh.lookupObject<volScalarField>(fieldName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void humidityTemperatureCoupledMixedFvPatchScalarField::autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper& m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::autoMap(m);
|
||||||
|
|
||||||
|
if (fluid_)
|
||||||
|
{
|
||||||
|
mass_.autoMap(m);
|
||||||
|
myKDelta_.autoMap(m);
|
||||||
|
dmHfg_.autoMap(m);
|
||||||
|
mpCpTp_.autoMap(m);
|
||||||
|
cp_.autoMap(m);
|
||||||
|
thickness_.autoMap(m);
|
||||||
|
rho_.autoMap(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void humidityTemperatureCoupledMixedFvPatchScalarField::rmap
|
||||||
|
(
|
||||||
|
const fvPatchScalarField& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::rmap(ptf, addr);
|
||||||
|
|
||||||
|
const humidityTemperatureCoupledMixedFvPatchScalarField& tiptf =
|
||||||
|
refCast<const humidityTemperatureCoupledMixedFvPatchScalarField>
|
||||||
|
(
|
||||||
|
ptf
|
||||||
|
);
|
||||||
|
|
||||||
|
if (fluid_)
|
||||||
|
{
|
||||||
|
mass_.rmap(tiptf.mass_, addr);
|
||||||
|
myKDelta_.rmap(tiptf.myKDelta_, addr);
|
||||||
|
dmHfg_.rmap(tiptf.dmHfg_, addr);
|
||||||
|
mpCpTp_.rmap(tiptf.mpCpTp_, addr);
|
||||||
|
cp_.rmap(tiptf.cp_, addr);
|
||||||
|
thickness_.rmap(tiptf.thickness_, addr);
|
||||||
|
rho_.rmap(tiptf.rho_, addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void humidityTemperatureCoupledMixedFvPatchScalarField::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the coupling information from the mappedPatchBase
|
||||||
|
const mappedPatchBase& mpp =
|
||||||
|
refCast<const mappedPatchBase>(patch().patch());
|
||||||
|
|
||||||
|
const scalarField magSf = patch().magSf();
|
||||||
|
|
||||||
|
const label nbrPatchI = mpp.samplePolyPatch().index();
|
||||||
|
const polyMesh& mesh = patch().boundaryMesh().mesh();
|
||||||
|
const polyMesh& nbrMesh = mpp.sampleMesh();
|
||||||
|
const fvPatch& nbrPatch =
|
||||||
|
refCast<const fvMesh>(nbrMesh).boundary()[nbrPatchI];
|
||||||
|
|
||||||
|
const humidityTemperatureCoupledMixedFvPatchScalarField&
|
||||||
|
nbrField =
|
||||||
|
refCast
|
||||||
|
<
|
||||||
|
const humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
>
|
||||||
|
(
|
||||||
|
nbrPatch.lookupPatchField<volScalarField, scalar>(TnbrName_)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Swap to obtain full local values of neighbour internal field
|
||||||
|
scalarField nbrIntFld(nbrField.patchInternalField());
|
||||||
|
mpp.distribute(nbrIntFld);
|
||||||
|
|
||||||
|
scalarField& Tp = *this;
|
||||||
|
scalarField Tin(patchInternalField());
|
||||||
|
|
||||||
|
const scalarField K(this->kappa(*this));
|
||||||
|
|
||||||
|
// nrb kappa is done separatedly because I need kappa solid for
|
||||||
|
// htc correlation
|
||||||
|
scalarField nbrK(nbrField.kappa(*this));
|
||||||
|
mpp.distribute(nbrK);
|
||||||
|
|
||||||
|
scalarField nrbDeltaCoeffs(nbrPatch.deltaCoeffs());
|
||||||
|
mpp.distribute(nrbDeltaCoeffs);
|
||||||
|
|
||||||
|
scalarField KDeltaNbr(nbrK*nrbDeltaCoeffs);
|
||||||
|
|
||||||
|
myKDelta_ = K*patch().deltaCoeffs();
|
||||||
|
|
||||||
|
scalarField dm(patch().size(), 0.0);
|
||||||
|
|
||||||
|
//Fluid Side
|
||||||
|
if (fluid_)
|
||||||
|
{
|
||||||
|
scalarField Yvp(patch().size(), 0.0);
|
||||||
|
const scalar dt = mesh.time().deltaTValue();
|
||||||
|
|
||||||
|
const scalarField myDelta(patch().deltaCoeffs());
|
||||||
|
|
||||||
|
if (mode_ != mConstantMass)
|
||||||
|
{
|
||||||
|
scalarField cp(patch().size(), 0.0);
|
||||||
|
scalarField hfg(patch().size(), 0.0);
|
||||||
|
scalarField htc(patch().size(), GREAT);
|
||||||
|
scalarField liquidRho(patch().size(), 0.0);
|
||||||
|
|
||||||
|
fixedGradientFvPatchField<scalar>& Yp =
|
||||||
|
const_cast<fixedGradientFvPatchField<scalar>& >
|
||||||
|
(
|
||||||
|
refCast
|
||||||
|
<
|
||||||
|
const fixedGradientFvPatchField<scalar>
|
||||||
|
>
|
||||||
|
(
|
||||||
|
patch().lookupPatchField<volScalarField, scalar>
|
||||||
|
(
|
||||||
|
specieName_
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
const fvPatchScalarField& pp =
|
||||||
|
patch().lookupPatchField<volScalarField, scalar>("p");
|
||||||
|
|
||||||
|
const fvPatchVectorField& Up =
|
||||||
|
patch().lookupPatchField<volVectorField, vector>("U");
|
||||||
|
|
||||||
|
const fvPatchScalarField& rhop =
|
||||||
|
patch().lookupPatchField<volScalarField, scalar>("rho");
|
||||||
|
|
||||||
|
const fvPatchScalarField& mup =
|
||||||
|
patch().lookupPatchField<volScalarField, scalar>("thermo:mu");
|
||||||
|
|
||||||
|
const vectorField Ui(Up.patchInternalField());
|
||||||
|
const scalarField Yi(Yp.patchInternalField());
|
||||||
|
|
||||||
|
forAll (Tp, faceI)
|
||||||
|
{
|
||||||
|
const scalar Tf = Tp[faceI];
|
||||||
|
const scalar Tint = Tin[faceI];
|
||||||
|
const vector Uf = Ui[faceI];
|
||||||
|
const scalar pf = pp[faceI];
|
||||||
|
|
||||||
|
const scalar muf = mup[faceI];
|
||||||
|
const scalar rhof = rhop[faceI];
|
||||||
|
const scalar nuf = muf/rhof;
|
||||||
|
const scalar pSat = liquid_->pv(pf, Tint);
|
||||||
|
const scalar Mv = liquid_->W();
|
||||||
|
const scalar TSat = liquid_->pvInvert(pSat);
|
||||||
|
const scalar Re = mag(Uf)*L_/nuf;
|
||||||
|
|
||||||
|
cp[faceI] = liquid_->Cp(pf, Tf);
|
||||||
|
hfg[faceI] = liquid_->hl(pf, Tf);
|
||||||
|
|
||||||
|
// Calculate relative humidity
|
||||||
|
const scalar invMwmean =
|
||||||
|
Yi[faceI]/Mv + (1.0 - Yi[faceI])/Mcomp_;
|
||||||
|
const scalar Xv = Yi[faceI]/invMwmean/Mv;
|
||||||
|
const scalar RH = min(Xv*pf/pSat, 1.0);
|
||||||
|
|
||||||
|
scalar RHmin = 0.01;
|
||||||
|
scalar Tdew = -GREAT;
|
||||||
|
|
||||||
|
if (RH > RHmin)
|
||||||
|
{
|
||||||
|
scalar b = 243.5;
|
||||||
|
scalar c = 17.65;
|
||||||
|
scalar TintDeg = Tint - 273;
|
||||||
|
Tdew =
|
||||||
|
b*
|
||||||
|
(
|
||||||
|
log(RH)
|
||||||
|
+ (c*TintDeg)/(b + TintDeg)
|
||||||
|
)
|
||||||
|
/
|
||||||
|
(
|
||||||
|
c - log(RH) - ((c*TintDeg)/(b + TintDeg))
|
||||||
|
) + 273;
|
||||||
|
}
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
Tf < Tdew && RH > RHmin
|
||||||
|
&&
|
||||||
|
(
|
||||||
|
mode_ == mCondensation
|
||||||
|
|| mode_ == mCondensationAndEvaporation
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
htc[faceI] =
|
||||||
|
this->htcCondensation(TSat, Re)*nbrK[faceI]/L_;
|
||||||
|
|
||||||
|
scalar htcTotal =
|
||||||
|
1.0/((1.0/myKDelta_[faceI]) + (1.0/htc[faceI]));
|
||||||
|
|
||||||
|
// heat flux W (>0 heat is converted into mass)
|
||||||
|
const scalar q = (Tint - Tf)*htcTotal*magSf[faceI];
|
||||||
|
|
||||||
|
// mass flux rate [Kg/s/m2]
|
||||||
|
dm[faceI] = q/hfg[faceI]/magSf[faceI];
|
||||||
|
|
||||||
|
mass_[faceI] += q/hfg[faceI]*dt;
|
||||||
|
|
||||||
|
// -dYp/dn = q/Dab (fixedGradient)
|
||||||
|
const scalar Dab = liquid_->D(pf, Tf);
|
||||||
|
Yvp[faceI] =
|
||||||
|
-min(dm[faceI]/Dab/rhof, Yi[faceI]*myDelta[faceI]);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if
|
||||||
|
(
|
||||||
|
Tf > Tvap_ && mass_[faceI] > 0.0
|
||||||
|
&&
|
||||||
|
(
|
||||||
|
mode_ == mEvaporation
|
||||||
|
|| mode_ == mCondensationAndEvaporation
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const scalar Dab = liquid_->D(pf, Tf);
|
||||||
|
|
||||||
|
const scalar Sc = nuf/Dab;
|
||||||
|
const scalar Sh = this->Sh(Re, Sc);
|
||||||
|
|
||||||
|
const scalar Ys = Mv*pSat/(Mv*pSat + Mcomp_*(pf - pSat));
|
||||||
|
// mass transfer coefficient [m/s]
|
||||||
|
const scalar hm = Dab*Sh/L_;
|
||||||
|
|
||||||
|
const scalar Yinf = max(Yi[faceI], 0.0);
|
||||||
|
|
||||||
|
// mass flux rate [Kg/s/m2]
|
||||||
|
dm[faceI] = -rhof*hm*max((Ys - Yinf), 0.0)/(1.0 - Ys);
|
||||||
|
|
||||||
|
// Set fixedGradient for carrier species.
|
||||||
|
Yvp[faceI] = -dm[faceI]/Dab/rhof;
|
||||||
|
|
||||||
|
// Total mass accumulated [Kg]
|
||||||
|
mass_[faceI] += dm[faceI]*magSf[faceI]*dt;
|
||||||
|
|
||||||
|
htc[faceI] =
|
||||||
|
this->htcCondensation(TSat, Re)*nbrK[faceI]/L_;
|
||||||
|
}
|
||||||
|
else if (Tf > Tdew && Tf < Tvap_ && mass_[faceI] > 0.0)
|
||||||
|
{
|
||||||
|
htc[faceI] =
|
||||||
|
this->htcCondensation(TSat, Re)*nbrK[faceI]/L_;
|
||||||
|
}
|
||||||
|
else if (mass_[faceI] == 0.0)
|
||||||
|
{
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
liquidRho[faceI] = liquid_->rho(pf, Tf);
|
||||||
|
}
|
||||||
|
|
||||||
|
mass_ = max(mass_, scalar(0));
|
||||||
|
|
||||||
|
Yp.gradient() = Yvp;
|
||||||
|
|
||||||
|
// Output filmDelta [m]
|
||||||
|
const word fieldName(specieName_ + "Thickness");
|
||||||
|
|
||||||
|
scalarField& pDelta =
|
||||||
|
thicknessField
|
||||||
|
(
|
||||||
|
fieldName,
|
||||||
|
refCast<const fvMesh>(mesh)
|
||||||
|
).boundaryField()[patch().index()];
|
||||||
|
|
||||||
|
|
||||||
|
pDelta = mass_/liquidRho/magSf;
|
||||||
|
|
||||||
|
// Weight myKDelta and htc
|
||||||
|
myKDelta_ = 1.0/((1.0/myKDelta_) + (1.0/htc));
|
||||||
|
|
||||||
|
mpCpTp_ = mass_*cp/dt/magSf;
|
||||||
|
|
||||||
|
// Heat flux due to change of phase [W/m2]
|
||||||
|
dmHfg_ = dm*hfg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// inertia term [W/K/m2]
|
||||||
|
mpCpTp_ = thickness_*rho_*cp_/dt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scalarField myKDeltaNbr(patch().size(), 0.0);
|
||||||
|
scalarField mpCpTpNbr(patch().size(), 0.0);
|
||||||
|
scalarField dmHfgNbr(patch().size(), 0.0);
|
||||||
|
|
||||||
|
if (!fluid_)
|
||||||
|
{
|
||||||
|
myKDeltaNbr = nbrField.myKDelta();
|
||||||
|
mpp.distribute(myKDeltaNbr);
|
||||||
|
|
||||||
|
mpCpTpNbr = nbrField.mpCpTp();
|
||||||
|
mpp.distribute(mpCpTpNbr);
|
||||||
|
|
||||||
|
dmHfgNbr = nbrField.dmHfg();
|
||||||
|
mpp.distribute(dmHfgNbr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtain Rad heat (Qr)
|
||||||
|
scalarField Qr(Tp.size(), 0.0);
|
||||||
|
if (QrName_ != "none")
|
||||||
|
{
|
||||||
|
Qr = patch().lookupPatchField<volScalarField, scalar>(QrName_);
|
||||||
|
}
|
||||||
|
|
||||||
|
scalarField QrNbr(Tp.size(), 0.0);
|
||||||
|
if (QrNbrName_ != "none")
|
||||||
|
{
|
||||||
|
QrNbr = nbrPatch.lookupPatchField<volScalarField, scalar>(QrNbrName_);
|
||||||
|
mpp.distribute(QrNbr);
|
||||||
|
}
|
||||||
|
|
||||||
|
const scalarField dmHfg(dmHfgNbr + dmHfg_);
|
||||||
|
|
||||||
|
const scalarField mpCpdt(mpCpTpNbr + mpCpTp_);
|
||||||
|
|
||||||
|
// Qr > 0 (heat up the wall)
|
||||||
|
scalarField alpha(KDeltaNbr + mpCpdt - (Qr + QrNbr + dmHfg)/Tp);
|
||||||
|
|
||||||
|
valueFraction() = alpha/(alpha + myKDelta_);
|
||||||
|
|
||||||
|
refValue() = (KDeltaNbr*nbrIntFld + mpCpdt*Tp)/alpha;
|
||||||
|
|
||||||
|
mixedFvPatchScalarField::updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
if (fluid_)
|
||||||
|
{
|
||||||
|
scalar Qdm = gSum(dm);
|
||||||
|
scalar QMass = gSum(mass_);
|
||||||
|
scalar Qt = gSum(myKDelta_*(Tp - Tin)*magSf);
|
||||||
|
scalar QtSolid = gSum(KDeltaNbr*(Tp - nbrIntFld)*magSf);
|
||||||
|
|
||||||
|
Info<< mesh.name() << ':'
|
||||||
|
<< patch().name() << ':'
|
||||||
|
<< this->dimensionedInternalField().name() << " <- "
|
||||||
|
<< nbrMesh.name() << ':'
|
||||||
|
<< nbrPatch.name() << ':'
|
||||||
|
<< this->dimensionedInternalField().name() << " :" << nl
|
||||||
|
<< " Total mass flux [Kg/s] : " << Qdm << nl
|
||||||
|
<< " Total mass on the wall [Kg] : " << QMass << nl
|
||||||
|
<< " Total heat (>0 leaving the wall to the fluid) [W] : "
|
||||||
|
<< Qt << nl
|
||||||
|
<< " Total heat (>0 leaving the wall to the solid) [W] : "
|
||||||
|
<< QtSolid << nl
|
||||||
|
<< " wall temperature "
|
||||||
|
<< " min:" << gMin(*this)
|
||||||
|
<< " max:" << gMax(*this)
|
||||||
|
<< " avg:" << gAverage(*this)
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void humidityTemperatureCoupledMixedFvPatchScalarField::write
|
||||||
|
(
|
||||||
|
Ostream& os
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::write(os);
|
||||||
|
os.writeKeyword("QrNbr")<< QrNbrName_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("Qr")<< QrName_ << token::END_STATEMENT << nl;
|
||||||
|
|
||||||
|
if (fluid_)
|
||||||
|
{
|
||||||
|
os.writeKeyword("mode")<< MassModeTypeNames_[mode_]
|
||||||
|
<< token::END_STATEMENT <<nl;
|
||||||
|
os.writeKeyword("specieName")<< specieName_
|
||||||
|
<< token::END_STATEMENT <<nl;
|
||||||
|
os.writeKeyword("carrierMolWeight")<< Mcomp_
|
||||||
|
<< token::END_STATEMENT <<nl;
|
||||||
|
|
||||||
|
os.writeKeyword("L")<< L_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("Tvap")<< Tvap_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("fluid")<< fluid_ << token::END_STATEMENT << nl;
|
||||||
|
mass_.writeEntry("mass", os);
|
||||||
|
|
||||||
|
if (mode_ == mConstantMass)
|
||||||
|
{
|
||||||
|
cp_.writeEntry("cp", os);
|
||||||
|
// thickness_.writeEntry("thickness", os);
|
||||||
|
rho_.writeEntry("rho", os);
|
||||||
|
}
|
||||||
|
|
||||||
|
thickness_.writeEntry("thickness", os);
|
||||||
|
word liq = "liquid";
|
||||||
|
os << token::TAB << token::TAB << liq;
|
||||||
|
liquidDict_.write(os);
|
||||||
|
}
|
||||||
|
|
||||||
|
temperatureCoupledBase::write(os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePatchTypeField
|
||||||
|
(
|
||||||
|
fvPatchScalarField,
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,377 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd
|
||||||
|
\\/ 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::
|
||||||
|
compressible::
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
|
||||||
|
Description
|
||||||
|
Mixed boundary condition for temperature to be used on coupling flow and
|
||||||
|
solid regions. This BC can operate in four modes:
|
||||||
|
|
||||||
|
1) 'inert' : thermal inertia is important and no condensation/evaporation
|
||||||
|
is taken place.
|
||||||
|
2) 'condensation' : just condensation is taken place
|
||||||
|
3) 'vaporization' : just evaporation is take place
|
||||||
|
4) 'condEvap' : both condensation and evaporation take place
|
||||||
|
|
||||||
|
For 'inert' operation the 'rho', 'thickness' and 'cp' entries are needed.
|
||||||
|
|
||||||
|
In 'condensation' mode when the wall temperature (Tw) is bellow the dew
|
||||||
|
temperature (Tdew) condesation takes place and the resulting condensed mass
|
||||||
|
is stored on the wall.
|
||||||
|
|
||||||
|
In 'vaporization' the initial mass is vaporized when Tw is above the
|
||||||
|
input vaporization temperature (Tvap).
|
||||||
|
|
||||||
|
In 'condEvap', condensation and evaporation take place simultaneously.
|
||||||
|
|
||||||
|
The BC assumes no mass flow on the wall.i.e the mass condensed on a face
|
||||||
|
remains on that face. It uses a 'lump mass' model to include thermal
|
||||||
|
inertia effects.
|
||||||
|
|
||||||
|
It assumes a drop-wise type of condensation and its heat transfer Nu number
|
||||||
|
is:
|
||||||
|
|
||||||
|
51104 + 2044*T T > 295 T < 373
|
||||||
|
255510 T > 373
|
||||||
|
|
||||||
|
T. Bergam, A.Lavine, F. Incropera and D. Dewitt. Heat and Mass Transfer.
|
||||||
|
7th Edition. Chapter 10.
|
||||||
|
|
||||||
|
The mass transfer correlation used is hm = Dab*Sh/L
|
||||||
|
|
||||||
|
where:
|
||||||
|
|
||||||
|
Dab is the mass vapor difussivity
|
||||||
|
L is the characteristic lenght
|
||||||
|
Sc the Schmidt number and it is calculated as:
|
||||||
|
|
||||||
|
0.664*sqrt(Re)*cbrt(Sc) Re < 5.0E+05
|
||||||
|
0.037*pow(Re, 0.8)*cbrt(Sc) Re > 5.0E+05
|
||||||
|
|
||||||
|
NOTE: The correclation used to calculate Tdew is for water vapor.
|
||||||
|
In addition a scalar transport for the carrier specie have to be specified
|
||||||
|
via function objects or in the main solver. This specie transports the
|
||||||
|
vapour phase in the main ragion. The BC of this specie on the coupled wall
|
||||||
|
has to fixedGradient in order to allow condensation or evaporation of the
|
||||||
|
vapor in or out of this wall
|
||||||
|
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
|
||||||
|
On the fluid side
|
||||||
|
|
||||||
|
myInterfacePatchName
|
||||||
|
{
|
||||||
|
type thermalHumidityCoupledMixed;
|
||||||
|
kappa fluidThermo;
|
||||||
|
kappaName none;
|
||||||
|
|
||||||
|
// Modes of operation: inert, condensation, vaporization, condEvap
|
||||||
|
mode condEvap;
|
||||||
|
|
||||||
|
// Carrier species name
|
||||||
|
specieName H2O;
|
||||||
|
|
||||||
|
// Carrier molecular weight
|
||||||
|
carrierMolWeight 28.9;
|
||||||
|
|
||||||
|
// Characteristic lenght of the wall
|
||||||
|
L 0.1;
|
||||||
|
|
||||||
|
// Vaporasation temperature
|
||||||
|
Tvap 273;
|
||||||
|
|
||||||
|
// Liquid properties for the condensed mass
|
||||||
|
liquid
|
||||||
|
{
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
defaultCoeffs yes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// thickness, density and cp required for inert and condensation
|
||||||
|
// modes
|
||||||
|
|
||||||
|
//thickness uniform 0;
|
||||||
|
//cp uniform 0;
|
||||||
|
//rho uniform 0;
|
||||||
|
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
On the solid side:
|
||||||
|
|
||||||
|
myInterfacePatchName
|
||||||
|
{
|
||||||
|
type thermalInertiaMassTransferCoupledMixed;
|
||||||
|
kappa solidThermo;
|
||||||
|
kappaName none;
|
||||||
|
value uniform 260;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef humidityTemperatureCoupledMixedFvPatchScalarField_H
|
||||||
|
#define humidityTemperatureCoupledMixedFvPatchScalarField_H
|
||||||
|
|
||||||
|
#include "mixedFvPatchFields.H"
|
||||||
|
#include "temperatureCoupledBase.H"
|
||||||
|
#include "liquidProperties.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class humidityTemperatureCoupledMixedFvPatchScalarField Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
:
|
||||||
|
public mixedFvPatchScalarField,
|
||||||
|
public temperatureCoupledBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public enumeration
|
||||||
|
|
||||||
|
//- Modes of mass transfer
|
||||||
|
enum massTransferMode
|
||||||
|
{
|
||||||
|
mConstantMass,
|
||||||
|
mCondensation,
|
||||||
|
mEvaporation,
|
||||||
|
mCondensationAndEvaporation
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
static const NamedEnum<massTransferMode, 4> MassModeTypeNames_;
|
||||||
|
|
||||||
|
//- BC mode
|
||||||
|
massTransferMode mode_;
|
||||||
|
|
||||||
|
//- Name of field on the neighbour region
|
||||||
|
const word TnbrName_;
|
||||||
|
|
||||||
|
//- Name of the radiative heat flux in the neighbout region
|
||||||
|
const word QrNbrName_;
|
||||||
|
|
||||||
|
//- Name of the radiative heat flux
|
||||||
|
const word QrName_;
|
||||||
|
|
||||||
|
//- Name of the species on which the mass transfered (default H2O)
|
||||||
|
const word specieName_;
|
||||||
|
|
||||||
|
//- Liquid properties
|
||||||
|
autoPtr<liquidProperties> liquid_;
|
||||||
|
|
||||||
|
//- Liquid dictionary
|
||||||
|
dictionary liquidDict_;
|
||||||
|
|
||||||
|
//- Mass accumulated on faces
|
||||||
|
scalarField mass_;
|
||||||
|
|
||||||
|
//- Vaporization temperature
|
||||||
|
scalar Tvap_;
|
||||||
|
|
||||||
|
//- Cache myDelta
|
||||||
|
scalarField myKDelta_;
|
||||||
|
|
||||||
|
//- Phase change energy
|
||||||
|
scalarField dmHfg_;
|
||||||
|
|
||||||
|
//- Thermal inertia
|
||||||
|
scalarField mpCpTp_;
|
||||||
|
|
||||||
|
//- Average molecular weight for the carrier mixture in the gas phase
|
||||||
|
scalar Mcomp_;
|
||||||
|
|
||||||
|
//- Characteristic length scale
|
||||||
|
scalar L_;
|
||||||
|
|
||||||
|
//- Fluid side
|
||||||
|
bool fluid_;
|
||||||
|
|
||||||
|
//- Cp field for inert mode
|
||||||
|
scalarField cp_;
|
||||||
|
|
||||||
|
//- Thickness field for inert mode
|
||||||
|
scalarField thickness_;
|
||||||
|
|
||||||
|
//- Density field for inert mode
|
||||||
|
scalarField rho_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private members
|
||||||
|
|
||||||
|
//- Calculation of Sh
|
||||||
|
scalar Sh(const scalar Re,const scalar Sc) const;
|
||||||
|
|
||||||
|
//- Calculation of htc from the condensed surface
|
||||||
|
scalar htcCondensation(const scalar TSat,const scalar Re) const;
|
||||||
|
|
||||||
|
//- Create thickness field for output
|
||||||
|
volScalarField& thicknessField(const word& , const fvMesh&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("humidityTemperatureCoupledMixed");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given
|
||||||
|
// turbulentTemperatureCoupledBaffleMixedFvPatchScalarField onto a
|
||||||
|
// new patch
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
*this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
const humidityTemperatureCoupledMixedFvPatchScalarField&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new humidityTemperatureCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
*this,
|
||||||
|
iF
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Mapping functions
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given fvPatchField onto this fvPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const fvPatchScalarField&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Return myKDelta
|
||||||
|
const scalarField myKDelta() const
|
||||||
|
{
|
||||||
|
return myKDelta_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return mpCpdTpd
|
||||||
|
const scalarField mpCpTp() const
|
||||||
|
{
|
||||||
|
return mpCpTp_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return dmHfg
|
||||||
|
const scalarField dmHfg() const
|
||||||
|
{
|
||||||
|
return dmHfg_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream&) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -38,6 +38,9 @@ $(derivedSources)/solidificationMeltingSource/solidificationMeltingSource.C
|
|||||||
$(derivedSources)/solidificationMeltingSource/solidificationMeltingSourceIO.C
|
$(derivedSources)/solidificationMeltingSource/solidificationMeltingSourceIO.C
|
||||||
$(derivedSources)/tabulatedAccelerationSource/tabulatedAccelerationSource.C
|
$(derivedSources)/tabulatedAccelerationSource/tabulatedAccelerationSource.C
|
||||||
$(derivedSources)/tabulatedAccelerationSource/tabulated6DoFAcceleration/tabulated6DoFAcceleration.C
|
$(derivedSources)/tabulatedAccelerationSource/tabulated6DoFAcceleration/tabulated6DoFAcceleration.C
|
||||||
|
$(derivedSources)/directionalPressureGradientExplicitSource/directionalPressureGradientExplicitSource.C
|
||||||
|
$(derivedSources)/directionalPressureGradientExplicitSource/directionalPressureGradientExplicitSourceIO.C
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
interRegion = sources/interRegion
|
interRegion = sources/interRegion
|
||||||
|
|||||||
@ -3,15 +3,19 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
-I$(LIB_SRC)/sampling/lnInclude \
|
-I$(LIB_SRC)/sampling/lnInclude \
|
||||||
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
||||||
|
-I$(LIB_SRC)/transportModels \
|
||||||
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
|
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
|
||||||
|
-I$(LIB_SRC)/transportModels/incompressible/lnInclude \
|
||||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||||
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
|
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
|
||||||
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude
|
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
|
||||||
|
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lsampling \
|
-lsampling \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-lturbulenceModels \
|
-lturbulenceModels \
|
||||||
|
-lincompressibleTurbulenceModels \
|
||||||
-lcompressibleTurbulenceModels
|
-lcompressibleTurbulenceModels
|
||||||
|
|||||||
@ -0,0 +1,579 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd
|
||||||
|
\\/ 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 "directionalPressureGradientExplicitSource.H"
|
||||||
|
#include "fvMatrices.H"
|
||||||
|
#include "DimensionedField.H"
|
||||||
|
#include "IFstream.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "transform.H"
|
||||||
|
#include "surfaceInterpolate.H"
|
||||||
|
#include "turbulenceModel.H"
|
||||||
|
#include "turbulentTransportModel.H"
|
||||||
|
#include "turbulentFluidThermoModel.H"
|
||||||
|
#include "vectorFieldIOField.H"
|
||||||
|
#include "FieldField.H"
|
||||||
|
#include "emptyFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace fv
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(directionalPressureGradientExplicitSource, 0);
|
||||||
|
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
option,
|
||||||
|
directionalPressureGradientExplicitSource,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::fv::
|
||||||
|
directionalPressureGradientExplicitSource::
|
||||||
|
pressureDropModel,
|
||||||
|
3
|
||||||
|
>::names[] =
|
||||||
|
{
|
||||||
|
"volumetricFlowRateTable",
|
||||||
|
"constant",
|
||||||
|
"DarcyForchheimer"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::fv::directionalPressureGradientExplicitSource::pressureDropModel,
|
||||||
|
3
|
||||||
|
> Foam::fv::directionalPressureGradientExplicitSource::PressureDropModelNames_;
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::fv::directionalPressureGradientExplicitSource::initialise()
|
||||||
|
{
|
||||||
|
const faceZone& fZone = mesh_.faceZones()[zoneID_];
|
||||||
|
|
||||||
|
faceId_.setSize(fZone.size());
|
||||||
|
facePatchId_.setSize(fZone.size());
|
||||||
|
|
||||||
|
label count = 0;
|
||||||
|
forAll(fZone, i)
|
||||||
|
{
|
||||||
|
label faceI = fZone[i];
|
||||||
|
|
||||||
|
label faceId = -1;
|
||||||
|
label facePatchId = -1;
|
||||||
|
if (mesh_.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
faceId = faceI;
|
||||||
|
facePatchId = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
facePatchId = mesh_.boundaryMesh().whichPatch(faceI);
|
||||||
|
const polyPatch& pp = mesh_.boundaryMesh()[facePatchId];
|
||||||
|
if (isA<coupledPolyPatch>(pp))
|
||||||
|
{
|
||||||
|
if (refCast<const coupledPolyPatch>(pp).owner())
|
||||||
|
{
|
||||||
|
faceId = pp.whichFace(faceI);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
faceId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!isA<emptyPolyPatch>(pp))
|
||||||
|
{
|
||||||
|
faceId = faceI - pp.start();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
faceId = -1;
|
||||||
|
facePatchId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (faceId >= 0)
|
||||||
|
{
|
||||||
|
facePatchId_[count] = facePatchId;
|
||||||
|
faceId_[count] = faceId;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
faceId_.setSize(count);
|
||||||
|
facePatchId_.setSize(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::fv::directionalPressureGradientExplicitSource::writeProps
|
||||||
|
(
|
||||||
|
const vectorField& gradP
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
// Only write on output time
|
||||||
|
if (mesh_.time().outputTime())
|
||||||
|
{
|
||||||
|
IOdictionary propsDict
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name_ + "Properties",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
"uniform",
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
propsDict.add("gradient", gradP);
|
||||||
|
propsDict.regIOobject::write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::fv::directionalPressureGradientExplicitSource::
|
||||||
|
directionalPressureGradientExplicitSource
|
||||||
|
(
|
||||||
|
const word& sourceName,
|
||||||
|
const word& modelType,
|
||||||
|
const dictionary& dict,
|
||||||
|
const fvMesh& mesh
|
||||||
|
)
|
||||||
|
:
|
||||||
|
cellSetOption(sourceName, modelType, dict, mesh),
|
||||||
|
model_(PressureDropModelNames_.read(coeffs_.lookup("model"))),
|
||||||
|
gradP0_(cells_.size(), vector::zero),
|
||||||
|
dGradP_(cells_.size(), vector::zero),
|
||||||
|
gradPporous_(cells_.size(), vector::zero),
|
||||||
|
flowDir_(coeffs_.lookup("flowDir")),
|
||||||
|
invAPtr_(NULL),
|
||||||
|
D_(0),
|
||||||
|
I_(0),
|
||||||
|
length_(0),
|
||||||
|
pressureDrop_(0),
|
||||||
|
flowRate_(),
|
||||||
|
faceZoneName_(coeffs_.lookup("faceZone")),
|
||||||
|
zoneID_(mesh_.faceZones().findZoneID(faceZoneName_)),
|
||||||
|
faceId_(),
|
||||||
|
facePatchId_(),
|
||||||
|
relaxationFactor_(coeffs_.lookupOrDefault<scalar>("relaxationFactor",0.3)),
|
||||||
|
cellFaceMap_(cells_.size(), -1)
|
||||||
|
{
|
||||||
|
coeffs_.lookup("fieldNames") >> fieldNames_;
|
||||||
|
|
||||||
|
flowDir_ /= mag(flowDir_);
|
||||||
|
|
||||||
|
if (fieldNames_.size() != 1)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"Foam::fv::directionalPressureGradientExplicitSource::"
|
||||||
|
"directionalPressureGradientExplicitSource"
|
||||||
|
"("
|
||||||
|
"const word&, "
|
||||||
|
"const word&, "
|
||||||
|
"const dictionary&, "
|
||||||
|
"const fvMesh&"
|
||||||
|
")"
|
||||||
|
) << "Source can only be applied to a single field. Current "
|
||||||
|
<< "settings are:" << fieldNames_ << exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zoneID_ < 0)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"directionalPressureGradientExplicitSource::"
|
||||||
|
"directionalPressureGradientExplicitSource\n"
|
||||||
|
"(\n"
|
||||||
|
"const word&,\n "
|
||||||
|
"const word&,\n "
|
||||||
|
"const dictionary&, \n"
|
||||||
|
"const fvMesh& \n"
|
||||||
|
")\n"
|
||||||
|
)
|
||||||
|
<< type() << " " << this->name() << ": "
|
||||||
|
<< " Unknown face zone name: " << faceZoneName_
|
||||||
|
<< ". Valid face zones are: " << mesh_.faceZones().names()
|
||||||
|
<< nl << exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model_ == pVolumetricFlowRateTable)
|
||||||
|
{
|
||||||
|
flowRate_ = interpolationTable<scalar>(coeffs_);
|
||||||
|
}
|
||||||
|
else if (model_ == pConstant)
|
||||||
|
{
|
||||||
|
coeffs_.lookup("pressureDrop") >> pressureDrop_;
|
||||||
|
}
|
||||||
|
else if (model_ == pDarcyForchheimer)
|
||||||
|
{
|
||||||
|
coeffs_.lookup("D") >> D_;
|
||||||
|
coeffs_.lookup("I") >> I_;
|
||||||
|
coeffs_.lookup("length") >> length_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"directionalPressureGradientExplicitSource::"
|
||||||
|
"directionalPressureGradientExplicitSource\n"
|
||||||
|
"(\n"
|
||||||
|
"const word&, \n"
|
||||||
|
"const word&, \n"
|
||||||
|
"const dictionary&, \n"
|
||||||
|
"const fvMesh& \n"
|
||||||
|
") \n"
|
||||||
|
)
|
||||||
|
<< "Did not find mode " << model_
|
||||||
|
<< nl
|
||||||
|
<< "Please set 'model' to one of "
|
||||||
|
<< PressureDropModelNames_.toc()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
applied_.setSize(fieldNames_.size(), false);
|
||||||
|
|
||||||
|
// Read the initial pressure gradient from file if it exists
|
||||||
|
IFstream propsFile
|
||||||
|
(
|
||||||
|
mesh_.time().timePath()/"uniform"/(name_ + "Properties")
|
||||||
|
);
|
||||||
|
|
||||||
|
if (propsFile.good())
|
||||||
|
{
|
||||||
|
Info<< " Reading pressure gradient from file" << endl;
|
||||||
|
dictionary propsDict(dictionary::null, propsFile);
|
||||||
|
propsDict.lookup("gradient") >> gradP0_;
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< " Initial pressure gradient = " << gradP0_ << nl << endl;
|
||||||
|
|
||||||
|
initialise();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::fv::directionalPressureGradientExplicitSource::correct
|
||||||
|
(
|
||||||
|
volVectorField& U
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const scalarField& rAU = invAPtr_().internalField();
|
||||||
|
|
||||||
|
const scalarField magUn(mag(U), cells_);
|
||||||
|
|
||||||
|
const surfaceScalarField& phi =
|
||||||
|
mesh().lookupObject<surfaceScalarField>("phi");
|
||||||
|
|
||||||
|
switch (model_)
|
||||||
|
{
|
||||||
|
case pDarcyForchheimer:
|
||||||
|
{
|
||||||
|
if (phi.dimensions() == dimVelocity*dimArea)
|
||||||
|
{
|
||||||
|
const incompressible::turbulenceModel& turbModel =
|
||||||
|
mesh().lookupObject<incompressible::turbulenceModel>
|
||||||
|
(
|
||||||
|
turbulenceModel::propertiesName
|
||||||
|
);
|
||||||
|
|
||||||
|
const scalarField nu(turbModel.nu(), cells_);
|
||||||
|
|
||||||
|
gradPporous_ = -flowDir_*(D_*nu + I_*0.5*magUn)*magUn*length_;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const compressible::turbulenceModel& turbModel =
|
||||||
|
mesh().lookupObject<compressible::turbulenceModel>
|
||||||
|
(
|
||||||
|
turbulenceModel::propertiesName
|
||||||
|
);
|
||||||
|
|
||||||
|
const scalarField mu(turbModel.mu(),cells_);
|
||||||
|
|
||||||
|
const scalarField rho(turbModel.rho(),cells_);
|
||||||
|
|
||||||
|
gradPporous_ =
|
||||||
|
- flowDir_*(D_*mu + I_*0.5*rho*magUn)*magUn*length_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case pConstant:
|
||||||
|
{
|
||||||
|
gradPporous_ = -flowDir_*pressureDrop_;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case pVolumetricFlowRateTable:
|
||||||
|
{
|
||||||
|
scalar volFlowRate = 0;
|
||||||
|
scalar totalphi = 0;
|
||||||
|
|
||||||
|
forAll(faceId_, i)
|
||||||
|
{
|
||||||
|
label faceI = faceId_[i];
|
||||||
|
if (facePatchId_[i] != -1)
|
||||||
|
{
|
||||||
|
label patchI = facePatchId_[i];
|
||||||
|
totalphi += phi.boundaryField()[patchI][faceI];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
totalphi += phi[faceI];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reduce(totalphi, sumOp<scalar>());
|
||||||
|
|
||||||
|
if (phi.dimensions() == dimVelocity*dimArea)
|
||||||
|
{
|
||||||
|
volFlowRate = mag(totalphi);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const compressible::turbulenceModel& turbModel =
|
||||||
|
mesh().lookupObject<compressible::turbulenceModel>
|
||||||
|
(
|
||||||
|
turbulenceModel::propertiesName
|
||||||
|
);
|
||||||
|
const scalarField rho(turbModel.rho(),cells_);
|
||||||
|
const scalarField cv(mesh_.V(), cells_);
|
||||||
|
scalar rhoAve = gSumProd(rho, cv)/gSum(cv);
|
||||||
|
volFlowRate = mag(totalphi)/rhoAve;
|
||||||
|
}
|
||||||
|
|
||||||
|
gradPporous_ = -flowDir_*flowRate_(volFlowRate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const faceZone& fZone = mesh_.faceZones()[zoneID_];
|
||||||
|
|
||||||
|
labelList meshToLocal(mesh_.nCells(), -1);
|
||||||
|
forAll(cells_, i)
|
||||||
|
{
|
||||||
|
meshToLocal[cells_[i]] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
labelList faceToCellIndex(fZone.size(), -1);
|
||||||
|
const labelList& mc = fZone.masterCells();
|
||||||
|
const labelList& sc = fZone.slaveCells();
|
||||||
|
|
||||||
|
forAll(fZone, i)
|
||||||
|
{
|
||||||
|
label masterCellI = mc[i];
|
||||||
|
|
||||||
|
if (meshToLocal[masterCellI] != -1 && masterCellI != -1)
|
||||||
|
{
|
||||||
|
faceToCellIndex[i] = meshToLocal[masterCellI];
|
||||||
|
}
|
||||||
|
else if (meshToLocal[masterCellI] == -1)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"directionalPressureGradientExplicitSource::"
|
||||||
|
"directionalPressureGradientExplicitSource\n"
|
||||||
|
"correct"
|
||||||
|
"("
|
||||||
|
" volVectorField& U \n"
|
||||||
|
")"
|
||||||
|
) << "Did not find cell " << masterCellI
|
||||||
|
<< "in cellZone :" << cellSetName()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Accumulate 'upstream' velocity into cells
|
||||||
|
vectorField UfCells(cells_.size(), vector::zero);
|
||||||
|
scalarField UfCellWeights(cells_.size(), 0.0);
|
||||||
|
|
||||||
|
const polyBoundaryMesh& pbm = mesh_.boundaryMesh();
|
||||||
|
|
||||||
|
FieldField<Field, vector> upwindValues(pbm.size());
|
||||||
|
|
||||||
|
forAll(U.boundaryField(), patchI)
|
||||||
|
{
|
||||||
|
const fvPatchVectorField& pf = U.boundaryField()[patchI];
|
||||||
|
|
||||||
|
if (pf.coupled())
|
||||||
|
{
|
||||||
|
upwindValues.set(patchI, pf.patchNeighbourField());
|
||||||
|
}
|
||||||
|
else if (!isA<emptyFvPatchScalarField>(pf))
|
||||||
|
{
|
||||||
|
upwindValues.set(patchI, new vectorField(pf));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(fZone, i)
|
||||||
|
{
|
||||||
|
label faceI = fZone[i];
|
||||||
|
label cellId = faceToCellIndex[i];
|
||||||
|
|
||||||
|
if (cellId != -1)
|
||||||
|
{
|
||||||
|
label sourceCellId = sc[i];
|
||||||
|
if (mesh_.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
scalar w = mesh_.magSf()[faceI];
|
||||||
|
UfCells[cellId] += U[sourceCellId]*w;
|
||||||
|
UfCellWeights[cellId] += w;
|
||||||
|
}
|
||||||
|
else if (fZone.flipMap()[i])
|
||||||
|
{
|
||||||
|
label patchI = pbm.patchID()[faceI-mesh_.nInternalFaces()];
|
||||||
|
label localFaceI = pbm[patchI].whichFace(faceI);
|
||||||
|
|
||||||
|
scalar w = mesh_.magSf().boundaryField()[patchI][localFaceI];
|
||||||
|
|
||||||
|
if (upwindValues.set(patchI))
|
||||||
|
{
|
||||||
|
UfCells[cellId] += upwindValues[patchI][localFaceI]*w;
|
||||||
|
UfCellWeights[cellId] += w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UfCells /= UfCellWeights;
|
||||||
|
|
||||||
|
forAll(cells_, i)
|
||||||
|
{
|
||||||
|
label cellI = cells_[i];
|
||||||
|
|
||||||
|
const vector Ufnorm = UfCells[i]/mag(UfCells[i]);
|
||||||
|
|
||||||
|
const tensor D = rotationTensor(Ufnorm, flowDir_);
|
||||||
|
|
||||||
|
dGradP_[i] +=
|
||||||
|
relaxationFactor_*
|
||||||
|
(
|
||||||
|
(D & UfCells[i]) - U[cellI]
|
||||||
|
)/rAU[cellI];
|
||||||
|
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "Difference mag(U) = "
|
||||||
|
<< mag(UfCells[i]) - mag(U[cellI])
|
||||||
|
<< endl;
|
||||||
|
Info<< "Pressure drop in flowDir direction : "
|
||||||
|
<< gradPporous_[i] << endl;
|
||||||
|
Info<< "UfCell:= " << UfCells[i] << "U : " << U[cellI] << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writeProps(gradP0_ + dGradP_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::fv::directionalPressureGradientExplicitSource::addSup
|
||||||
|
(
|
||||||
|
fvMatrix<vector>& eqn,
|
||||||
|
const label fieldI
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DimensionedField<vector, volMesh> Su
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name_ + fieldNames_[fieldI] + "Sup",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedVector("zero", eqn.dimensions()/dimVolume, vector::zero)
|
||||||
|
);
|
||||||
|
|
||||||
|
UIndirectList<vector>(Su, cells_) = gradP0_ + dGradP_ + gradPporous_;
|
||||||
|
|
||||||
|
eqn += Su;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::fv::directionalPressureGradientExplicitSource::addSup
|
||||||
|
(
|
||||||
|
const volScalarField& rho,
|
||||||
|
fvMatrix<vector>& eqn,
|
||||||
|
const label fieldI
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->addSup(eqn, fieldI);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::fv::directionalPressureGradientExplicitSource::constrain
|
||||||
|
(
|
||||||
|
fvMatrix<vector>& eqn,
|
||||||
|
const label
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (invAPtr_.empty())
|
||||||
|
{
|
||||||
|
invAPtr_.reset
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name_ + ":invA",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
1.0/eqn.A()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
invAPtr_() = 1.0/eqn.A();
|
||||||
|
}
|
||||||
|
|
||||||
|
gradP0_ += dGradP_;
|
||||||
|
dGradP_ = vector::zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,268 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd
|
||||||
|
\\/ 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::fv::directionalPressureGradientExplicitSource
|
||||||
|
|
||||||
|
Description
|
||||||
|
Creates an explicit pressure gradient source in such a way to deflect the
|
||||||
|
flow towards an specific direction (flowDir). Alternatively add an extra
|
||||||
|
pressure drop in the flowDir direction using a model.
|
||||||
|
|
||||||
|
\heading Source usage
|
||||||
|
Example usage:
|
||||||
|
\verbatim
|
||||||
|
airDeflection
|
||||||
|
{
|
||||||
|
type directionalPressureGradientExplicitSource;
|
||||||
|
active true;
|
||||||
|
|
||||||
|
directionalPressureGradientExplicitSourceCoeffs
|
||||||
|
{
|
||||||
|
selectionMode cellZone;
|
||||||
|
cellZone cZone;
|
||||||
|
|
||||||
|
fieldNames (U); // Name of the field
|
||||||
|
flowDir (1 1 0); // Desired flow direction
|
||||||
|
faceZone f0Zone; // Face zone upstream cell zone
|
||||||
|
relaxationFactor 0.3; // Relaxation factor for flow
|
||||||
|
// deflection (default 0.3)
|
||||||
|
|
||||||
|
//Pressure drop model [Pa]
|
||||||
|
model volumetricFlowRateTable;//constant;//DarcyForchheimer;
|
||||||
|
|
||||||
|
//DarcyForchheimer model
|
||||||
|
// deltaP = (D*mu + 0.5*rho*magUn)*magUn*length_
|
||||||
|
|
||||||
|
D 5e7;
|
||||||
|
I 0;
|
||||||
|
length 1e-3;
|
||||||
|
|
||||||
|
//constant model
|
||||||
|
pressureDrop 40;
|
||||||
|
|
||||||
|
//volumetricFlowRateTable model
|
||||||
|
outOfBounds clamp;
|
||||||
|
fileName "volFlowRateTable";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
NOTE: In order to obtain the upwind velocities this function loops over
|
||||||
|
the slaves cells of the faceZone specified in the dictionary, on the other
|
||||||
|
hand, the cellZone to which this source term is applied should be composed
|
||||||
|
of the master cells and they should be 'downwind' the faceZone.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
directionalPressureGradientExplicitSource.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef directionalPressureGradientExplicitSource_H
|
||||||
|
#define directionalPressureGradientExplicitSource_H
|
||||||
|
|
||||||
|
#include "cellSetOption.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
#include "topoSetSource.H"
|
||||||
|
#include "cellSet.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "fvOption.H"
|
||||||
|
#include "interpolationTable.H"
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace fv
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class directionalPressureGradientExplicitSource Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class directionalPressureGradientExplicitSource
|
||||||
|
:
|
||||||
|
public cellSetOption
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public enumeration
|
||||||
|
|
||||||
|
//- Modes of pressure drop
|
||||||
|
enum pressureDropModel
|
||||||
|
{
|
||||||
|
pVolumetricFlowRateTable,
|
||||||
|
pConstant,
|
||||||
|
pDarcyForchheimer
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
static const NamedEnum<pressureDropModel, 3> PressureDropModelNames_;
|
||||||
|
|
||||||
|
//- Pressure drop model
|
||||||
|
pressureDropModel model_;
|
||||||
|
|
||||||
|
//- Pressure gradient before correction
|
||||||
|
vectorField gradP0_;
|
||||||
|
|
||||||
|
//- Change in pressure gradient
|
||||||
|
vectorField dGradP_;
|
||||||
|
|
||||||
|
//- Pressure drop due to porous media
|
||||||
|
vectorField gradPporous_;
|
||||||
|
|
||||||
|
//- Flow direction
|
||||||
|
vector flowDir_;
|
||||||
|
|
||||||
|
//- Matrix 1/A coefficients field pointer
|
||||||
|
autoPtr<volScalarField> invAPtr_;
|
||||||
|
|
||||||
|
//- Darcy pressure loss coefficient
|
||||||
|
scalar D_;
|
||||||
|
|
||||||
|
//- Inertia pressure lost coefficient
|
||||||
|
scalar I_;
|
||||||
|
|
||||||
|
//- Porous media length
|
||||||
|
scalar length_;
|
||||||
|
|
||||||
|
//- Constant pressure drop
|
||||||
|
scalar pressureDrop_;
|
||||||
|
|
||||||
|
//- Volumetric flow rate vs pressure drop table
|
||||||
|
interpolationTable<scalar> flowRate_;
|
||||||
|
|
||||||
|
//- Name of the faceZone at the heat exchange inlet
|
||||||
|
word faceZoneName_;
|
||||||
|
|
||||||
|
//- Id for the face zone
|
||||||
|
label zoneID_;
|
||||||
|
|
||||||
|
//- Local list of face IDs
|
||||||
|
labelList faceId_;
|
||||||
|
|
||||||
|
//- Local list of patch ID per face
|
||||||
|
labelList facePatchId_;
|
||||||
|
|
||||||
|
//- Relaxation factor
|
||||||
|
scalar relaxationFactor_;
|
||||||
|
|
||||||
|
//- Cells faces mapping
|
||||||
|
labelList cellFaceMap_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Init
|
||||||
|
void initialise();
|
||||||
|
|
||||||
|
//- Write the pressure gradient to file (for restarts etc)
|
||||||
|
void writeProps(const vectorField& gradP) const;
|
||||||
|
|
||||||
|
//- Correct driving force for a constant mass flow rate
|
||||||
|
void update(fvMatrix<vector>& eqn);
|
||||||
|
|
||||||
|
//- Disallow default bitwise copy construct
|
||||||
|
directionalPressureGradientExplicitSource
|
||||||
|
(
|
||||||
|
const directionalPressureGradientExplicitSource&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const directionalPressureGradientExplicitSource&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("directionalPressureGradientExplicitSource");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from explicit source name and mesh
|
||||||
|
directionalPressureGradientExplicitSource
|
||||||
|
(
|
||||||
|
const word& sourceName,
|
||||||
|
const word& modelType,
|
||||||
|
const dictionary& dict,
|
||||||
|
const fvMesh& mesh
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Evaluate
|
||||||
|
|
||||||
|
//- Correct the pressure gradient
|
||||||
|
virtual void correct(volVectorField& U);
|
||||||
|
|
||||||
|
//- Add explicit contribution to momentum equation
|
||||||
|
virtual void addSup
|
||||||
|
(
|
||||||
|
fvMatrix<vector>& eqn,
|
||||||
|
const label fieldI
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Add explicit contribution to compressible momentum equation
|
||||||
|
virtual void addSup
|
||||||
|
(
|
||||||
|
const volScalarField& rho,
|
||||||
|
fvMatrix<vector>& eqn,
|
||||||
|
const label fieldI
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Set 1/A coefficient
|
||||||
|
virtual void constrain
|
||||||
|
(
|
||||||
|
fvMatrix<vector>& eqn,
|
||||||
|
const label fieldI
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write the source properties
|
||||||
|
virtual void writeData(Ostream&) const;
|
||||||
|
|
||||||
|
//- Read source dictionary
|
||||||
|
virtual bool read(const dictionary& dict);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace fv
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd
|
||||||
|
\\/ 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 "directionalPressureGradientExplicitSource.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::fv::directionalPressureGradientExplicitSource::writeData
|
||||||
|
(
|
||||||
|
Ostream& os
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"void Foam::fv::directionalPressureGradientExplicitSource::writeData"
|
||||||
|
"("
|
||||||
|
"Ostream&"
|
||||||
|
") const"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::fv::directionalPressureGradientExplicitSource::read
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const dictionary coeffs(dict.subDict(typeName + "Coeffs"));
|
||||||
|
|
||||||
|
relaxationFactor_ =
|
||||||
|
coeffs.lookupOrDefault<scalar>("relaxationFactor", 0.3);
|
||||||
|
|
||||||
|
coeffs.lookup("flowDir") >> flowDir_;
|
||||||
|
flowDir_ /= mag(flowDir_);
|
||||||
|
|
||||||
|
if (model_ == pConstant)
|
||||||
|
{
|
||||||
|
coeffs.lookup("pressureDrop") >> pressureDrop_;
|
||||||
|
}
|
||||||
|
else if (model_ == pDarcyForchheimer)
|
||||||
|
{
|
||||||
|
coeffs.lookup("D") >> D_;
|
||||||
|
coeffs.lookup("I") >> I_;
|
||||||
|
coeffs.lookup("length") >> length_;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object H2O;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 0 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0.01;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
".*"
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
value uniform 0.01;
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type fixedGradient;
|
||||||
|
gradient uniform 0.0;
|
||||||
|
}
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type uniformFixedValue;
|
||||||
|
uniformValue table
|
||||||
|
(
|
||||||
|
(0 0.01)
|
||||||
|
(60 0.01)
|
||||||
|
(61 0.00)
|
||||||
|
(100 0.00)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
value uniform 0.01;
|
||||||
|
inletValue uniform 0.01;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/cabin";
|
||||||
|
object T;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 0 1 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 300;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type uniformFixedValue;
|
||||||
|
uniformValue table
|
||||||
|
(
|
||||||
|
(0 273)
|
||||||
|
(60 273)
|
||||||
|
(61 308)
|
||||||
|
(100 308)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue $internalField;
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type humidityTemperatureCoupledMixed;
|
||||||
|
kappa fluidThermo;
|
||||||
|
kappaName none;
|
||||||
|
|
||||||
|
// Mode of operation: inert, condensation, vaporization,
|
||||||
|
// condensationAndEvaporation
|
||||||
|
mode condensationAndEvaporation;
|
||||||
|
specieName H2O;
|
||||||
|
carrierMolWeight 28.9 ;//Air from thermophysicalProperties
|
||||||
|
L 0.1;
|
||||||
|
Tvap 273; //Minimum temperature for evaporation
|
||||||
|
|
||||||
|
liquid
|
||||||
|
{
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
defaultCoeffs yes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volVectorField;
|
||||||
|
location "0/cabin";
|
||||||
|
object U;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform (0 0 0);
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type uniformFixedValue;
|
||||||
|
uniformValue table
|
||||||
|
(
|
||||||
|
(0 (0 0 0))
|
||||||
|
(60 (0 0 0))
|
||||||
|
(61 (-2 0 0))
|
||||||
|
(100 (-2 0 0))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type pressureInletOutletVelocity;
|
||||||
|
inletValue uniform (0 0 0);
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/cabin";
|
||||||
|
object alphat;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type compressible::alphatWallFunction;
|
||||||
|
Prt 0.85;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type compressible::alphatWallFunction;
|
||||||
|
Prt 0.85;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/cabin";
|
||||||
|
object k;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0.00015;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type uniformFixedValue;
|
||||||
|
uniformValue table
|
||||||
|
(
|
||||||
|
(0 0.00015)
|
||||||
|
(60 0.00015)
|
||||||
|
(61 0.00015)
|
||||||
|
(100 0.00015)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue uniform 0.00015;
|
||||||
|
value uniform 0.00015;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type kqRWallFunction;
|
||||||
|
value uniform 0.00015;
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type kqRWallFunction;
|
||||||
|
value uniform 0.00015;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/cabin";
|
||||||
|
object nut;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type nutkWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type nutkWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/cabin";
|
||||||
|
object omega;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0.2;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type uniformFixedValue;
|
||||||
|
uniformValue table
|
||||||
|
(
|
||||||
|
(0 0.2)
|
||||||
|
(60 0.2)
|
||||||
|
(61 0.2)
|
||||||
|
(100 0.2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue uniform 0.2;
|
||||||
|
value uniform 0.2;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
".*"
|
||||||
|
{
|
||||||
|
type omegaWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
beta1 0.075;
|
||||||
|
value uniform 0.2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/cabin";
|
||||||
|
object p;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 100000;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/cabin";
|
||||||
|
object p_rgh;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 100000;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type fixedFluxPressure;
|
||||||
|
gradient uniform 0;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type fixedFluxPressure;
|
||||||
|
gradient uniform 0;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
cabin_to_windshield
|
||||||
|
{
|
||||||
|
type fixedFluxPressure;
|
||||||
|
gradient uniform 0;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/windshield";
|
||||||
|
object T;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 0 1 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 260;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
windshield_to_cabin
|
||||||
|
{
|
||||||
|
type humidityTemperatureCoupledMixed;
|
||||||
|
kappa solidThermo;
|
||||||
|
kappaName none;
|
||||||
|
value uniform 260;
|
||||||
|
}
|
||||||
|
exterior
|
||||||
|
{
|
||||||
|
type externalWallHeatFluxTemperature;
|
||||||
|
kappa solidThermo;
|
||||||
|
kappaName none;
|
||||||
|
h uniform 10;
|
||||||
|
Ta uniform 260;
|
||||||
|
value uniform 260;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class volScalarField;
|
||||||
|
location "0/windshield";
|
||||||
|
object p;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 100000;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
".*"
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 100000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
11
tutorials/heatTransfer/chtMultiRegionFoam/windshieldCondensation/Allclean
Executable file
11
tutorials/heatTransfer/chtMultiRegionFoam/windshieldCondensation/Allclean
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # Run from this directory
|
||||||
|
|
||||||
|
# Source tutorial run functions
|
||||||
|
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
|
||||||
|
|
||||||
|
cleanCase
|
||||||
|
|
||||||
|
rm -rf 0
|
||||||
|
rm -rf constant/windshield/polyMesh
|
||||||
|
rm -rf constant/cabin/polyMesh
|
||||||
27
tutorials/heatTransfer/chtMultiRegionFoam/windshieldCondensation/Allrun
Executable file
27
tutorials/heatTransfer/chtMultiRegionFoam/windshieldCondensation/Allrun
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # Run from this directory
|
||||||
|
|
||||||
|
# Source tutorial run functions
|
||||||
|
. $WM_PROJECT_DIR/bin/tools/RunFunctions
|
||||||
|
|
||||||
|
# create the underlying block mesh
|
||||||
|
runApplication blockMesh
|
||||||
|
|
||||||
|
# create the set for the obstacles
|
||||||
|
runApplication topoSet
|
||||||
|
|
||||||
|
# mesh processing to generate the inlet duct
|
||||||
|
runApplication subsetMesh c0 -patch walls -overwrite
|
||||||
|
|
||||||
|
# split into the cabin, ice and exterior regions
|
||||||
|
runApplication splitMeshRegions -cellZones -overwrite
|
||||||
|
|
||||||
|
# create register face and cell zones
|
||||||
|
rm log.topoSet
|
||||||
|
runApplication topoSet -region cabin -dict system/topoSetDictRegister
|
||||||
|
|
||||||
|
# set the initial fields
|
||||||
|
rm -rf 0
|
||||||
|
cp -rf 0.org 0
|
||||||
|
|
||||||
|
runApplication $(getApplication)
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class uniformDimensionedVectorField;
|
||||||
|
location "constant";
|
||||||
|
object g;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -2 0 0 0 0];
|
||||||
|
value ( 0 -9.81 0 );
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object radiationProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
radiation off;
|
||||||
|
|
||||||
|
radiationModel none;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object thermophysicalProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
thermoType
|
||||||
|
{
|
||||||
|
type heRhoThermo;
|
||||||
|
mixture pureMixture;
|
||||||
|
transport const;
|
||||||
|
thermo hConst;
|
||||||
|
equationOfState incompressiblePerfectGas;
|
||||||
|
specie specie;
|
||||||
|
energy sensibleEnthalpy;
|
||||||
|
}
|
||||||
|
|
||||||
|
dpdt no;
|
||||||
|
|
||||||
|
mixture
|
||||||
|
{
|
||||||
|
specie
|
||||||
|
{
|
||||||
|
nMoles 1;
|
||||||
|
molWeight 28.9;
|
||||||
|
}
|
||||||
|
thermodynamics
|
||||||
|
{
|
||||||
|
Cp 1007;
|
||||||
|
Hf 0;
|
||||||
|
}
|
||||||
|
equationOfState
|
||||||
|
{
|
||||||
|
pRef 1e5;
|
||||||
|
}
|
||||||
|
transport
|
||||||
|
{
|
||||||
|
mu 1.84e-05;
|
||||||
|
Pr 0.7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object turbulenceProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
simulationType RAS;
|
||||||
|
|
||||||
|
RAS
|
||||||
|
{
|
||||||
|
RASModel kOmegaSST;
|
||||||
|
|
||||||
|
turbulence on;
|
||||||
|
|
||||||
|
printCoeffs on;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev-OpenCFD |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format binary;
|
||||||
|
class polyBoundaryMesh;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object boundary;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
5
|
||||||
|
(
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
nFaces 70;
|
||||||
|
startFace 648417;
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
nFaces 2250;
|
||||||
|
startFace 648487;
|
||||||
|
}
|
||||||
|
exterior
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
nFaces 2250;
|
||||||
|
startFace 650737;
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
inGroups 1(symmetryPlane);
|
||||||
|
nFaces 4365;
|
||||||
|
startFace 652987;
|
||||||
|
}
|
||||||
|
walls
|
||||||
|
{
|
||||||
|
type wall;
|
||||||
|
inGroups 1(wall);
|
||||||
|
nFaces 15071;
|
||||||
|
startFace 657352;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object regionProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
regions
|
||||||
|
(
|
||||||
|
fluid (cabin)
|
||||||
|
solid (windshield)
|
||||||
|
);
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object radiationProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
radiation off;
|
||||||
|
|
||||||
|
radiationModel none;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object thermophysicalProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
thermoType
|
||||||
|
{
|
||||||
|
type heSolidThermo;
|
||||||
|
mixture pureMixture;
|
||||||
|
transport constIso;
|
||||||
|
thermo hConst;
|
||||||
|
equationOfState rhoConst;
|
||||||
|
specie specie;
|
||||||
|
energy sensibleEnthalpy;
|
||||||
|
}
|
||||||
|
|
||||||
|
mixture
|
||||||
|
{
|
||||||
|
specie
|
||||||
|
{
|
||||||
|
nMoles 1;
|
||||||
|
molWeight 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
transport
|
||||||
|
{
|
||||||
|
kappa 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
|
thermodynamics
|
||||||
|
{
|
||||||
|
Hf 0;
|
||||||
|
Cp 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
equationOfState
|
||||||
|
{
|
||||||
|
rho 2400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,154 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object blockMeshDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
convertToMeters 1;
|
||||||
|
|
||||||
|
vertices
|
||||||
|
(
|
||||||
|
( -0.10 0 0) // 0 // cabin interior
|
||||||
|
( -0.05 0 0) // 1
|
||||||
|
( 0.20 0 0) // 2
|
||||||
|
( 0.20 0.05 0) // 3
|
||||||
|
( -0.05 0.05 0) // 4
|
||||||
|
( -0.05 0.10 0) // 5
|
||||||
|
( 1.00 0.10 0) // 6
|
||||||
|
( 1.00 0.50 0) // 7
|
||||||
|
( 0.35 0.50 0) // 8
|
||||||
|
( 0.30 0.50 0) // 9
|
||||||
|
( -0.10 0.10 0) // 10
|
||||||
|
( -0.10 0.05 0) // 11
|
||||||
|
|
||||||
|
( -0.1005 0.10 0) // 12 // windshield (doubled vertices with 10, 9)
|
||||||
|
( 0.2995 0.50 0) // 13
|
||||||
|
|
||||||
|
( -0.50 0.50 0) // 14 // cabin exterior
|
||||||
|
( -0.50 0.10 0) // 15
|
||||||
|
|
||||||
|
|
||||||
|
( 0 0 0.70) // 16 // cabin interior
|
||||||
|
( 0.05 0 0.70) // 17
|
||||||
|
( 0.20 0 0.70) // 18
|
||||||
|
( 0.20 0.05 0.70) // 19
|
||||||
|
( 0.05 0.05 0.70) // 20
|
||||||
|
( 0.05 0.10 0.70) // 21
|
||||||
|
( 1.00 0.10 0.70) // 22
|
||||||
|
( 1.00 0.50 0.70) // 23
|
||||||
|
( 0.45 0.50 0.70) // 24
|
||||||
|
( 0.40 0.50 0.70) // 25
|
||||||
|
( 0 0.10 0.70) // 26
|
||||||
|
( 0 0.05 0.70) // 27
|
||||||
|
|
||||||
|
( -0.0005 0.10 0.70) // 28 // windshield (doubled vertices with 26,25)
|
||||||
|
( 0.3995 0.50 0.70) // 29
|
||||||
|
|
||||||
|
( -0.50 0.50 0.70) // 30 // cabin exterior
|
||||||
|
( -0.50 0.10 0.70) // 31
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
blocks
|
||||||
|
(
|
||||||
|
hex ( 1 2 3 4 17 18 19 20) cabin (15 5 50) simpleGrading (1 1 1)
|
||||||
|
hex ( 0 1 4 11 16 17 20 27) cabin ( 7 5 50) simpleGrading (1 1 1)
|
||||||
|
hex (11 4 5 10 27 20 21 26) cabin ( 7 5 50) simpleGrading (1 1 1)
|
||||||
|
hex (10 5 8 9 26 21 24 25) cabin ( 7 45 50) simpleGrading (1 1 1)
|
||||||
|
hex ( 5 6 7 8 21 22 23 24) cabin (45 45 50) simpleGrading (3 1 1)
|
||||||
|
|
||||||
|
hex ( 12 10 9 13 28 26 25 29) windshield (45 45 50) simpleGrading (1 1 1)
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
edges
|
||||||
|
(
|
||||||
|
arc 9 10 (0.07 0.3 0)
|
||||||
|
arc 12 13 (0.0695 0.3 0)
|
||||||
|
|
||||||
|
arc 25 26 (0.17 0.3 0.70)
|
||||||
|
arc 28 29 (0.1695 0.3 0.70)
|
||||||
|
|
||||||
|
arc 9 25 (0.33 0.5 0.35)
|
||||||
|
arc 13 29 (0.3295 0.5 0.35)
|
||||||
|
|
||||||
|
arc 10 26 (-0.07 0.1 0.35)
|
||||||
|
arc 12 28 (-0.0705 0.1 0.35)
|
||||||
|
|
||||||
|
arc 5 8 (0.13 0.3 0)
|
||||||
|
arc 21 24 (0.23 0.3 0.70)
|
||||||
|
|
||||||
|
arc 8 24 (0.38 0.5 0.35)
|
||||||
|
arc 5 21 (-0.02 0.1 0.35)
|
||||||
|
|
||||||
|
arc 11 27 (-0.07 0.05 0.35)
|
||||||
|
arc 0 16 (-0.07 0 0.35)
|
||||||
|
|
||||||
|
arc 4 20 (-0.02 0.05 0.35)
|
||||||
|
arc 1 17 (-0.02 0 0.35)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
defaultPatch
|
||||||
|
{
|
||||||
|
name walls;
|
||||||
|
type wall;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
boundary
|
||||||
|
(
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(2 18 19 3)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(6 22 23 7)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
exterior
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(12 13 29 28)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
symmetry
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(5 6 7 8)
|
||||||
|
(10 5 8 9)
|
||||||
|
(12 10 9 13)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
mergePatchPairs
|
||||||
|
(
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object fvOptions;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
airDeflection
|
||||||
|
{
|
||||||
|
type directionalPressureGradientExplicitSource;
|
||||||
|
active true;
|
||||||
|
|
||||||
|
directionalPressureGradientExplicitSourceCoeffs
|
||||||
|
{
|
||||||
|
selectionMode cellZone;
|
||||||
|
cellZone c1Zone;
|
||||||
|
|
||||||
|
fieldNames (U);
|
||||||
|
flowDir (1 2 0); // flow direction
|
||||||
|
relaxationFactor 0.3;
|
||||||
|
|
||||||
|
faceZone f1Zone;
|
||||||
|
|
||||||
|
//Pressure drop model [Pa]
|
||||||
|
model DarcyForchheimer;//volumetricFlowRateTable/constant
|
||||||
|
|
||||||
|
//DarcyForchheimer
|
||||||
|
D 5e7;
|
||||||
|
I 0;
|
||||||
|
length 0.01;
|
||||||
|
|
||||||
|
//constant
|
||||||
|
pressureDrop 8;
|
||||||
|
|
||||||
|
//volumetricFlowRateTable
|
||||||
|
outOfBounds clamp;
|
||||||
|
fileName "volFlowRateTable";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object fvSchemes;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
ddtSchemes
|
||||||
|
{
|
||||||
|
default Euler;
|
||||||
|
}
|
||||||
|
|
||||||
|
gradSchemes
|
||||||
|
{
|
||||||
|
default Gauss linear;
|
||||||
|
grad(p_rgh) Gauss linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
divSchemes
|
||||||
|
{
|
||||||
|
default none;
|
||||||
|
div(phi,U) Gauss linearUpwind grad(U);
|
||||||
|
div(phi,H2O) Gauss upwind;
|
||||||
|
div(phi,K) Gauss linear;
|
||||||
|
div(phi,h) Gauss limitedLinear 1;
|
||||||
|
div(phi,k) Gauss limitedLinear 1;
|
||||||
|
div(phi,omega) Gauss limitedLinear 1;
|
||||||
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
laplacianSchemes
|
||||||
|
{
|
||||||
|
default none;
|
||||||
|
laplacian((rho*nuEff),U) Gauss linear corrected;
|
||||||
|
laplacian((rho*DkEff),k) Gauss linear corrected;
|
||||||
|
laplacian((rho*DomegaEff),omega) Gauss linear corrected;
|
||||||
|
laplacian(rhorAUf,p_rgh) Gauss linear corrected;
|
||||||
|
laplacian(alphaEff,h) Gauss linear corrected;
|
||||||
|
laplacian(((rho*nut)+thermo:mu),H2O) Gauss linear corrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
interpolationSchemes
|
||||||
|
{
|
||||||
|
default linear;
|
||||||
|
directionalPressureGradient::Uf upwind phi;
|
||||||
|
}
|
||||||
|
|
||||||
|
snGradSchemes
|
||||||
|
{
|
||||||
|
default corrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
fluxRequired
|
||||||
|
{
|
||||||
|
default no;
|
||||||
|
p_rgh ;
|
||||||
|
}
|
||||||
|
|
||||||
|
wallDist
|
||||||
|
{
|
||||||
|
method meshWave;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,94 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object fvSolution;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
solvers
|
||||||
|
{
|
||||||
|
p_rgh
|
||||||
|
{
|
||||||
|
solver GAMG;
|
||||||
|
tolerance 1e-06;
|
||||||
|
relTol 0.05;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
nPreSweeps 0;
|
||||||
|
nPostSweeps 2;
|
||||||
|
nFinestSweeps 2;
|
||||||
|
cacheAgglomeration true;
|
||||||
|
nCellsInCoarsestLevel 10;
|
||||||
|
agglomerator faceAreaPair;
|
||||||
|
mergeLevels 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
p_rghFinal
|
||||||
|
{
|
||||||
|
$p_rgh;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
"rho.*"
|
||||||
|
{
|
||||||
|
$p_rgh;
|
||||||
|
tolerance 1e-05;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
"(U|h|R|k|epsilon|omega)"
|
||||||
|
{
|
||||||
|
solver smoothSolver;
|
||||||
|
smoother symGaussSeidel;
|
||||||
|
tolerance 1e-05;
|
||||||
|
relTol 0.01;
|
||||||
|
}
|
||||||
|
|
||||||
|
"(U|h|R|k|epsilon|omega)Final"
|
||||||
|
{
|
||||||
|
$U;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
$U;
|
||||||
|
}
|
||||||
|
|
||||||
|
H2OFinal
|
||||||
|
{
|
||||||
|
$U;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PIMPLE
|
||||||
|
{
|
||||||
|
momentumPredictor no;
|
||||||
|
nCorrectors 2;
|
||||||
|
nNonOrthogonalCorrectors 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
relaxationFactors
|
||||||
|
{
|
||||||
|
fields
|
||||||
|
{
|
||||||
|
}
|
||||||
|
equations
|
||||||
|
{
|
||||||
|
".*" 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object topoSetDict;
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
actions
|
||||||
|
(
|
||||||
|
// make the mesh a little more interesting...
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action new;
|
||||||
|
source boxToCell;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
box (-100 -100 -100) (100 0.1 0.25);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action add;
|
||||||
|
source boxToCell;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
box (-100 -100 0.45) (100 0.1 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action add;
|
||||||
|
source boxToCell;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
box (-100 0.05 0.33) (100 0.1 0.38);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action invert;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object topoSetDict;
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
actions
|
||||||
|
(
|
||||||
|
{
|
||||||
|
name f1;
|
||||||
|
type faceSet;
|
||||||
|
action new;
|
||||||
|
source boxToFace;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
box (-0.126 0.08665 0.2565) (0.02 0.090665 0.446);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name f1Zone;
|
||||||
|
type faceZoneSet;
|
||||||
|
action new;
|
||||||
|
source setAndNormalToFaceZone;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
faceSet f1;
|
||||||
|
normal (0 1 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name c1;
|
||||||
|
type cellZoneSet;
|
||||||
|
action new;
|
||||||
|
source faceToCell;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
set f1Zone;
|
||||||
|
option neighbour;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name c1Zone;
|
||||||
|
type cellZoneSet;
|
||||||
|
action new;
|
||||||
|
source setToCellZone;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
set c1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application chtMultiRegionFoam;
|
||||||
|
|
||||||
|
startFrom startTime;
|
||||||
|
|
||||||
|
startTime 0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 90;
|
||||||
|
|
||||||
|
deltaT 0.01;
|
||||||
|
|
||||||
|
writeControl adjustableRunTime;
|
||||||
|
|
||||||
|
writeInterval 2.5;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat binary;
|
||||||
|
|
||||||
|
writePrecision 10;
|
||||||
|
|
||||||
|
writeCompression off;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 6;
|
||||||
|
|
||||||
|
runTimeModifiable true;
|
||||||
|
|
||||||
|
adjustTimeStep yes;
|
||||||
|
|
||||||
|
maxCo 12;
|
||||||
|
|
||||||
|
maxDi 10;
|
||||||
|
|
||||||
|
maxDeltaT 1;
|
||||||
|
|
||||||
|
functions
|
||||||
|
{
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
type scalarTransport;
|
||||||
|
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
|
||||||
|
resetOnStartUp no;
|
||||||
|
|
||||||
|
region cabin;
|
||||||
|
|
||||||
|
|
||||||
|
// employ schemes used by U to the scalar transport equation
|
||||||
|
// note: field name is given by the name of the function, in this case
|
||||||
|
// 'scalar1'
|
||||||
|
autoSchemes no;
|
||||||
|
|
||||||
|
fvOptions
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileUpdate
|
||||||
|
{
|
||||||
|
type timeActivatedFileUpdate;
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
outputControl timeStep;
|
||||||
|
outputInterval 1;
|
||||||
|
region cabin;
|
||||||
|
fileToUpdate "$FOAM_CASE/system/controlDict";
|
||||||
|
|
||||||
|
timeVsFile
|
||||||
|
(
|
||||||
|
( 1 "$FOAM_CASE/system/controlDict.0" )
|
||||||
|
( 5 "$FOAM_CASE/system/controlDict.5")
|
||||||
|
( 20 "$FOAM_CASE/system/controlDict.20")
|
||||||
|
( 60 "$FOAM_CASE/system/controlDict.60")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application chtMultiRegionFoam;
|
||||||
|
|
||||||
|
startFrom startTime;
|
||||||
|
|
||||||
|
startTime 0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 90;
|
||||||
|
|
||||||
|
deltaT 0.01;
|
||||||
|
|
||||||
|
writeControl adjustableRunTime;
|
||||||
|
|
||||||
|
writeInterval 10;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat binary;
|
||||||
|
|
||||||
|
writePrecision 10;
|
||||||
|
|
||||||
|
writeCompression off;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 6;
|
||||||
|
|
||||||
|
runTimeModifiable true;
|
||||||
|
|
||||||
|
adjustTimeStep yes;
|
||||||
|
|
||||||
|
maxCo 2.5;
|
||||||
|
|
||||||
|
maxDi 10;
|
||||||
|
|
||||||
|
maxDeltaT 0.3;
|
||||||
|
|
||||||
|
functions
|
||||||
|
{
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
type scalarTransport;
|
||||||
|
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
|
||||||
|
resetOnStartUp no;
|
||||||
|
|
||||||
|
region cabin;
|
||||||
|
|
||||||
|
|
||||||
|
// employ schemes used by U to the scalar transport equation
|
||||||
|
// note: field name is given by the name of the function, in this case
|
||||||
|
// 'scalar1'
|
||||||
|
autoSchemes no;
|
||||||
|
|
||||||
|
fvOptions
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileUpdate
|
||||||
|
{
|
||||||
|
type timeActivatedFileUpdate;
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
outputControl timeStep;
|
||||||
|
outputInterval 1;
|
||||||
|
region cabin;
|
||||||
|
fileToUpdate "$FOAM_CASE/system/controlDict";
|
||||||
|
|
||||||
|
timeVsFile
|
||||||
|
(
|
||||||
|
( 1 "$FOAM_CASE/system/controlDict.0" )
|
||||||
|
( 5 "$FOAM_CASE/system/controlDict.5")
|
||||||
|
( 20 "$FOAM_CASE/system/controlDict.20")
|
||||||
|
( 60 "$FOAM_CASE/system/controlDict.60")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application chtMultiRegionFoam;
|
||||||
|
|
||||||
|
startFrom startTime;
|
||||||
|
|
||||||
|
startTime 0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 90;
|
||||||
|
|
||||||
|
deltaT 0.01;
|
||||||
|
|
||||||
|
writeControl adjustableRunTime;
|
||||||
|
|
||||||
|
writeInterval 10;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat binary;
|
||||||
|
|
||||||
|
writePrecision 10;
|
||||||
|
|
||||||
|
writeCompression off;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 6;
|
||||||
|
|
||||||
|
runTimeModifiable true;
|
||||||
|
|
||||||
|
adjustTimeStep yes;
|
||||||
|
|
||||||
|
maxCo 8;
|
||||||
|
|
||||||
|
maxDi 10;
|
||||||
|
|
||||||
|
maxDeltaT 1;
|
||||||
|
|
||||||
|
functions
|
||||||
|
{
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
type scalarTransport;
|
||||||
|
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
|
||||||
|
resetOnStartUp no;
|
||||||
|
|
||||||
|
region cabin;
|
||||||
|
|
||||||
|
|
||||||
|
// employ schemes used by U to the scalar transport equation
|
||||||
|
// note: field name is given by the name of the function, in this case
|
||||||
|
// 'scalar1'
|
||||||
|
autoSchemes no;
|
||||||
|
|
||||||
|
fvOptions
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileUpdate
|
||||||
|
{
|
||||||
|
type timeActivatedFileUpdate;
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
outputControl timeStep;
|
||||||
|
outputInterval 1;
|
||||||
|
region cabin;
|
||||||
|
fileToUpdate "$FOAM_CASE/system/controlDict";
|
||||||
|
|
||||||
|
timeVsFile
|
||||||
|
(
|
||||||
|
( 1 "$FOAM_CASE/system/controlDict.0" )
|
||||||
|
( 5 "$FOAM_CASE/system/controlDict.5")
|
||||||
|
( 20 "$FOAM_CASE/system/controlDict.20")
|
||||||
|
( 60 "$FOAM_CASE/system/controlDict.60")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application chtMultiRegionFoam;
|
||||||
|
|
||||||
|
startFrom startTime;
|
||||||
|
|
||||||
|
startTime 0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 90;
|
||||||
|
|
||||||
|
deltaT 0.01;
|
||||||
|
|
||||||
|
writeControl adjustableRunTime;
|
||||||
|
|
||||||
|
writeInterval 10;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat binary;
|
||||||
|
|
||||||
|
writePrecision 10;
|
||||||
|
|
||||||
|
writeCompression off;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 6;
|
||||||
|
|
||||||
|
runTimeModifiable true;
|
||||||
|
|
||||||
|
adjustTimeStep yes;
|
||||||
|
|
||||||
|
maxCo 5;
|
||||||
|
|
||||||
|
maxDi 10;
|
||||||
|
|
||||||
|
maxDeltaT 1;
|
||||||
|
|
||||||
|
functions
|
||||||
|
{
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
type scalarTransport;
|
||||||
|
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
|
||||||
|
resetOnStartUp no;
|
||||||
|
|
||||||
|
region cabin;
|
||||||
|
|
||||||
|
|
||||||
|
// employ schemes used by U to the scalar transport equation
|
||||||
|
// note: field name is given by the name of the function, in this case
|
||||||
|
// 'scalar1'
|
||||||
|
autoSchemes no;
|
||||||
|
|
||||||
|
fvOptions
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileUpdate
|
||||||
|
{
|
||||||
|
type timeActivatedFileUpdate;
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
outputControl timeStep;
|
||||||
|
outputInterval 1;
|
||||||
|
region cabin;
|
||||||
|
fileToUpdate "$FOAM_CASE/system/controlDict";
|
||||||
|
|
||||||
|
timeVsFile
|
||||||
|
(
|
||||||
|
( 1 "$FOAM_CASE/system/controlDict.0" )
|
||||||
|
( 5 "$FOAM_CASE/system/controlDict.5")
|
||||||
|
( 20 "$FOAM_CASE/system/controlDict.20")
|
||||||
|
( 60 "$FOAM_CASE/system/controlDict.60")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application chtMultiRegionFoam;
|
||||||
|
|
||||||
|
startFrom startTime;
|
||||||
|
|
||||||
|
startTime 0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 90;
|
||||||
|
|
||||||
|
deltaT 0.01;
|
||||||
|
|
||||||
|
writeControl adjustableRunTime;
|
||||||
|
|
||||||
|
writeInterval 2.5;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat binary;
|
||||||
|
|
||||||
|
writePrecision 10;
|
||||||
|
|
||||||
|
writeCompression off;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 6;
|
||||||
|
|
||||||
|
runTimeModifiable true;
|
||||||
|
|
||||||
|
adjustTimeStep yes;
|
||||||
|
|
||||||
|
maxCo 12;
|
||||||
|
|
||||||
|
maxDi 10;
|
||||||
|
|
||||||
|
maxDeltaT 1;
|
||||||
|
|
||||||
|
functions
|
||||||
|
{
|
||||||
|
H2O
|
||||||
|
{
|
||||||
|
type scalarTransport;
|
||||||
|
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
|
||||||
|
resetOnStartUp no;
|
||||||
|
|
||||||
|
region cabin;
|
||||||
|
|
||||||
|
|
||||||
|
// employ schemes used by U to the scalar transport equation
|
||||||
|
// note: field name is given by the name of the function, in this case
|
||||||
|
// 'scalar1'
|
||||||
|
autoSchemes no;
|
||||||
|
|
||||||
|
fvOptions
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileUpdate
|
||||||
|
{
|
||||||
|
type timeActivatedFileUpdate;
|
||||||
|
functionObjectLibs ("libutilityFunctionObjects.so");
|
||||||
|
outputControl timeStep;
|
||||||
|
outputInterval 1;
|
||||||
|
region cabin;
|
||||||
|
fileToUpdate "$FOAM_CASE/system/controlDict";
|
||||||
|
|
||||||
|
timeVsFile
|
||||||
|
(
|
||||||
|
( 1 "$FOAM_CASE/system/controlDict.0" )
|
||||||
|
( 5 "$FOAM_CASE/system/controlDict.5")
|
||||||
|
( 20 "$FOAM_CASE/system/controlDict.20")
|
||||||
|
( 60 "$FOAM_CASE/system/controlDict.60")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object fvSchemes;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
ddtSchemes
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
gradSchemes
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
divSchemes
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
laplacianSchemes
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
interpolationSchemes
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
snGradSchemes
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
fluxRequired
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object fvSolution;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
PIMPLE
|
||||||
|
{
|
||||||
|
nOuterCorrectors 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object topoSetDict;
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
actions
|
||||||
|
(
|
||||||
|
// make the mesh a little more interesting...
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action new;
|
||||||
|
source boxToCell;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
box (-100 -100 -100) (100 0.1 0.25);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action add;
|
||||||
|
source boxToCell;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
box (-100 -100 0.45) (100 0.1 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action add;
|
||||||
|
source boxToCell;
|
||||||
|
sourceInfo
|
||||||
|
{
|
||||||
|
box (-100 0.05 0.33) (100 0.1 0.38);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name c0;
|
||||||
|
type cellSet;
|
||||||
|
action invert;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object fvSchemes;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
ddtSchemes
|
||||||
|
{
|
||||||
|
default Euler;
|
||||||
|
}
|
||||||
|
|
||||||
|
gradSchemes
|
||||||
|
{
|
||||||
|
default Gauss linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
divSchemes
|
||||||
|
{
|
||||||
|
default none;
|
||||||
|
}
|
||||||
|
|
||||||
|
laplacianSchemes
|
||||||
|
{
|
||||||
|
default none;
|
||||||
|
laplacian(alpha,h) Gauss linear corrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
interpolationSchemes
|
||||||
|
{
|
||||||
|
default linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
snGradSchemes
|
||||||
|
{
|
||||||
|
default corrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
fluxRequired
|
||||||
|
{
|
||||||
|
default no;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object fvSolution;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
solvers
|
||||||
|
{
|
||||||
|
h
|
||||||
|
{
|
||||||
|
solver PCG;
|
||||||
|
preconditioner DIC;
|
||||||
|
tolerance 1e-06;
|
||||||
|
relTol 0.01;
|
||||||
|
}
|
||||||
|
|
||||||
|
hFinal
|
||||||
|
{
|
||||||
|
$h;
|
||||||
|
tolerance 1e-06;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PIMPLE
|
||||||
|
{
|
||||||
|
nNonOrthogonalCorrectors 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
relaxationFactors
|
||||||
|
{
|
||||||
|
fields
|
||||||
|
{
|
||||||
|
}
|
||||||
|
equations
|
||||||
|
{
|
||||||
|
".*" 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Reference in New Issue
Block a user