mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'feature-turbulentTemperature_Function1' into 'develop'
ENH: coupling BC: allow Function1. Fixes #2277. See merge request Development/openfoam!507
This commit is contained in:
@ -261,6 +261,7 @@ void Foam::externalWallHeatFluxTemperatureFvPatchScalarField::autoMap
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
mixedFvPatchScalarField::autoMap(mapper);
|
mixedFvPatchScalarField::autoMap(mapper);
|
||||||
|
temperatureCoupledBase::autoMap(mapper);
|
||||||
|
|
||||||
if (q_)
|
if (q_)
|
||||||
{
|
{
|
||||||
@ -289,6 +290,9 @@ void Foam::externalWallHeatFluxTemperatureFvPatchScalarField::rmap
|
|||||||
const auto& rhs =
|
const auto& rhs =
|
||||||
refCast<const externalWallHeatFluxTemperatureFvPatchScalarField>(ptf);
|
refCast<const externalWallHeatFluxTemperatureFvPatchScalarField>(ptf);
|
||||||
|
|
||||||
|
temperatureCoupledBase::rmap(rhs, addr);
|
||||||
|
|
||||||
|
|
||||||
if (q_)
|
if (q_)
|
||||||
{
|
{
|
||||||
q_->rmap(rhs.q_(), addr);
|
q_->rmap(rhs.q_(), addr);
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2019 OpenCFD Ltd.
|
Copyright (C) 2016-2019,2021 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -131,6 +131,7 @@ void Foam::radiation::fixedIncidentRadiationFvPatchScalarField::autoMap
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedGradientFvPatchScalarField::autoMap(m);
|
fixedGradientFvPatchScalarField::autoMap(m);
|
||||||
|
temperatureCoupledBase::autoMap(m);
|
||||||
qrIncident_.autoMap(m);
|
qrIncident_.autoMap(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,6 +150,7 @@ void Foam::radiation::fixedIncidentRadiationFvPatchScalarField::rmap
|
|||||||
psf
|
psf
|
||||||
);
|
);
|
||||||
|
|
||||||
|
temperatureCoupledBase::rmap(thftpsf, addr);
|
||||||
qrIncident_.rmap(thftpsf.qrIncident_, addr);
|
qrIncident_.rmap(thftpsf.qrIncident_, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -129,6 +129,34 @@ lumpedMassWallTemperatureFvPatchScalarField
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::lumpedMassWallTemperatureFvPatchScalarField::autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::autoMap(mapper);
|
||||||
|
temperatureCoupledBase::autoMap(mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::lumpedMassWallTemperatureFvPatchScalarField::rmap
|
||||||
|
(
|
||||||
|
const fvPatchField<scalar>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::rmap(ptf, addr);
|
||||||
|
|
||||||
|
const lumpedMassWallTemperatureFvPatchScalarField& tiptf =
|
||||||
|
refCast
|
||||||
|
<
|
||||||
|
const lumpedMassWallTemperatureFvPatchScalarField
|
||||||
|
>(ptf);
|
||||||
|
|
||||||
|
temperatureCoupledBase::rmap(tiptf, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::lumpedMassWallTemperatureFvPatchScalarField::updateCoeffs()
|
void Foam::lumpedMassWallTemperatureFvPatchScalarField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (updated() || (curTimeIndex_ == this->db().time().timeIndex()))
|
if (updated() || (curTimeIndex_ == this->db().time().timeIndex()))
|
||||||
|
|||||||
@ -166,6 +166,22 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// 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 fvPatchField<scalar>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Evaluation functions
|
// Evaluation functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2017-2020 OpenCFD Ltd.
|
Copyright (C) 2017-2021 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -43,7 +43,8 @@ Foam::temperatureCoupledBase::KMethodTypeNames_
|
|||||||
{ KMethodType::mtFluidThermo, "fluidThermo" },
|
{ KMethodType::mtFluidThermo, "fluidThermo" },
|
||||||
{ KMethodType::mtSolidThermo, "solidThermo" },
|
{ KMethodType::mtSolidThermo, "solidThermo" },
|
||||||
{ KMethodType::mtDirectionalSolidThermo, "directionalSolidThermo" },
|
{ KMethodType::mtDirectionalSolidThermo, "directionalSolidThermo" },
|
||||||
{ KMethodType::mtLookup, "lookup" }
|
{ KMethodType::mtLookup, "lookup" },
|
||||||
|
{ KMethodType::mtFunction, "function" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -74,9 +75,9 @@ Foam::temperatureCoupledBase::temperatureCoupledBase
|
|||||||
:
|
:
|
||||||
patch_(patch),
|
patch_(patch),
|
||||||
method_(KMethodTypeNames_.get("kappaMethod", dict)),
|
method_(KMethodTypeNames_.get("kappaMethod", dict)),
|
||||||
kappaName_(dict.getOrDefault<word>("kappa", "none")),
|
kappaName_(dict.getOrDefault<word>("kappa", word::null)),
|
||||||
alphaAniName_(dict.getOrDefault<word>("alphaAni", "none")),
|
alphaAniName_(dict.getOrDefault<word>("alphaAni", word::null)),
|
||||||
alphaName_(dict.getOrDefault<word>("alpha", "none"))
|
alphaName_(dict.getOrDefault<word>("alpha", word::null))
|
||||||
{
|
{
|
||||||
switch (method_)
|
switch (method_)
|
||||||
{
|
{
|
||||||
@ -110,6 +111,22 @@ Foam::temperatureCoupledBase::temperatureCoupledBase
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case mtFunction:
|
||||||
|
{
|
||||||
|
kappaFunction1_ = PatchFunction1<scalar>::New
|
||||||
|
(
|
||||||
|
patch.patch(),
|
||||||
|
"kappaValue",
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
alphaFunction1_ = PatchFunction1<scalar>::New
|
||||||
|
(
|
||||||
|
patch.patch(),
|
||||||
|
"alphaValue",
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@ -118,6 +135,21 @@ Foam::temperatureCoupledBase::temperatureCoupledBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::temperatureCoupledBase::temperatureCoupledBase
|
||||||
|
(
|
||||||
|
const temperatureCoupledBase& base
|
||||||
|
)
|
||||||
|
:
|
||||||
|
patch_(base.patch_),
|
||||||
|
method_(base.method_),
|
||||||
|
kappaName_(base.kappaName_),
|
||||||
|
alphaAniName_(base.alphaAniName_),
|
||||||
|
alphaName_(base.alphaName_),
|
||||||
|
kappaFunction1_(base.kappaFunction1_.clone(patch_.patch())),
|
||||||
|
alphaFunction1_(base.alphaFunction1_.clone(patch_.patch()))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
Foam::temperatureCoupledBase::temperatureCoupledBase
|
Foam::temperatureCoupledBase::temperatureCoupledBase
|
||||||
(
|
(
|
||||||
const fvPatch& patch,
|
const fvPatch& patch,
|
||||||
@ -128,12 +160,47 @@ Foam::temperatureCoupledBase::temperatureCoupledBase
|
|||||||
method_(base.method_),
|
method_(base.method_),
|
||||||
kappaName_(base.kappaName_),
|
kappaName_(base.kappaName_),
|
||||||
alphaAniName_(base.alphaAniName_),
|
alphaAniName_(base.alphaAniName_),
|
||||||
alphaName_(base.alphaName_)
|
alphaName_(base.alphaName_),
|
||||||
|
kappaFunction1_(base.kappaFunction1_.clone(patch_.patch())),
|
||||||
|
alphaFunction1_(base.alphaFunction1_.clone(patch_.patch()))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::temperatureCoupledBase::autoMap
|
||||||
|
(
|
||||||
|
const FieldMapper& mapper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (kappaFunction1_)
|
||||||
|
{
|
||||||
|
kappaFunction1_().autoMap(mapper);
|
||||||
|
}
|
||||||
|
if (alphaFunction1_)
|
||||||
|
{
|
||||||
|
alphaFunction1_().autoMap(mapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::temperatureCoupledBase::rmap
|
||||||
|
(
|
||||||
|
const temperatureCoupledBase& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (kappaFunction1_)
|
||||||
|
{
|
||||||
|
kappaFunction1_().rmap(ptf.kappaFunction1_(), addr);
|
||||||
|
}
|
||||||
|
if (alphaFunction1_)
|
||||||
|
{
|
||||||
|
alphaFunction1_().rmap(ptf.alphaFunction1_(), addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa
|
Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa
|
||||||
(
|
(
|
||||||
const scalarField& Tp
|
const scalarField& Tp
|
||||||
@ -262,6 +329,13 @@ Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case KMethodType::mtFunction:
|
||||||
|
{
|
||||||
|
const auto& tm = patch_.patch().boundaryMesh().mesh().time();
|
||||||
|
return kappaFunction1_->value(tm.timeOutputValue());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
@ -405,6 +479,13 @@ Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::alpha
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case KMethodType::mtFunction:
|
||||||
|
{
|
||||||
|
const auto& tm = patch_.patch().boundaryMesh().mesh().time();
|
||||||
|
return alphaFunction1_->value(tm.timeOutputValue());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
@ -426,9 +507,26 @@ Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::alpha
|
|||||||
void Foam::temperatureCoupledBase::write(Ostream& os) const
|
void Foam::temperatureCoupledBase::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
os.writeEntry("kappaMethod", KMethodTypeNames_[method_]);
|
os.writeEntry("kappaMethod", KMethodTypeNames_[method_]);
|
||||||
os.writeEntry("kappa", kappaName_);
|
if (!kappaName_.empty())
|
||||||
os.writeEntry("alphaAni", alphaAniName_);
|
{
|
||||||
os.writeEntry("alpha", alphaName_);
|
os.writeEntry("kappa", kappaName_);
|
||||||
|
}
|
||||||
|
if (!alphaAniName_.empty())
|
||||||
|
{
|
||||||
|
os.writeEntry("alphaAni", alphaAniName_);
|
||||||
|
}
|
||||||
|
if (!alphaName_.empty())
|
||||||
|
{
|
||||||
|
os.writeEntry("alpha", alphaName_);
|
||||||
|
}
|
||||||
|
if (kappaFunction1_)
|
||||||
|
{
|
||||||
|
kappaFunction1_->writeData(os);
|
||||||
|
}
|
||||||
|
if (alphaFunction1_)
|
||||||
|
{
|
||||||
|
alphaFunction1_->writeData(os);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019,2021 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -39,15 +39,18 @@ Description
|
|||||||
- 'directionalSolidThermo': uses look up for volSymmTensorField for
|
- 'directionalSolidThermo': uses look up for volSymmTensorField for
|
||||||
transformed kappa vector. Field name definable in 'alphaAni',
|
transformed kappa vector. Field name definable in 'alphaAni',
|
||||||
named 'Anialpha' in solid solver by default
|
named 'Anialpha' in solid solver by default
|
||||||
|
- 'function' : kappa, alpha directly specified as Function1
|
||||||
- 'phaseSystem' : used for multiphase thermos
|
- 'phaseSystem' : used for multiphase thermos
|
||||||
|
|
||||||
\par Keywords provided by this class:
|
\par Keywords provided by this class:
|
||||||
\table
|
\table
|
||||||
Property | Description | Required | Default
|
Property | Description | Required | Default
|
||||||
kappaMethod | Thermal conductivity method | yes |
|
kappaMethod | Thermal conductivity method | yes |
|
||||||
kappa | Name of thermal conductivity field | no | none
|
kappa | Name of thermal conductivity field | no |
|
||||||
alpha | Name of thermal diffusivity field | no | none
|
alpha | Name of thermal diffusivity field | no |
|
||||||
alphaAni | Name of non-isotropic alpha | no | none
|
alphaAni | Name of non-isotropic alpha | no |
|
||||||
|
kappaValue | Function1 supplying kappa | no |
|
||||||
|
alphaValue | Function1 supplying alpha | no |
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
@ -56,12 +59,22 @@ Usage
|
|||||||
{
|
{
|
||||||
...
|
...
|
||||||
kappaMethod directionalSolidThermo;
|
kappaMethod directionalSolidThermo;
|
||||||
kappa none;
|
|
||||||
alphaAni Anialpha;
|
alphaAni Anialpha;
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
|
\verbatim
|
||||||
|
specifiedWall
|
||||||
|
{
|
||||||
|
...
|
||||||
|
kappaMethod function;
|
||||||
|
kappaFunction constant 1.0;
|
||||||
|
alphaFunction constant 100.0;
|
||||||
|
...
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
temperatureCoupledBase.C
|
temperatureCoupledBase.C
|
||||||
|
|
||||||
@ -73,6 +86,7 @@ SourceFiles
|
|||||||
#include "scalarField.H"
|
#include "scalarField.H"
|
||||||
#include "Enum.H"
|
#include "Enum.H"
|
||||||
#include "fvPatch.H"
|
#include "fvPatch.H"
|
||||||
|
#include "PatchFunction1.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -95,7 +109,8 @@ public:
|
|||||||
mtFluidThermo,
|
mtFluidThermo,
|
||||||
mtSolidThermo,
|
mtSolidThermo,
|
||||||
mtDirectionalSolidThermo,
|
mtDirectionalSolidThermo,
|
||||||
mtLookup
|
mtLookup,
|
||||||
|
mtFunction
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -120,6 +135,12 @@ protected:
|
|||||||
//- Name of thermal diffusivity
|
//- Name of thermal diffusivity
|
||||||
const word alphaName_;
|
const word alphaName_;
|
||||||
|
|
||||||
|
//- Function1 for kappa
|
||||||
|
autoPtr<PatchFunction1<scalar>> kappaFunction1_;
|
||||||
|
|
||||||
|
//- Function1 for alpha
|
||||||
|
autoPtr<PatchFunction1<scalar>> alphaFunction1_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -149,6 +170,12 @@ public:
|
|||||||
const temperatureCoupledBase& base
|
const temperatureCoupledBase& base
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
temperatureCoupledBase
|
||||||
|
(
|
||||||
|
const temperatureCoupledBase&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~temperatureCoupledBase() = default;
|
virtual ~temperatureCoupledBase() = default;
|
||||||
@ -174,6 +201,19 @@ public:
|
|||||||
return alphaName_;
|
return alphaName_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const FieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given fvPatchField onto this fvPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const temperatureCoupledBase&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
//- Given patch temperature calculate corresponding K field
|
//- Given patch temperature calculate corresponding K field
|
||||||
virtual tmp<scalarField> kappa(const scalarField& Tp) const;
|
virtual tmp<scalarField> kappa(const scalarField& Tp) const;
|
||||||
|
|
||||||
|
|||||||
@ -62,9 +62,7 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
mappedPatchFieldBase<scalar>::mapper(p, iF),
|
mappedPatchFieldBase<scalar>::mapper(p, iF),
|
||||||
*this
|
*this
|
||||||
),
|
),
|
||||||
TnbrName_("undefined-Tnbr"),
|
TnbrName_("undefined-Tnbr")
|
||||||
thicknessLayers_(0),
|
|
||||||
kappaLayers_(0)
|
|
||||||
{
|
{
|
||||||
this->refValue() = 0.0;
|
this->refValue() = 0.0;
|
||||||
this->refGrad() = 0.0;
|
this->refGrad() = 0.0;
|
||||||
@ -91,7 +89,9 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
),
|
),
|
||||||
TnbrName_(ptf.TnbrName_),
|
TnbrName_(ptf.TnbrName_),
|
||||||
thicknessLayers_(ptf.thicknessLayers_),
|
thicknessLayers_(ptf.thicknessLayers_),
|
||||||
kappaLayers_(ptf.kappaLayers_)
|
thicknessLayer_(ptf.thicknessLayer_.clone(p.patch())),
|
||||||
|
kappaLayers_(ptf.kappaLayers_),
|
||||||
|
kappaLayer_(ptf.kappaLayer_.clone(p.patch()))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -111,9 +111,7 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
*this,
|
*this,
|
||||||
dict
|
dict
|
||||||
),
|
),
|
||||||
TnbrName_(dict.get<word>("Tnbr")),
|
TnbrName_(dict.get<word>("Tnbr"))
|
||||||
thicknessLayers_(0),
|
|
||||||
kappaLayers_(0)
|
|
||||||
{
|
{
|
||||||
if (!isA<mappedPatchBase>(this->patch().patch()))
|
if (!isA<mappedPatchBase>(this->patch().patch()))
|
||||||
{
|
{
|
||||||
@ -132,10 +130,25 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
<< "the assemble coupled option for energy. "
|
<< "the assemble coupled option for energy. "
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
|
// Read list of layers
|
||||||
if (dict.readIfPresent("thicknessLayers", thicknessLayers_))
|
if (dict.readIfPresent("thicknessLayers", thicknessLayers_))
|
||||||
{
|
{
|
||||||
dict.readEntry("kappaLayers", kappaLayers_);
|
dict.readEntry("kappaLayers", kappaLayers_);
|
||||||
}
|
}
|
||||||
|
// Read single additional PatchFunction1
|
||||||
|
thicknessLayer_ = PatchFunction1<scalar>::NewIfPresent
|
||||||
|
(
|
||||||
|
p.patch(),
|
||||||
|
"thicknessLayer",
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
kappaLayer_ = PatchFunction1<scalar>::NewIfPresent
|
||||||
|
(
|
||||||
|
p.patch(),
|
||||||
|
"kappaLayer",
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
|
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
|
|
||||||
@ -187,7 +200,9 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
),
|
),
|
||||||
TnbrName_(wtcsf.TnbrName_),
|
TnbrName_(wtcsf.TnbrName_),
|
||||||
thicknessLayers_(wtcsf.thicknessLayers_),
|
thicknessLayers_(wtcsf.thicknessLayers_),
|
||||||
kappaLayers_(wtcsf.kappaLayers_)
|
thicknessLayer_(wtcsf.thicknessLayer_.clone(patch().patch())),
|
||||||
|
kappaLayers_(wtcsf.kappaLayers_),
|
||||||
|
kappaLayer_(wtcsf.kappaLayer_.clone(patch().patch()))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -207,12 +222,96 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
),
|
),
|
||||||
TnbrName_(wtcsf.TnbrName_),
|
TnbrName_(wtcsf.TnbrName_),
|
||||||
thicknessLayers_(wtcsf.thicknessLayers_),
|
thicknessLayers_(wtcsf.thicknessLayers_),
|
||||||
kappaLayers_(wtcsf.kappaLayers_)
|
thicknessLayer_(wtcsf.thicknessLayer_.clone(patch().patch())),
|
||||||
|
kappaLayers_(wtcsf.kappaLayers_),
|
||||||
|
kappaLayer_(wtcsf.kappaLayer_.clone(patch().patch()))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::autoMap(mapper);
|
||||||
|
temperatureCoupledBase::autoMap(mapper);
|
||||||
|
//mappedPatchFieldBase<scalar>::autoMap(mapper);
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
thicknessLayer_().autoMap(mapper);
|
||||||
|
kappaLayer_().autoMap(mapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::rmap
|
||||||
|
(
|
||||||
|
const fvPatchField<scalar>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::rmap(ptf, addr);
|
||||||
|
|
||||||
|
const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField& tiptf =
|
||||||
|
refCast
|
||||||
|
<
|
||||||
|
const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
||||||
|
>(ptf);
|
||||||
|
|
||||||
|
temperatureCoupledBase::rmap(tiptf, addr);
|
||||||
|
//mappedPatchFieldBase<scalar>::rmap(ptf, addr);
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
thicknessLayer_().rmap(tiptf.thicknessLayer_(), addr);
|
||||||
|
kappaLayer_().rmap(tiptf.kappaLayer_(), addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tmp<Foam::scalarField>
|
||||||
|
turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::kappa
|
||||||
|
(
|
||||||
|
const scalarField& Tp
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
// Get kappa from relevant thermo
|
||||||
|
tmp<scalarField> tk(temperatureCoupledBase::kappa(Tp));
|
||||||
|
|
||||||
|
// Optionally modify with explicit resistance
|
||||||
|
if (thicknessLayer_ || thicknessLayers_.size())
|
||||||
|
{
|
||||||
|
scalarField KDelta(tk*patch().deltaCoeffs());
|
||||||
|
|
||||||
|
// Harmonic averaging of kappa*deltaCoeffs
|
||||||
|
{
|
||||||
|
KDelta = 1.0/KDelta;
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
const scalar t = db().time().timeOutputValue();
|
||||||
|
KDelta +=
|
||||||
|
thicknessLayer_().value(t)
|
||||||
|
/kappaLayer_().value(t);
|
||||||
|
}
|
||||||
|
if (thicknessLayers_.size())
|
||||||
|
{
|
||||||
|
forAll(thicknessLayers_, iLayer)
|
||||||
|
{
|
||||||
|
KDelta += thicknessLayers_[iLayer]/kappaLayers_[iLayer];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
KDelta = 1.0/KDelta;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update kappa from KDelta
|
||||||
|
tk = KDelta/patch().deltaCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
return tk;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::updateCoeffs()
|
void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (updated())
|
if (updated())
|
||||||
@ -233,17 +332,9 @@ void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::updateCoeffs()
|
|||||||
this->internalField()
|
this->internalField()
|
||||||
);
|
);
|
||||||
|
|
||||||
const tmp<scalarField> myKDelta = kappa(*this)*patch().deltaCoeffs();
|
const scalarField& Tp = *this;
|
||||||
|
const scalarField kappaTp(kappa(Tp));
|
||||||
if (thicknessLayers_.size() > 0)
|
const tmp<scalarField> myKDelta = kappaTp*patch().deltaCoeffs();
|
||||||
{
|
|
||||||
myKDelta.ref() = 1.0/myKDelta.ref();
|
|
||||||
forAll(thicknessLayers_, iLayer)
|
|
||||||
{
|
|
||||||
myKDelta.ref() += thicknessLayers_[iLayer]/kappaLayers_[iLayer];
|
|
||||||
}
|
|
||||||
myKDelta.ref() = 1.0/myKDelta.ref();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
scalarField nbrIntFld;
|
scalarField nbrIntFld;
|
||||||
@ -306,7 +397,7 @@ void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::updateCoeffs()
|
|||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
scalar Q = gSum(kappa(*this)*patch().magSf()*snGrad());
|
scalar Q = gSum(kappaTp*patch().magSf()*snGrad());
|
||||||
|
|
||||||
Info<< patch().boundaryMesh().mesh().name() << ':'
|
Info<< patch().boundaryMesh().mesh().name() << ':'
|
||||||
<< patch().name() << ':'
|
<< patch().name() << ':'
|
||||||
@ -381,6 +472,11 @@ void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::write
|
|||||||
{
|
{
|
||||||
mixedFvPatchScalarField::write(os);
|
mixedFvPatchScalarField::write(os);
|
||||||
os.writeEntry("Tnbr", TnbrName_);
|
os.writeEntry("Tnbr", TnbrName_);
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
thicknessLayer_().writeData(os);
|
||||||
|
kappaLayer_().writeData(os);
|
||||||
|
}
|
||||||
if (thicknessLayers_.size())
|
if (thicknessLayers_.size())
|
||||||
{
|
{
|
||||||
thicknessLayers_.writeEntry("thicknessLayers", os);
|
thicknessLayers_.writeEntry("thicknessLayers", os);
|
||||||
|
|||||||
@ -50,6 +50,8 @@ Usage
|
|||||||
Tnbr | name of the field | no | T
|
Tnbr | name of the field | no | T
|
||||||
thicknessLayers | list of thicknesses per layer [m] | no |
|
thicknessLayers | list of thicknesses per layer [m] | no |
|
||||||
kappaLayers | list of thermal conductivities per layer [W/m/K] | no |
|
kappaLayers | list of thermal conductivities per layer [W/m/K] | no |
|
||||||
|
thicknessLayer | single thickness of layer [m] | no |
|
||||||
|
kappaLayer | corresponding thermal conductivity [W/m/K] | no |
|
||||||
kappaMethod | inherited from temperatureCoupledBase | inherited |
|
kappaMethod | inherited from temperatureCoupledBase | inherited |
|
||||||
kappa | inherited from temperatureCoupledBase | inherited |
|
kappa | inherited from temperatureCoupledBase | inherited |
|
||||||
\endtable
|
\endtable
|
||||||
@ -110,9 +112,11 @@ class turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
|
|
||||||
//- Thickness of layers
|
//- Thickness of layers
|
||||||
scalarList thicknessLayers_;
|
scalarList thicknessLayers_;
|
||||||
|
autoPtr<PatchFunction1<scalar>> thicknessLayer_;
|
||||||
|
|
||||||
//- Conductivity of layers
|
//- Conductivity of layers
|
||||||
scalarList kappaLayers_;
|
scalarList kappaLayers_;
|
||||||
|
autoPtr<PatchFunction1<scalar>> kappaLayer_;
|
||||||
|
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
@ -204,6 +208,27 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// 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 fvPatchField<scalar>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Given patch temperature calculate corresponding K field. Override
|
||||||
|
//- temperatureCoupledBase::kappa to includes effect of any
|
||||||
|
//- explicit kappaThickness
|
||||||
|
virtual tmp<scalarField> kappa(const scalarField& Tp) const;
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|||||||
@ -67,8 +67,6 @@ turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
|||||||
TnbrName_("undefined-Tnbr"),
|
TnbrName_("undefined-Tnbr"),
|
||||||
qrNbrName_("undefined-qrNbr"),
|
qrNbrName_("undefined-qrNbr"),
|
||||||
qrName_("undefined-qr"),
|
qrName_("undefined-qr"),
|
||||||
thicknessLayers_(0),
|
|
||||||
kappaLayers_(0),
|
|
||||||
thermalInertia_(false)
|
thermalInertia_(false)
|
||||||
{
|
{
|
||||||
this->refValue() = 0.0;
|
this->refValue() = 0.0;
|
||||||
@ -99,7 +97,9 @@ turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
|||||||
qrNbrName_(psf.qrNbrName_),
|
qrNbrName_(psf.qrNbrName_),
|
||||||
qrName_(psf.qrName_),
|
qrName_(psf.qrName_),
|
||||||
thicknessLayers_(psf.thicknessLayers_),
|
thicknessLayers_(psf.thicknessLayers_),
|
||||||
|
thicknessLayer_(psf.thicknessLayer_.clone(p.patch())),
|
||||||
kappaLayers_(psf.kappaLayers_),
|
kappaLayers_(psf.kappaLayers_),
|
||||||
|
kappaLayer_(psf.kappaLayer_.clone(p.patch())),
|
||||||
thermalInertia_(psf.thermalInertia_)
|
thermalInertia_(psf.thermalInertia_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -123,8 +123,6 @@ turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
|||||||
TnbrName_(dict.getOrDefault<word>("Tnbr", "T")),
|
TnbrName_(dict.getOrDefault<word>("Tnbr", "T")),
|
||||||
qrNbrName_(dict.getOrDefault<word>("qrNbr", "none")),
|
qrNbrName_(dict.getOrDefault<word>("qrNbr", "none")),
|
||||||
qrName_(dict.getOrDefault<word>("qr", "none")),
|
qrName_(dict.getOrDefault<word>("qr", "none")),
|
||||||
thicknessLayers_(0),
|
|
||||||
kappaLayers_(0),
|
|
||||||
thermalInertia_(dict.getOrDefault<Switch>("thermalInertia", false))
|
thermalInertia_(dict.getOrDefault<Switch>("thermalInertia", false))
|
||||||
{
|
{
|
||||||
if (!isA<mappedPatchBase>(this->patch().patch()))
|
if (!isA<mappedPatchBase>(this->patch().patch()))
|
||||||
@ -137,10 +135,65 @@ turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
|||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//const auto* eptr = dict.findEntry("thicknessLayers");
|
||||||
|
//if (eptr)
|
||||||
|
//{
|
||||||
|
// // Detect either a list (parsed as a scalarList) or
|
||||||
|
// // a single entry (parsed as a PatchFunction1) or
|
||||||
|
//
|
||||||
|
// if
|
||||||
|
// (
|
||||||
|
// eptr->isStream()
|
||||||
|
// && eptr->stream().peek().isPunctuation(token::BEGIN_LIST)
|
||||||
|
// )
|
||||||
|
// {
|
||||||
|
// // Backwards compatibility
|
||||||
|
// thicknessLayers_ = dict.get<scalarList>("thicknessLayers");
|
||||||
|
// kappaLayers_ = dict.get<scalarList>("kappaLayers");
|
||||||
|
//
|
||||||
|
// if (thicknessLayers_.size() != kappaLayers_.size())
|
||||||
|
// {
|
||||||
|
// FatalIOErrorInFunction(dict) << "Inconstent sizes :"
|
||||||
|
// << "thicknessLayers:" << thicknessLayers_
|
||||||
|
// << "kappaLayers:" << kappaLayers_
|
||||||
|
// << exit(FatalIOError);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// thicknessLayer_ = PatchFunction1<scalar>::New
|
||||||
|
// (
|
||||||
|
// p.patch(),
|
||||||
|
// "thicknessLayers",
|
||||||
|
// dict
|
||||||
|
// );
|
||||||
|
// kappaLayer_ = PatchFunction1<scalar>::New
|
||||||
|
// (
|
||||||
|
// p.patch(),
|
||||||
|
// "kappaLayers",
|
||||||
|
// dict
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
// Read list of layers
|
||||||
if (dict.readIfPresent("thicknessLayers", thicknessLayers_))
|
if (dict.readIfPresent("thicknessLayers", thicknessLayers_))
|
||||||
{
|
{
|
||||||
dict.readEntry("kappaLayers", kappaLayers_);
|
dict.readEntry("kappaLayers", kappaLayers_);
|
||||||
}
|
}
|
||||||
|
// Read single additional PatchFunction1
|
||||||
|
thicknessLayer_ = PatchFunction1<scalar>::NewIfPresent
|
||||||
|
(
|
||||||
|
p.patch(),
|
||||||
|
"thicknessLayer",
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
kappaLayer_ = PatchFunction1<scalar>::NewIfPresent
|
||||||
|
(
|
||||||
|
p.patch(),
|
||||||
|
"kappaLayer",
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
|
||||||
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
|
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
|
|
||||||
@ -194,7 +247,9 @@ turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
|||||||
qrNbrName_(psf.qrNbrName_),
|
qrNbrName_(psf.qrNbrName_),
|
||||||
qrName_(psf.qrName_),
|
qrName_(psf.qrName_),
|
||||||
thicknessLayers_(psf.thicknessLayers_),
|
thicknessLayers_(psf.thicknessLayers_),
|
||||||
|
thicknessLayer_(psf.thicknessLayer_.clone(patch().patch())),
|
||||||
kappaLayers_(psf.kappaLayers_),
|
kappaLayers_(psf.kappaLayers_),
|
||||||
|
kappaLayer_(psf.kappaLayer_.clone(patch().patch())),
|
||||||
thermalInertia_(psf.thermalInertia_)
|
thermalInertia_(psf.thermalInertia_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -217,13 +272,97 @@ turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
|||||||
qrNbrName_(psf.qrNbrName_),
|
qrNbrName_(psf.qrNbrName_),
|
||||||
qrName_(psf.qrName_),
|
qrName_(psf.qrName_),
|
||||||
thicknessLayers_(psf.thicknessLayers_),
|
thicknessLayers_(psf.thicknessLayers_),
|
||||||
|
thicknessLayer_(psf.thicknessLayer_.clone(patch().patch())),
|
||||||
kappaLayers_(psf.kappaLayers_),
|
kappaLayers_(psf.kappaLayers_),
|
||||||
|
kappaLayer_(psf.kappaLayer_.clone(patch().patch())),
|
||||||
thermalInertia_(psf.thermalInertia_)
|
thermalInertia_(psf.thermalInertia_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void turbulentTemperatureRadCoupledMixedFvPatchScalarField::autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::autoMap(mapper);
|
||||||
|
temperatureCoupledBase::autoMap(mapper);
|
||||||
|
//mappedPatchFieldBase<scalar>::autoMap(mapper);
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
thicknessLayer_().autoMap(mapper);
|
||||||
|
kappaLayer_().autoMap(mapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void turbulentTemperatureRadCoupledMixedFvPatchScalarField::rmap
|
||||||
|
(
|
||||||
|
const fvPatchField<scalar>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::rmap(ptf, addr);
|
||||||
|
|
||||||
|
const turbulentTemperatureRadCoupledMixedFvPatchScalarField& tiptf =
|
||||||
|
refCast
|
||||||
|
<
|
||||||
|
const turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
||||||
|
>(ptf);
|
||||||
|
|
||||||
|
temperatureCoupledBase::rmap(tiptf, addr);
|
||||||
|
//mappedPatchFieldBase<scalar>::rmap(ptf, addr);
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
thicknessLayer_().rmap(tiptf.thicknessLayer_(), addr);
|
||||||
|
kappaLayer_().rmap(tiptf.kappaLayer_(), addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tmp<Foam::scalarField>
|
||||||
|
turbulentTemperatureRadCoupledMixedFvPatchScalarField::kappa
|
||||||
|
(
|
||||||
|
const scalarField& Tp
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
// Get kappa from relevant thermo
|
||||||
|
tmp<scalarField> tk(temperatureCoupledBase::kappa(Tp));
|
||||||
|
|
||||||
|
// Optionally modify with explicit resistance
|
||||||
|
if (thicknessLayer_ || thicknessLayers_.size())
|
||||||
|
{
|
||||||
|
scalarField KDelta(tk*patch().deltaCoeffs());
|
||||||
|
|
||||||
|
// Harmonic averaging of kappa*deltaCoeffs
|
||||||
|
{
|
||||||
|
KDelta = 1.0/KDelta;
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
const scalar t = db().time().timeOutputValue();
|
||||||
|
KDelta +=
|
||||||
|
thicknessLayer_().value(t)
|
||||||
|
/kappaLayer_().value(t);
|
||||||
|
}
|
||||||
|
if (thicknessLayers_.size())
|
||||||
|
{
|
||||||
|
forAll(thicknessLayers_, iLayer)
|
||||||
|
{
|
||||||
|
KDelta += thicknessLayers_[iLayer]/kappaLayers_[iLayer];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
KDelta = 1.0/KDelta;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update kappa from KDelta
|
||||||
|
tk = KDelta/patch().deltaCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
return tk;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
|
void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (updated())
|
if (updated())
|
||||||
@ -250,17 +389,8 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
|
|||||||
const scalarField Tc(patchInternalField());
|
const scalarField Tc(patchInternalField());
|
||||||
const scalarField& Tp = *this;
|
const scalarField& Tp = *this;
|
||||||
|
|
||||||
scalarField KDelta(kappa(Tp)*patch().deltaCoeffs());
|
const scalarField kappaTp(kappa(Tp));
|
||||||
|
const scalarField KDelta(kappaTp*patch().deltaCoeffs());
|
||||||
if (thicknessLayers_.size() > 0)
|
|
||||||
{
|
|
||||||
KDelta = 1.0/KDelta;
|
|
||||||
forAll(thicknessLayers_, iLayer)
|
|
||||||
{
|
|
||||||
KDelta += thicknessLayers_[iLayer]/kappaLayers_[iLayer];
|
|
||||||
}
|
|
||||||
KDelta = 1.0/KDelta;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
scalarField TcNbr;
|
scalarField TcNbr;
|
||||||
@ -400,13 +530,13 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
|
|||||||
valueFraction() = alpha/(alpha + KDelta);
|
valueFraction() = alpha/(alpha + KDelta);
|
||||||
scalarField c(KDeltaNbr*TcNbr + (mCpDt + mCpDtNbr)*TpOld);
|
scalarField c(KDeltaNbr*TcNbr + (mCpDt + mCpDtNbr)*TpOld);
|
||||||
refValue() = c/alpha;
|
refValue() = c/alpha;
|
||||||
refGrad() = (qr + qrNbr)/kappa(Tp);
|
refGrad() = (qr + qrNbr)/kappaTp;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
valueFraction() = KDeltaNbr/(KDeltaNbr + KDelta);
|
valueFraction() = KDeltaNbr/(KDeltaNbr + KDelta);
|
||||||
refValue() = TcNbr;
|
refValue() = TcNbr;
|
||||||
refGrad() = (qr + qrNbr)/kappa(Tp);
|
refGrad() = (qr + qrNbr)/kappaTp;
|
||||||
}
|
}
|
||||||
|
|
||||||
source() = Zero;
|
source() = Zero;
|
||||||
@ -426,7 +556,7 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
|
|||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
scalar Q = gSum(kappa(Tp)*patch().magSf()*snGrad());
|
scalar Q = gSum(kappaTp*patch().magSf()*snGrad());
|
||||||
|
|
||||||
Info<< patch().boundaryMesh().mesh().name() << ':'
|
Info<< patch().boundaryMesh().mesh().name() << ':'
|
||||||
<< patch().name() << ':'
|
<< patch().name() << ':'
|
||||||
@ -604,6 +734,11 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::write
|
|||||||
os.writeEntry("qr", qrName_);
|
os.writeEntry("qr", qrName_);
|
||||||
os.writeEntry("thermalInertia", thermalInertia_);
|
os.writeEntry("thermalInertia", thermalInertia_);
|
||||||
|
|
||||||
|
if (thicknessLayer_)
|
||||||
|
{
|
||||||
|
thicknessLayer_().writeData(os);
|
||||||
|
kappaLayer_().writeData(os);
|
||||||
|
}
|
||||||
if (thicknessLayers_.size())
|
if (thicknessLayers_.size())
|
||||||
{
|
{
|
||||||
thicknessLayers_.writeEntry("thicknessLayers", os);
|
thicknessLayers_.writeEntry("thicknessLayers", os);
|
||||||
|
|||||||
@ -45,6 +45,8 @@ Usage
|
|||||||
qr | name of the radiative flux in this region | no | none
|
qr | name of the radiative flux in this region | no | none
|
||||||
thicknessLayers | list of thicknesses per layer [m] | no |
|
thicknessLayers | list of thicknesses per layer [m] | no |
|
||||||
kappaLayers | list of thermal conductivites per layer [W/m/K] | no |
|
kappaLayers | list of thermal conductivites per layer [W/m/K] | no |
|
||||||
|
thicknessLayer | single thickness of layer [m] | no |
|
||||||
|
kappaLayer | corresponding thermal conductivity [W/m/K] | no |
|
||||||
kappaMethod | inherited from temperatureCoupledBase | inherited |
|
kappaMethod | inherited from temperatureCoupledBase | inherited |
|
||||||
kappa | inherited from temperatureCoupledBase | inherited |
|
kappa | inherited from temperatureCoupledBase | inherited |
|
||||||
thermalInertia | Add thermal inertia to wall node | no | false
|
thermalInertia | Add thermal inertia to wall node | no | false
|
||||||
@ -114,11 +116,13 @@ class turbulentTemperatureRadCoupledMixedFvPatchScalarField
|
|||||||
//- Name of the radiative heat flux in local region
|
//- Name of the radiative heat flux in local region
|
||||||
const word qrName_;
|
const word qrName_;
|
||||||
|
|
||||||
//- Thickness of layers
|
//- Thickness of layers (either scalarList or a single PatchFunction1)
|
||||||
scalarList thicknessLayers_;
|
scalarList thicknessLayers_;
|
||||||
|
autoPtr<PatchFunction1<scalar>> thicknessLayer_;
|
||||||
|
|
||||||
//- Conductivity of layers
|
//- Conductivity of layers
|
||||||
scalarList kappaLayers_;
|
scalarList kappaLayers_;
|
||||||
|
autoPtr<PatchFunction1<scalar>> kappaLayer_;
|
||||||
|
|
||||||
//- Thermal inertia term
|
//- Thermal inertia term
|
||||||
Switch thermalInertia_;
|
Switch thermalInertia_;
|
||||||
@ -224,6 +228,27 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// 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 fvPatchField<scalar>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Given patch temperature calculate corresponding K field. Override
|
||||||
|
//- temperatureCoupledBase::kappa to includes effect of any
|
||||||
|
//- explicit kappaThickness
|
||||||
|
virtual tmp<scalarField> kappa(const scalarField& Tp) const;
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|||||||
@ -225,6 +225,34 @@ filmPyrolysisRadiativeCoupledMixedFvPatchScalarField
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void filmPyrolysisRadiativeCoupledMixedFvPatchScalarField::autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::autoMap(mapper);
|
||||||
|
temperatureCoupledBase::autoMap(mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void filmPyrolysisRadiativeCoupledMixedFvPatchScalarField::rmap
|
||||||
|
(
|
||||||
|
const fvPatchField<scalar>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::rmap(ptf, addr);
|
||||||
|
|
||||||
|
const filmPyrolysisRadiativeCoupledMixedFvPatchScalarField& tiptf =
|
||||||
|
refCast
|
||||||
|
<
|
||||||
|
const filmPyrolysisRadiativeCoupledMixedFvPatchScalarField
|
||||||
|
>(ptf);
|
||||||
|
|
||||||
|
temperatureCoupledBase::rmap(tiptf, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void filmPyrolysisRadiativeCoupledMixedFvPatchScalarField::updateCoeffs()
|
void filmPyrolysisRadiativeCoupledMixedFvPatchScalarField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (updated())
|
if (updated())
|
||||||
|
|||||||
@ -216,6 +216,22 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// 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 fvPatchField<scalar>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Get corresponding K field
|
//- Get corresponding K field
|
||||||
tmp<scalarField> K() const;
|
tmp<scalarField> K() const;
|
||||||
|
|
||||||
|
|||||||
@ -139,26 +139,6 @@ thermalBaffleFvPatchScalarField::thermalBaffleFvPatchScalarField
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
void thermalBaffleFvPatchScalarField::autoMap
|
|
||||||
(
|
|
||||||
const fvPatchFieldMapper& m
|
|
||||||
)
|
|
||||||
{
|
|
||||||
mixedFvPatchScalarField::autoMap(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void thermalBaffleFvPatchScalarField::rmap
|
|
||||||
(
|
|
||||||
const fvPatchScalarField& ptf,
|
|
||||||
const labelList& addr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
mixedFvPatchScalarField::rmap(ptf, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void thermalBaffleFvPatchScalarField::createPatchMesh()
|
void thermalBaffleFvPatchScalarField::createPatchMesh()
|
||||||
{
|
{
|
||||||
const fvMesh& thisMesh = patch().boundaryMesh().mesh();
|
const fvMesh& thisMesh = patch().boundaryMesh().mesh();
|
||||||
|
|||||||
@ -325,23 +325,6 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// 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&
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|||||||
@ -383,6 +383,7 @@ void Foam::humidityTemperatureCoupledMixedFvPatchScalarField::autoMap
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
mixedFvPatchScalarField::autoMap(m);
|
mixedFvPatchScalarField::autoMap(m);
|
||||||
|
temperatureCoupledBase::autoMap(m);
|
||||||
|
|
||||||
if (fluid_)
|
if (fluid_)
|
||||||
{
|
{
|
||||||
@ -411,6 +412,7 @@ void Foam::humidityTemperatureCoupledMixedFvPatchScalarField::rmap
|
|||||||
ptf
|
ptf
|
||||||
);
|
);
|
||||||
|
|
||||||
|
temperatureCoupledBase::rmap(tiptf, addr);
|
||||||
if (fluid_)
|
if (fluid_)
|
||||||
{
|
{
|
||||||
mass_.rmap(tiptf.mass_, addr);
|
mass_.rmap(tiptf.mass_, addr);
|
||||||
|
|||||||
Reference in New Issue
Block a user