ENH: Adding lumpedMassWallTemperature BC and adding usage tutorial in buoyantPimpleFoam/hotRoom

This commit is contained in:
sergio
2016-10-27 15:06:42 -07:00
parent 2ba5a7c3bc
commit 19758c666f
5 changed files with 411 additions and 4 deletions

View File

@ -12,6 +12,7 @@ $(BCs)/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchSca
$(BCs)/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C $(BCs)/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C
$(BCs)/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C $(BCs)/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C
$(BCs)/fixedIncidentRadiation/fixedIncidentRadiationFvPatchScalarField.C $(BCs)/fixedIncidentRadiation/fixedIncidentRadiationFvPatchScalarField.C
$(BCs)/lumpedMassWallTemperature/lumpedMassWallTemperatureFvPatchScalarField.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

View File

@ -0,0 +1,210 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2016 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 "lumpedMassWallTemperatureFvPatchScalarField.H"
#include "addToRunTimeSelectionTable.H"
#include "fvPatchFieldMapper.H"
#include "volFields.H"
#include "mappedPatchBase.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::lumpedMassWallTemperatureFvPatchScalarField::
lumpedMassWallTemperatureFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF
)
:
mixedFvPatchScalarField(p, iF),
temperatureCoupledBase(patch(), "undefined", "undefined", "undefined-K"),
Cp_(0.0),
mass_(0.0),
curTimeIndex_(-1)
{
refValue() = 0.0;
refGrad() = 0.0;
valueFraction() = 1.0;
}
Foam::lumpedMassWallTemperatureFvPatchScalarField::
lumpedMassWallTemperatureFvPatchScalarField
(
const lumpedMassWallTemperatureFvPatchScalarField& ptf,
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
mixedFvPatchScalarField(ptf, p, iF, mapper),
temperatureCoupledBase(patch(), ptf),
Cp_(ptf.Cp_),
mass_(ptf.mass_),
curTimeIndex_(-1)
{}
Foam::lumpedMassWallTemperatureFvPatchScalarField::
lumpedMassWallTemperatureFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const dictionary& dict
)
:
mixedFvPatchScalarField(p, iF),
temperatureCoupledBase(patch(), dict),
Cp_(readScalar(dict.lookup("Cp"))),
mass_(readScalar(dict.lookup("mass"))),
curTimeIndex_(-1)
{
refGrad() = 0.0;
valueFraction() = 1.0;
refValue() = scalarField("value", dict, p.size());
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
}
Foam::lumpedMassWallTemperatureFvPatchScalarField::
lumpedMassWallTemperatureFvPatchScalarField
(
const lumpedMassWallTemperatureFvPatchScalarField& tppsf
)
:
mixedFvPatchScalarField(tppsf),
temperatureCoupledBase(tppsf),
Cp_(tppsf.Cp_),
mass_(tppsf.mass_),
curTimeIndex_(-1)
{}
Foam::lumpedMassWallTemperatureFvPatchScalarField::
lumpedMassWallTemperatureFvPatchScalarField
(
const lumpedMassWallTemperatureFvPatchScalarField& tppsf,
const DimensionedField<scalar, volMesh>& iF
)
:
mixedFvPatchScalarField(tppsf, iF),
temperatureCoupledBase(patch(), tppsf),
Cp_(tppsf.Cp_),
mass_(tppsf.mass_),
curTimeIndex_(-1)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::lumpedMassWallTemperatureFvPatchScalarField::updateCoeffs()
{
if (updated() || (curTimeIndex_ == this->db().time().timeIndex()))
{
return;
}
// Calculate heat flux in or out the wall
scalarField& Tp(*this);
const scalarField& magSf = patch().magSf();
const scalar deltaT(db().time().deltaTValue());
tmp<scalarField> tkappa(kappa(Tp));
const scalarField q(tkappa.ref()*snGrad());
// Total heat in or out of the wall
const scalar Q = gSum(q*magSf);
Tp += -(Q/mass_/Cp_)*deltaT;
refGrad() = 0.0;
refValue() = Tp;
valueFraction() = 1.0;
mixedFvPatchScalarField::updateCoeffs();
if (debug)
{
scalar qin(0);
scalar qout(0);
forAll(q, facei)
{
if (q[facei] > 0.0) //out the wall
{
qout += q[facei]*magSf[facei];
}
else if (q[facei] < 0.0) //into the wall
{
qin += q[facei]*magSf[facei];
}
}
Info<< patch().boundaryMesh().mesh().name() << ':'
<< patch().name() << ':'
<< this->internalField().name() << " :"
<< " heat transfer rate:" << Q
<< " wall temperature "
<< " min:" << gMin(*this)
<< " max:" << gMax(*this)
<< " avg:" << gAverage(*this)
<< " Qin [W]:" << qin
<< " Qout [W]:" << qout
<< endl;
}
curTimeIndex_ = this->db().time().timeIndex();
}
void Foam::lumpedMassWallTemperatureFvPatchScalarField::write
(
Ostream& os
) const
{
mixedFvPatchScalarField::write(os);
temperatureCoupledBase::write(os);
os.writeKeyword("Cp")<< Cp_ << token::END_STATEMENT << nl;
os.writeKeyword("mass")<< mass_
<< token::END_STATEMENT << nl;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
lumpedMassWallTemperatureFvPatchScalarField
);
}
// ************************************************************************* //

View File

@ -0,0 +1,188 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2016 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::lumpedMassWallTemperatureFvPatchScalarField
Group
grpThermoBoundaryConditions grpWallBoundaryConditions
Description
Employs a lumped mass model for temperature.
It considers a single temperature value for the whole patch and evaluates
the temperature evolution using the net heat flux into the patch.
Usage
\table
Property | Description | Required | Default value
kappa | thermal conductivity option | yes |
Cp | Heat capacity [J/Kg K]] | yes |
mass | Total mass [Kg] | yes |
\endtable
Example of the boundary condition specification:
\verbatim
myPatch
{
type lumpedMassWallTemperature;
kappaMethod fluidThermo;
kappaName none;
mass 1000;
Cp 4100;
value uniform 300.0;
}
\endverbatim
SourceFiles
lumpedMassWallTemperatureFvPatchScalarField.C
\*---------------------------------------------------------------------------*/
#ifndef lumpedMassWallTemperatureFvPatchScalarField_H
#define lumpedMassWallTemperatureFvPatchScalarField_H
#include "mixedFvPatchFields.H"
#include "temperatureCoupledBase.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class lumpedMassWallTemperatureFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/
class lumpedMassWallTemperatureFvPatchScalarField
:
public mixedFvPatchScalarField,
public temperatureCoupledBase
{
private:
// Private data
//- Specifc heat capacity [J/kg/K]
scalar Cp_;
//- Mass / [kg]
scalar mass_;
//- Current time index (used for updating)
label curTimeIndex_;
public:
//- Runtime type information
TypeName("lumpedMassWallTemperature");
// Constructors
//- Construct from patch and internal field
lumpedMassWallTemperatureFvPatchScalarField
(
const fvPatch&,
const DimensionedField<scalar, volMesh>&
);
//- Construct from patch, internal field and dictionary
lumpedMassWallTemperatureFvPatchScalarField
(
const fvPatch&,
const DimensionedField<scalar, volMesh>&,
const dictionary&
);
//- Construct by mapping given
// lumpedMassWallTemperatureFvPatchScalarField
// onto a new patch
lumpedMassWallTemperatureFvPatchScalarField
(
const lumpedMassWallTemperatureFvPatchScalarField&,
const fvPatch&,
const DimensionedField<scalar, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct as copy
lumpedMassWallTemperatureFvPatchScalarField
(
const lumpedMassWallTemperatureFvPatchScalarField&
);
//- Construct and return a clone
virtual tmp<fvPatchScalarField> clone() const
{
return tmp<fvPatchScalarField>
(
new lumpedMassWallTemperatureFvPatchScalarField(*this)
);
}
//- Construct as copy setting internal field reference
lumpedMassWallTemperatureFvPatchScalarField
(
const lumpedMassWallTemperatureFvPatchScalarField&,
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 lumpedMassWallTemperatureFvPatchScalarField(*this, iF)
);
}
// Member functions
// Evaluation functions
//- Update the coefficients associated with the patch field
virtual void updateCoeffs();
// I-O
//- Write
void write(Ostream&) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -28,8 +28,12 @@ boundaryField
ceiling ceiling
{ {
type fixedValue; type lumpedMassWallTemperature;
value uniform 300; kappaMethod fluidThermo;
kappaName none;
mass 1000;
Cp 4100;
value uniform 300.0;
} }
fixedWalls fixedWalls

View File

@ -28,8 +28,12 @@ boundaryField
ceiling ceiling
{ {
type fixedValue; type lumpedMassWallTemperature;
value uniform 300; kappaMethod fluidThermo;
kappaName none;
mass 1000;
Cp 4100;
value uniform 300.0;
} }
fixedWalls fixedWalls