Commit 64690f39 authored by Henry Weller's avatar Henry Weller
Browse files

fixedMultiPhaseHeatFlux: Calculates a wall temperature that produces the...

fixedMultiPhaseHeatFlux: Calculates a wall temperature that produces the specified overall wall heat flux
across all the phases in an Eulerian multi-phase simulation.

Intended to be used with copiedFixedValue to ensure that phase wall
temperature are consistent:
    - Set 'fixedMultiPhaseHeatFlux' boundary for one of the phases
    - Use 'copiedFixedValue' for all the other phases.

Based on code provided by Juho Peltola
parent f147cba2
......@@ -36,5 +36,7 @@ kineticTheoryModels/derivedFvPatchFields/JohnsonJacksonParticleTheta/JohnsonJack
kineticTheoryModels/derivedFvPatchFields/JohnsonJacksonParticleSlip/JohnsonJacksonParticleSlipFvPatchVectorField.C
derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C
derivedFvPatchFields/copiedFixedValue/copiedFixedValueFvPatchScalarField.C
derivedFvPatchFields/fixedMultiPhaseHeatFlux/fixedMultiPhaseHeatFluxFvPatchScalarField.C
LIB = $(FOAM_LIBBIN)/libtwoPhaseReactingTurbulenceModels
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "copiedFixedValueFvPatchScalarField.H"
#include "fvPatchFieldMapper.H"
#include "volFields.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::copiedFixedValueFvPatchScalarField::copiedFixedValueFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF
)
:
fixedValueFvPatchScalarField(p, iF),
sourceFieldName_("default")
{}
Foam::copiedFixedValueFvPatchScalarField::copiedFixedValueFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const dictionary& dict
)
:
fixedValueFvPatchScalarField(p, iF, dict),
sourceFieldName_(dict.lookup("sourceFieldName"))
{}
Foam::copiedFixedValueFvPatchScalarField::copiedFixedValueFvPatchScalarField
(
const copiedFixedValueFvPatchScalarField& ptf,
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
sourceFieldName_(ptf.sourceFieldName_)
{}
Foam::copiedFixedValueFvPatchScalarField::copiedFixedValueFvPatchScalarField
(
const copiedFixedValueFvPatchScalarField& awfpsf
)
:
fixedValueFvPatchScalarField(awfpsf),
sourceFieldName_(awfpsf.sourceFieldName_)
{}
Foam::copiedFixedValueFvPatchScalarField::copiedFixedValueFvPatchScalarField
(
const copiedFixedValueFvPatchScalarField& awfpsf,
const DimensionedField<scalar, volMesh>& iF
)
:
fixedValueFvPatchScalarField(awfpsf, iF),
sourceFieldName_(awfpsf.sourceFieldName_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::copiedFixedValueFvPatchScalarField::updateCoeffs()
{
if (this->updated())
{
return;
}
operator==
(
patch().lookupPatchField<volScalarField, scalar>(sourceFieldName_)
);
fixedValueFvPatchScalarField::updateCoeffs();
}
void Foam::copiedFixedValueFvPatchScalarField::write(Ostream& os) const
{
fvPatchField<scalar>::write(os);
os.writeKeyword("sourceFieldName")
<< sourceFieldName_ << token::END_STATEMENT << nl;
writeEntry("value", os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
copiedFixedValueFvPatchScalarField
);
}
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::copiedFixedValueFvPatchScalarField
Group
grpCmpWallFunctions
Description
Copies the boundary values from a user specified field.
SeeAlso
Foam::fixedValueFvPatchField
SourceFiles
copiedFixedValueFvPatchScalarField.C
\*---------------------------------------------------------------------------*/
#ifndef copiedFixedValueFvPatchScalarField_H
#define copiedFixedValueFvPatchScalarField_H
#include "fixedValueFvPatchFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class copiedFixedValueFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/
class copiedFixedValueFvPatchScalarField
:
public fixedValueFvPatchScalarField
{
protected:
// Protected data
word sourceFieldName_;
public:
//- Runtime type information
TypeName("copiedFixedValue");
// Constructors
//- Construct from patch and internal field
copiedFixedValueFvPatchScalarField
(
const fvPatch&,
const DimensionedField<scalar, volMesh>&
);
//- Construct from patch, internal field and dictionary
copiedFixedValueFvPatchScalarField
(
const fvPatch&,
const DimensionedField<scalar, volMesh>&,
const dictionary&
);
//- Construct by mapping given
// copiedFixedValueFvPatchScalarField
// onto a new patch
copiedFixedValueFvPatchScalarField
(
const copiedFixedValueFvPatchScalarField&,
const fvPatch&,
const DimensionedField<scalar, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct as copy
copiedFixedValueFvPatchScalarField
(
const copiedFixedValueFvPatchScalarField&
);
//- Construct as copy setting internal field reference
copiedFixedValueFvPatchScalarField
(
const copiedFixedValueFvPatchScalarField&,
const DimensionedField<scalar, volMesh>&
);
// Member functions
// Evaluation functions
//- Update the coefficients associated with the patch field
virtual void updateCoeffs();
// I-O
//- Write
virtual void write(Ostream&) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "fixedMultiPhaseHeatFluxFvPatchScalarField.H"
#include "fvPatchFieldMapper.H"
#include "volFields.H"
#include "twoPhaseSystem.H"
#include "ThermalPhaseChangePhaseSystem.H"
#include "MomentumTransferPhaseSystem.H"
#include "compressibleTurbulenceModel.H"
#include "ThermalDiffusivity.H"
#include "PhaseCompressibleTurbulenceModel.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::fixedMultiPhaseHeatFluxFvPatchScalarField::
fixedMultiPhaseHeatFluxFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF
)
:
fixedValueFvPatchScalarField(p, iF),
q_(p.size(), 0.0)
{}
Foam::fixedMultiPhaseHeatFluxFvPatchScalarField::
fixedMultiPhaseHeatFluxFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const dictionary& dict
)
:
fixedValueFvPatchScalarField(p, iF, dict),
q_("q", dict, p.size())
{}
Foam::fixedMultiPhaseHeatFluxFvPatchScalarField::
fixedMultiPhaseHeatFluxFvPatchScalarField
(
const fixedMultiPhaseHeatFluxFvPatchScalarField& ptf,
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
q_(ptf.q_, mapper)
{}
Foam::fixedMultiPhaseHeatFluxFvPatchScalarField::
fixedMultiPhaseHeatFluxFvPatchScalarField
(
const fixedMultiPhaseHeatFluxFvPatchScalarField& awfpsf
)
:
fixedValueFvPatchScalarField(awfpsf),
q_(awfpsf.q_)
{}
Foam::fixedMultiPhaseHeatFluxFvPatchScalarField::
fixedMultiPhaseHeatFluxFvPatchScalarField
(
const fixedMultiPhaseHeatFluxFvPatchScalarField& awfpsf,
const DimensionedField<scalar, volMesh>& iF
)
:
fixedValueFvPatchScalarField(awfpsf, iF),
q_(awfpsf.q_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::fixedMultiPhaseHeatFluxFvPatchScalarField::updateCoeffs()
{
if (updated())
{
return;
}
// Lookup the fluid model
const ThermalPhaseChangePhaseSystem
<
MomentumTransferPhaseSystem<twoPhaseSystem>
>& fluid =
refCast
<
const ThermalPhaseChangePhaseSystem
<
MomentumTransferPhaseSystem<twoPhaseSystem>
>
>
(
db().lookupObject<phaseSystem>("phaseProperties")
);
const scalarField& Tp = *this;
scalarField A(Tp.size(), scalar(0));
scalarField B(Tp.size(), scalar(0));
scalarField Q(Tp.size(), scalar(0));
forAll(fluid.phases(), phasei)
{
const phaseModel& phase = fluid.phases()[phasei];
const fluidThermo& thermo = phase.thermo();
const fvPatchScalarField& alpha =
phase.boundaryField()[patch().index()];
const fvPatchScalarField& T =
thermo.T().boundaryField()[patch().index()];
const scalarField kappaEff
(
thermo.kappaEff(phase.turbulence().alphat(), patch().index())
);
if (debug)
{
scalarField q0(T.snGrad()*alpha*kappaEff);
Q += q0;
Info<< patch().name() << " " << phase.name()
<< ": Heat flux " << gMin(q0) << " - " << gMax(q0) << endl;
}
A += T.patchInternalField()*alpha*kappaEff*patch().deltaCoeffs();
B += alpha*kappaEff*patch().deltaCoeffs();
}
if (debug)
{
Info<< patch().name() << " " << ": overall heat flux "
<< gMin(Q) << " - " << gMax(Q) << endl;
}
scalar relax(1);
operator==((1 - relax)*Tp + relax*(q_ + A)/(B));
fixedValueFvPatchScalarField::updateCoeffs();
}
void Foam::fixedMultiPhaseHeatFluxFvPatchScalarField::write(Ostream& os) const
{
fvPatchField<scalar>::write(os);
q_.writeEntry("q", os);
writeEntry("value", os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
fixedMultiPhaseHeatFluxFvPatchScalarField
);
}
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::fixedMultiPhaseHeatFluxFvPatchScalarField
Group
grpCmpWallFunctions
Description
Calculates a wall temperature that produces the specified overall wall heat
flux across all the phases in an Eulerian multi-phase simulation.
Intended to be used with copiedFixedValue to ensure that phase wall
temperature are consistent:
- Set 'fixedMultiPhaseHeatFlux' boundary for one of the phases
- Use 'copiedFixedValue' for all the other phases.
SeeAlso
Foam::fixedValueFvPatchField
SourceFiles
fixedMultiPhaseHeatFluxFvPatchScalarField.C
\*---------------------------------------------------------------------------*/
#ifndef fixedMultiPhaseHeatFluxFvPatchScalarField_H
#define fixedMultiPhaseHeatFluxFvPatchScalarField_H