mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH:
Adding reflecting fluxes to Solar load radiation model. Adding functionality to the boundary radiation models and new place holder for basic wall types such as transparent, opaqueDiffusive, opaqueReflective,etc. Changing radiation wall models to run time selectable. Adding multi-band capabilities to VF model and improving the set up for using solar loads in VF and fvDOM radiation models.
This commit is contained in:
@ -2191,16 +2191,36 @@ Foam::triSurface Foam::triSurfaceTools::triangulate
|
|||||||
(
|
(
|
||||||
const polyBoundaryMesh& bMesh,
|
const polyBoundaryMesh& bMesh,
|
||||||
const labelHashSet& includePatches,
|
const labelHashSet& includePatches,
|
||||||
|
labelList& faceMap,
|
||||||
const bool verbose
|
const bool verbose
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const polyMesh& mesh = bMesh.mesh();
|
const polyMesh& mesh = bMesh.mesh();
|
||||||
|
|
||||||
// Storage for surfaceMesh. Size estimate.
|
// Storage for surfaceMesh. Size estimate.
|
||||||
DynamicList<labelledTri> triangles(mesh.nBoundaryFaces());
|
List<labelledTri> triangles;
|
||||||
|
|
||||||
|
// Calculate number of faces and triangles
|
||||||
|
label nFaces = 0;
|
||||||
|
label nTris = 0;
|
||||||
|
|
||||||
|
for (const label patchi : includePatches)
|
||||||
|
{
|
||||||
|
const polyPatch& patch = bMesh[patchi];
|
||||||
|
const pointField& points = patch.points();
|
||||||
|
nFaces += patch.size();
|
||||||
|
for (const face& f : patch)
|
||||||
|
{
|
||||||
|
faceList triFaces(f.nTriangles(points));
|
||||||
|
nTris += triFaces.size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triangles.setSize(nTris);
|
||||||
|
faceMap.setSize(nTris);
|
||||||
label newPatchi = 0;
|
label newPatchi = 0;
|
||||||
|
|
||||||
|
nTris = 0;
|
||||||
for (const label patchi : includePatches)
|
for (const label patchi : includePatches)
|
||||||
{
|
{
|
||||||
const polyPatch& patch = bMesh[patchi];
|
const polyPatch& patch = bMesh[patchi];
|
||||||
@ -2208,6 +2228,7 @@ Foam::triSurface Foam::triSurfaceTools::triangulate
|
|||||||
|
|
||||||
label nTriTotal = 0;
|
label nTriTotal = 0;
|
||||||
|
|
||||||
|
label faceI = 0;
|
||||||
for (const face& f : patch)
|
for (const face& f : patch)
|
||||||
{
|
{
|
||||||
faceList triFaces(f.nTriangles(points));
|
faceList triFaces(f.nTriangles(points));
|
||||||
@ -2218,10 +2239,13 @@ Foam::triSurface Foam::triSurfaceTools::triangulate
|
|||||||
|
|
||||||
for (const face& f : triFaces)
|
for (const face& f : triFaces)
|
||||||
{
|
{
|
||||||
triangles.append(labelledTri(f[0], f[1], f[2], newPatchi));
|
faceMap[nTris] = patch.start() + faceI;
|
||||||
|
triangles[nTris++] = labelledTri(f[0], f[1], f[2], newPatchi);
|
||||||
|
|
||||||
++nTriTotal;
|
++nTriTotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
faceI++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
@ -2233,7 +2257,7 @@ Foam::triSurface Foam::triSurfaceTools::triangulate
|
|||||||
|
|
||||||
newPatchi++;
|
newPatchi++;
|
||||||
}
|
}
|
||||||
triangles.shrink();
|
//triangles.shrink();
|
||||||
|
|
||||||
// Create globally numbered tri surface
|
// Create globally numbered tri surface
|
||||||
triSurface rawSurface(triangles, mesh.points());
|
triSurface rawSurface(triangles, mesh.points());
|
||||||
|
|||||||
@ -479,10 +479,12 @@ public:
|
|||||||
//- Simple triangulation of (selected patches of) boundaryMesh. Needs
|
//- Simple triangulation of (selected patches of) boundaryMesh. Needs
|
||||||
// polyMesh (or polyBoundaryMesh) since only at this level are the
|
// polyMesh (or polyBoundaryMesh) since only at this level are the
|
||||||
// triangles on neighbouring patches connected.
|
// triangles on neighbouring patches connected.
|
||||||
|
// Return faceMap from triI to faceI
|
||||||
static triSurface triangulate
|
static triSurface triangulate
|
||||||
(
|
(
|
||||||
const polyBoundaryMesh& mBesh,
|
const polyBoundaryMesh& mBesh,
|
||||||
const labelHashSet& includePatches,
|
const labelHashSet& includePatches,
|
||||||
|
labelList& faceMap,
|
||||||
const bool verbose = false
|
const bool verbose = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -3794,7 +3794,7 @@ void Foam::distributedTriSurfaceMesh::getRegion
|
|||||||
labelList triangleIndex(info.size());
|
labelList triangleIndex(info.size());
|
||||||
autoPtr<mapDistribute> mapPtr
|
autoPtr<mapDistribute> mapPtr
|
||||||
(
|
(
|
||||||
calcLocalQueries
|
localQueries
|
||||||
(
|
(
|
||||||
info,
|
info,
|
||||||
triangleIndex
|
triangleIndex
|
||||||
@ -3859,7 +3859,7 @@ void Foam::distributedTriSurfaceMesh::getNormal
|
|||||||
labelList triangleIndex(info.size());
|
labelList triangleIndex(info.size());
|
||||||
autoPtr<mapDistribute> mapPtr
|
autoPtr<mapDistribute> mapPtr
|
||||||
(
|
(
|
||||||
calcLocalQueries
|
localQueries
|
||||||
(
|
(
|
||||||
info,
|
info,
|
||||||
triangleIndex
|
triangleIndex
|
||||||
@ -4261,7 +4261,7 @@ void Foam::distributedTriSurfaceMesh::getField
|
|||||||
labelList triangleIndex(info.size());
|
labelList triangleIndex(info.size());
|
||||||
autoPtr<mapDistribute> mapPtr
|
autoPtr<mapDistribute> mapPtr
|
||||||
(
|
(
|
||||||
calcLocalQueries
|
localQueries
|
||||||
(
|
(
|
||||||
info,
|
info,
|
||||||
triangleIndex
|
triangleIndex
|
||||||
@ -4352,6 +4352,128 @@ Foam::triSurface Foam::distributedTriSurfaceMesh::overlappingSurface
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Exchanges indices to the processor they come from.
|
||||||
|
// - calculates exchange map
|
||||||
|
// - uses map to calculate local triangle index
|
||||||
|
Foam::autoPtr<Foam::mapDistribute>
|
||||||
|
Foam::distributedTriSurfaceMesh::localQueries
|
||||||
|
(
|
||||||
|
const List<pointIndexHit>& info,
|
||||||
|
labelList& triangleIndex
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
triangleIndex.setSize(info.size());
|
||||||
|
|
||||||
|
const globalIndex& triIndexer = globalTris();
|
||||||
|
|
||||||
|
|
||||||
|
// Determine send map
|
||||||
|
// ~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
// Since determining which processor the query should go to is
|
||||||
|
// cheap we do a multi-pass algorithm to save some memory temporarily.
|
||||||
|
|
||||||
|
// 1. Count
|
||||||
|
labelList nSend(Pstream::nProcs(), 0);
|
||||||
|
|
||||||
|
forAll(info, i)
|
||||||
|
{
|
||||||
|
if (info[i].hit())
|
||||||
|
{
|
||||||
|
label proci = triIndexer.whichProcID(info[i].index());
|
||||||
|
nSend[proci]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Size sendMap
|
||||||
|
labelListList sendMap(Pstream::nProcs());
|
||||||
|
forAll(nSend, proci)
|
||||||
|
{
|
||||||
|
sendMap[proci].setSize(nSend[proci]);
|
||||||
|
nSend[proci] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Fill sendMap
|
||||||
|
forAll(info, i)
|
||||||
|
{
|
||||||
|
if (info[i].hit())
|
||||||
|
{
|
||||||
|
label proci = triIndexer.whichProcID(info[i].index());
|
||||||
|
triangleIndex[i] = triIndexer.toLocal(proci, info[i].index());
|
||||||
|
sendMap[proci][nSend[proci]++] = i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
triangleIndex[i] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Send over how many i need to receive
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
labelListList sendSizes(Pstream::nProcs());
|
||||||
|
sendSizes[Pstream::myProcNo()].setSize(Pstream::nProcs());
|
||||||
|
forAll(sendMap, proci)
|
||||||
|
{
|
||||||
|
sendSizes[Pstream::myProcNo()][proci] = sendMap[proci].size();
|
||||||
|
}
|
||||||
|
Pstream::gatherList(sendSizes);
|
||||||
|
Pstream::scatterList(sendSizes);
|
||||||
|
|
||||||
|
|
||||||
|
// Determine receive map
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
labelListList constructMap(Pstream::nProcs());
|
||||||
|
|
||||||
|
// My local segments first
|
||||||
|
constructMap[Pstream::myProcNo()] = identity
|
||||||
|
(
|
||||||
|
sendMap[Pstream::myProcNo()].size()
|
||||||
|
);
|
||||||
|
|
||||||
|
label segmenti = constructMap[Pstream::myProcNo()].size();
|
||||||
|
forAll(constructMap, proci)
|
||||||
|
{
|
||||||
|
if (proci != Pstream::myProcNo())
|
||||||
|
{
|
||||||
|
// What i need to receive is what other processor is sending to me.
|
||||||
|
label nRecv = sendSizes[proci][Pstream::myProcNo()];
|
||||||
|
constructMap[proci].setSize(nRecv);
|
||||||
|
|
||||||
|
for (label i = 0; i < nRecv; i++)
|
||||||
|
{
|
||||||
|
constructMap[proci][i] = segmenti++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Pack into distribution map
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
autoPtr<mapDistribute> mapPtr
|
||||||
|
(
|
||||||
|
new mapDistribute
|
||||||
|
(
|
||||||
|
segmenti, // size after construction
|
||||||
|
std::move(sendMap),
|
||||||
|
std::move(constructMap)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
const mapDistribute& map = mapPtr();
|
||||||
|
|
||||||
|
|
||||||
|
// Send over queries
|
||||||
|
// ~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
map.distribute(triangleIndex);
|
||||||
|
|
||||||
|
return mapPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::distributedTriSurfaceMesh::distribute
|
void Foam::distributedTriSurfaceMesh::distribute
|
||||||
(
|
(
|
||||||
const List<treeBoundBox>& bbs,
|
const List<treeBoundBox>& bbs,
|
||||||
|
|||||||
@ -202,6 +202,7 @@ private:
|
|||||||
|
|
||||||
// Triangle index
|
// Triangle index
|
||||||
|
|
||||||
|
|
||||||
//- Helper: convert local triangle indices to global ones
|
//- Helper: convert local triangle indices to global ones
|
||||||
void convertTriIndices(List<pointIndexHit>& info) const;
|
void convertTriIndices(List<pointIndexHit>& info) const;
|
||||||
|
|
||||||
@ -559,6 +560,17 @@ public:
|
|||||||
labelList& subFaceMap
|
labelList& subFaceMap
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Obtains global indices from pointIndexHit and swaps them back
|
||||||
|
// to their original processor. Used to calculate local region
|
||||||
|
// and normal.
|
||||||
|
virtual autoPtr<mapDistribute> localQueries
|
||||||
|
(
|
||||||
|
const List<pointIndexHit>&,
|
||||||
|
labelList& triangleIndex
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
//- Print some stats. Parallel aware version of
|
//- Print some stats. Parallel aware version of
|
||||||
// triSurface::writeStats.
|
// triSurface::writeStats.
|
||||||
void writeStats(Ostream& os) const;
|
void writeStats(Ostream& os) const;
|
||||||
|
|||||||
@ -11,6 +11,7 @@ radiationModels/viewFactor/viewFactor.C
|
|||||||
radiationModels/opaqueSolid/opaqueSolid.C
|
radiationModels/opaqueSolid/opaqueSolid.C
|
||||||
radiationModels/solarLoad/solarLoad.C
|
radiationModels/solarLoad/solarLoad.C
|
||||||
radiationModels/solarLoad/faceShading/faceShading.C
|
radiationModels/solarLoad/faceShading/faceShading.C
|
||||||
|
radiationModels/solarLoad/faceReflecting/faceReflecting.C
|
||||||
|
|
||||||
/* Scatter model */
|
/* Scatter model */
|
||||||
submodels/scatterModel/scatterModel/scatterModel.C
|
submodels/scatterModel/scatterModel/scatterModel.C
|
||||||
@ -18,6 +19,18 @@ submodels/scatterModel/scatterModel/scatterModelNew.C
|
|||||||
submodels/scatterModel/noScatter/noScatter.C
|
submodels/scatterModel/noScatter/noScatter.C
|
||||||
submodels/scatterModel/constantScatter/constantScatter.C
|
submodels/scatterModel/constantScatter/constantScatter.C
|
||||||
|
|
||||||
|
/* Wall sub-models */
|
||||||
|
submodels/wallTransmissivityModel/wallTransmissivityModel/wallTransmissivityModel.C
|
||||||
|
submodels/wallTransmissivityModel/wallTransmissivityModel/wallTransmissivityModelNew.C
|
||||||
|
submodels/wallTransmissivityModel/constantTransmissivity/constantTransmissivity.C
|
||||||
|
submodels/wallTransmissivityModel/multiBandTransmissivity/multiBandTransmissivity.C
|
||||||
|
|
||||||
|
submodels/wallAbsorptionEmissionModel/wallAbsorptionEmissionModel/wallAbsorptionEmissionModel.C
|
||||||
|
submodels/wallAbsorptionEmissionModel/wallAbsorptionEmissionModel/wallAbsorptionEmissionModelNew.C
|
||||||
|
submodels/wallAbsorptionEmissionModel/multiBandAbsorption/multiBandAbsorption.C
|
||||||
|
submodels/wallAbsorptionEmissionModel/constantAbsorption/constantAbsorption.C
|
||||||
|
submodels/wallAbsorptionEmissionModel/solidAbsorption/solidAbsorption.C
|
||||||
|
|
||||||
/* Absorption/Emission model */
|
/* Absorption/Emission model */
|
||||||
submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C
|
submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C
|
||||||
submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModelNew.C
|
submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModelNew.C
|
||||||
@ -31,18 +44,19 @@ submodels/absorptionEmissionModel/multiBandSolidAbsorptionEmission/multiBandSoli
|
|||||||
submodels/boundaryRadiationProperties/boundaryRadiationProperties.C
|
submodels/boundaryRadiationProperties/boundaryRadiationProperties.C
|
||||||
submodels/boundaryRadiationProperties/boundaryRadiationPropertiesPatch.C
|
submodels/boundaryRadiationProperties/boundaryRadiationPropertiesPatch.C
|
||||||
|
|
||||||
|
/* Types of radiative walls */
|
||||||
|
submodels/boundaryRadiationProperties/transparent/transparent.C
|
||||||
|
submodels/boundaryRadiationProperties/lookup/lookup.C
|
||||||
|
submodels/boundaryRadiationProperties/opaqueDiffusive/opaqueDiffusive.C
|
||||||
|
submodels/boundaryRadiationProperties/opaqueReflective/opaqueReflective.C
|
||||||
|
|
||||||
/* Soot model */
|
/* Soot model */
|
||||||
submodels/sootModel/sootModel/sootModel.C
|
submodels/sootModel/sootModel/sootModel.C
|
||||||
submodels/sootModel/sootModel/sootModelNew.C
|
submodels/sootModel/sootModel/sootModelNew.C
|
||||||
submodels/sootModel/mixtureFractionSoot/mixtureFractionSoots.C
|
submodels/sootModel/mixtureFractionSoot/mixtureFractionSoots.C
|
||||||
submodels/sootModel/noSoot/noSoot.C
|
submodels/sootModel/noSoot/noSoot.C
|
||||||
|
|
||||||
/* Transmissivity model */
|
|
||||||
submodels/transmissivityModel/transmissivityModel/transmissivityModel.C
|
|
||||||
submodels/transmissivityModel/transmissivityModel/transmissivityModelNew.C
|
|
||||||
submodels/transmissivityModel/noTransmissivity/noTransmissivity.C
|
|
||||||
submodels/transmissivityModel/constantTransmissivity/constantTransmissivity.C
|
|
||||||
submodels/transmissivityModel/multiBandSolidTransmissivity/multiBandSolidTransmissivity.C
|
|
||||||
|
|
||||||
/* Solar calculator model */
|
/* Solar calculator model */
|
||||||
submodels/solarCalculator/solarCalculator.C
|
submodels/solarCalculator/solarCalculator.C
|
||||||
|
|||||||
@ -47,8 +47,7 @@ greyDiffusiveRadiationMixedFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixedFvPatchScalarField(p, iF),
|
mixedFvPatchScalarField(p, iF),
|
||||||
TName_("T"),
|
TName_("T")
|
||||||
solarLoad_(false)
|
|
||||||
{
|
{
|
||||||
refValue() = 0.0;
|
refValue() = 0.0;
|
||||||
refGrad() = 0.0;
|
refGrad() = 0.0;
|
||||||
@ -66,8 +65,7 @@ greyDiffusiveRadiationMixedFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixedFvPatchScalarField(ptf, p, iF, mapper),
|
mixedFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
TName_(ptf.TName_),
|
TName_(ptf.TName_)
|
||||||
solarLoad_(ptf.solarLoad_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -80,8 +78,7 @@ greyDiffusiveRadiationMixedFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixedFvPatchScalarField(p, iF),
|
mixedFvPatchScalarField(p, iF),
|
||||||
TName_(dict.lookupOrDefault<word>("T", "T")),
|
TName_(dict.lookupOrDefault<word>("T", "T"))
|
||||||
solarLoad_(dict.lookupOrDefault("solarLoad", false))
|
|
||||||
{
|
{
|
||||||
if (dict.found("refValue"))
|
if (dict.found("refValue"))
|
||||||
{
|
{
|
||||||
@ -111,8 +108,7 @@ greyDiffusiveRadiationMixedFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixedFvPatchScalarField(ptf),
|
mixedFvPatchScalarField(ptf),
|
||||||
TName_(ptf.TName_),
|
TName_(ptf.TName_)
|
||||||
solarLoad_(ptf.solarLoad_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -124,8 +120,7 @@ greyDiffusiveRadiationMixedFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
mixedFvPatchScalarField(ptf, iF),
|
mixedFvPatchScalarField(ptf, iF),
|
||||||
TName_(ptf.TName_),
|
TName_(ptf.TName_)
|
||||||
solarLoad_(ptf.solarLoad_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -197,12 +192,23 @@ updateCoeffs()
|
|||||||
Ir += dom.IRay(rayI).qin().boundaryField()[patchi];
|
Ir += dom.IRay(rayI).qin().boundaryField()[patchi];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (solarLoad_)
|
if (dom.useSolarLoad())
|
||||||
{
|
{
|
||||||
|
// Looking for primary heat flux single band
|
||||||
Ir += patch().lookupPatchField<volScalarField,scalar>
|
Ir += patch().lookupPatchField<volScalarField,scalar>
|
||||||
(
|
(
|
||||||
dom.externalRadHeatFieldName_
|
dom.primaryFluxName_ + "_0"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
word qSecName = dom.relfectedFluxName_ + "_0";
|
||||||
|
|
||||||
|
if (this->db().foundObject<volScalarField>(qSecName))
|
||||||
|
{
|
||||||
|
const volScalarField& qSec =
|
||||||
|
this->db().lookupObject<volScalarField>(qSecName);
|
||||||
|
|
||||||
|
Ir += qSec.boundaryField()[patch().index()];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
forAll(Iw, faceI)
|
forAll(Iw, faceI)
|
||||||
@ -248,7 +254,6 @@ void Foam::radiation::greyDiffusiveRadiationMixedFvPatchScalarField::write
|
|||||||
{
|
{
|
||||||
mixedFvPatchScalarField::write(os);
|
mixedFvPatchScalarField::write(os);
|
||||||
os.writeEntryIfDifferent<word>("T", "T", TName_);
|
os.writeEntryIfDifferent<word>("T", "T", TName_);
|
||||||
os.writeEntry("solarLoad", solarLoad_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -86,10 +86,6 @@ class greyDiffusiveRadiationMixedFvPatchScalarField
|
|||||||
//- Name of temperature field
|
//- Name of temperature field
|
||||||
word TName_;
|
word TName_;
|
||||||
|
|
||||||
//- Activate solar load
|
|
||||||
bool solarLoad_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
|
|||||||
@ -30,6 +30,7 @@ License
|
|||||||
#include "fvPatchFieldMapper.H"
|
#include "fvPatchFieldMapper.H"
|
||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "radiationModel.H"
|
#include "radiationModel.H"
|
||||||
|
#include "viewFactor.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -41,8 +42,7 @@ greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF),
|
fixedValueFvPatchScalarField(p, iF),
|
||||||
qro_(),
|
qro_()
|
||||||
solarLoad_(false)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -56,8 +56,7 @@ greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
qro_(ptf.qro_, mapper),
|
qro_(ptf.qro_, mapper)
|
||||||
solarLoad_(ptf.solarLoad_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -70,8 +69,7 @@ greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF, dict, false),
|
fixedValueFvPatchScalarField(p, iF, dict, false),
|
||||||
qro_("qro", dict, p.size()),
|
qro_("qro", dict, p.size())
|
||||||
solarLoad_(dict.lookupOrDefault("solarLoad", false))
|
|
||||||
{
|
{
|
||||||
if (dict.found("value"))
|
if (dict.found("value"))
|
||||||
{
|
{
|
||||||
@ -95,8 +93,7 @@ greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(ptf),
|
fixedValueFvPatchScalarField(ptf),
|
||||||
qro_(ptf.qro_),
|
qro_(ptf.qro_)
|
||||||
solarLoad_(ptf.solarLoad_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -108,8 +105,7 @@ greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(ptf, iF),
|
fixedValueFvPatchScalarField(ptf, iF),
|
||||||
qro_(ptf.qro_),
|
qro_(ptf.qro_)
|
||||||
solarLoad_(ptf.solarLoad_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -167,19 +163,29 @@ updateCoeffs()
|
|||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::radiation::
|
Foam::tmp<Foam::scalarField> Foam::radiation::
|
||||||
greyDiffusiveViewFactorFixedValueFvPatchScalarField::qro() const
|
greyDiffusiveViewFactorFixedValueFvPatchScalarField::qro(label bandI) const
|
||||||
{
|
{
|
||||||
tmp<scalarField> tqrt(new scalarField(qro_));
|
tmp<scalarField> tqrt(new scalarField(qro_));
|
||||||
|
|
||||||
if (solarLoad_)
|
const viewFactor& radiation =
|
||||||
{
|
db().lookupObject<viewFactor>("radiationProperties");
|
||||||
const radiationModel& radiation =
|
|
||||||
db().lookupObject<radiationModel>("radiationProperties");
|
|
||||||
|
|
||||||
|
if (radiation.useSolarLoad())
|
||||||
|
{
|
||||||
tqrt.ref() += patch().lookupPatchField<volScalarField, scalar>
|
tqrt.ref() += patch().lookupPatchField<volScalarField, scalar>
|
||||||
(
|
(
|
||||||
radiation.externalRadHeatFieldName_
|
radiation.primaryFluxName_ + "_" + name(bandI)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
word qSecName = radiation.relfectedFluxName_ + "_" + name(bandI);
|
||||||
|
|
||||||
|
if (this->db().foundObject<volScalarField>(qSecName))
|
||||||
|
{
|
||||||
|
const volScalarField& qSec =
|
||||||
|
this->db().lookupObject<volScalarField>(qSecName);
|
||||||
|
|
||||||
|
tqrt.ref() += qSec.boundaryField()[patch().index()];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return tqrt;
|
return tqrt;
|
||||||
@ -194,7 +200,6 @@ write
|
|||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::write(os);
|
fixedValueFvPatchScalarField::write(os);
|
||||||
qro_.writeEntry("qro", os);
|
qro_.writeEntry("qro", os);
|
||||||
os.writeEntry("solarLoad", solarLoad_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,6 @@ Usage
|
|||||||
\table
|
\table
|
||||||
Property | Description | Required | Default value
|
Property | Description | Required | Default value
|
||||||
qro | external radiative heat flux | yes |
|
qro | external radiative heat flux | yes |
|
||||||
emissivityMode | emissivity mode: solidRadiation or lookup | yes |
|
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
Example of the boundary condition specification:
|
Example of the boundary condition specification:
|
||||||
@ -46,8 +45,6 @@ Usage
|
|||||||
{
|
{
|
||||||
type greyDiffusiveRadiationViewFactor;
|
type greyDiffusiveRadiationViewFactor;
|
||||||
qro uniform 0;
|
qro uniform 0;
|
||||||
emissivityMode solidRadiation;
|
|
||||||
value uniform 0;
|
|
||||||
}
|
}
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
@ -87,9 +84,6 @@ class greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
|||||||
//- External radiative heat flux
|
//- External radiative heat flux
|
||||||
scalarField qro_;
|
scalarField qro_;
|
||||||
|
|
||||||
//- Activate solar load
|
|
||||||
bool solarLoad_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -168,7 +162,7 @@ public:
|
|||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return external + solar load radiative heat flux
|
//- Return external + solar load radiative heat flux
|
||||||
tmp<scalarField> qro() const;
|
tmp<scalarField> qro(label bandI = 0) const;
|
||||||
|
|
||||||
|
|
||||||
// Evaluation functions
|
// Evaluation functions
|
||||||
|
|||||||
@ -213,6 +213,25 @@ updateCoeffs()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dom.useSolarLoad())
|
||||||
|
{
|
||||||
|
// Looking for primary heat flux single band
|
||||||
|
Ir += patch().lookupPatchField<volScalarField,scalar>
|
||||||
|
(
|
||||||
|
dom.primaryFluxName_ + "_" + name(lambdaId - 1)
|
||||||
|
);
|
||||||
|
|
||||||
|
word qSecName = dom.relfectedFluxName_ + "_" + name(lambdaId - 1);
|
||||||
|
|
||||||
|
if (this->db().foundObject<volScalarField>(qSecName))
|
||||||
|
{
|
||||||
|
const volScalarField& qSec =
|
||||||
|
this->db().lookupObject<volScalarField>(qSecName);
|
||||||
|
|
||||||
|
Ir += qSec.boundaryField()[patch().index()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
forAll(Iw, facei)
|
forAll(Iw, facei)
|
||||||
{
|
{
|
||||||
const vector& d = dom.IRay(rayId).d();
|
const vector& d = dom.IRay(rayId).d();
|
||||||
|
|||||||
@ -292,4 +292,9 @@ Foam::radiation::P1::Ru() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::P1::nBands() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->nBands();
|
||||||
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -128,6 +128,9 @@ public:
|
|||||||
|
|
||||||
//- Source term component (constant)
|
//- Source term component (constant)
|
||||||
virtual tmp<volScalarField::Internal> Ru() const;
|
virtual tmp<volScalarField::Internal> Ru() const;
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
label nBands() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -193,10 +193,7 @@ void Foam::radiation::fvDOM::initialise()
|
|||||||
if (useSolarLoad_)
|
if (useSolarLoad_)
|
||||||
{
|
{
|
||||||
const dictionary& solarDict = this->subDict("solarLoarCoeffs");
|
const dictionary& solarDict = this->subDict("solarLoarCoeffs");
|
||||||
solarLoad_.reset
|
solarLoad_.reset(new solarLoad(solarDict, T_));
|
||||||
(
|
|
||||||
new solarLoad(solarDict, T_, externalRadHeatFieldName_)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (solarLoad_->nBands() > 1)
|
if (solarLoad_->nBands() > 1)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -244,6 +244,9 @@ public:
|
|||||||
//- Number of wavelengths
|
//- Number of wavelengths
|
||||||
inline label nLambda() const;
|
inline label nLambda() const;
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
inline label nBands() const;
|
||||||
|
|
||||||
//- Const access to total absorption coefficient
|
//- Const access to total absorption coefficient
|
||||||
inline const volScalarField& a() const;
|
inline const volScalarField& a() const;
|
||||||
|
|
||||||
@ -270,6 +273,9 @@ public:
|
|||||||
|
|
||||||
//- Return meshOrientation
|
//- Return meshOrientation
|
||||||
inline vector meshOrientation() const;
|
inline vector meshOrientation() const;
|
||||||
|
|
||||||
|
//- Use solar load
|
||||||
|
inline bool useSolarLoad() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -67,6 +67,11 @@ inline Foam::label Foam::radiation::fvDOM::nLambda() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::label Foam::radiation::fvDOM::nBands() const
|
||||||
|
{
|
||||||
|
return nLambda_;
|
||||||
|
}
|
||||||
|
|
||||||
inline const Foam::volScalarField& Foam::radiation::fvDOM::a() const
|
inline const Foam::volScalarField& Foam::radiation::fvDOM::a() const
|
||||||
{
|
{
|
||||||
return a_;
|
return a_;
|
||||||
@ -124,4 +129,9 @@ inline Foam::vector Foam::radiation::fvDOM::meshOrientation() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool Foam::radiation::fvDOM::useSolarLoad() const
|
||||||
|
{
|
||||||
|
return useSolarLoad_;
|
||||||
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -101,6 +101,12 @@ public:
|
|||||||
|
|
||||||
//- Source term component (constant)
|
//- Source term component (constant)
|
||||||
tmp<volScalarField::Internal> Ru() const;
|
tmp<volScalarField::Internal> Ru() const;
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
label nBands() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -121,4 +121,9 @@ Foam::radiation::opaqueSolid::Ru() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::opaqueSolid::nBands() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->nBands();
|
||||||
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -102,6 +102,9 @@ public:
|
|||||||
|
|
||||||
//- Source term component (constant)
|
//- Source term component (constant)
|
||||||
tmp<volScalarField::Internal> Ru() const;
|
tmp<volScalarField::Internal> Ru() const;
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
label nBands() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,12 @@ namespace Foam
|
|||||||
const Foam::word Foam::radiation::radiationModel::externalRadHeatFieldName_ =
|
const Foam::word Foam::radiation::radiationModel::externalRadHeatFieldName_ =
|
||||||
"qrExt";
|
"qrExt";
|
||||||
|
|
||||||
|
const Foam::word Foam::radiation::radiationModel::primaryFluxName_ =
|
||||||
|
"qprimaryRad";
|
||||||
|
|
||||||
|
const Foam::word Foam::radiation::radiationModel::relfectedFluxName_ =
|
||||||
|
"qreflective";
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::IOobject Foam::radiation::radiationModel::createIOobject
|
Foam::IOobject Foam::radiation::radiationModel::createIOobject
|
||||||
@ -90,8 +96,6 @@ void Foam::radiation::radiationModel::initialise()
|
|||||||
scatter_.reset(scatterModel::New(*this, mesh_).ptr());
|
scatter_.reset(scatterModel::New(*this, mesh_).ptr());
|
||||||
|
|
||||||
soot_.reset(sootModel::New(*this, mesh_).ptr());
|
soot_.reset(sootModel::New(*this, mesh_).ptr());
|
||||||
|
|
||||||
transmissivity_.reset(transmissivityModel::New(*this, mesh_).ptr());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,8 +124,7 @@ Foam::radiation::radiationModel::radiationModel(const volScalarField& T)
|
|||||||
firstIter_(true),
|
firstIter_(true),
|
||||||
absorptionEmission_(nullptr),
|
absorptionEmission_(nullptr),
|
||||||
scatter_(nullptr),
|
scatter_(nullptr),
|
||||||
soot_(nullptr),
|
soot_(nullptr)
|
||||||
transmissivity_(nullptr)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -141,8 +144,7 @@ Foam::radiation::radiationModel::radiationModel
|
|||||||
firstIter_(true),
|
firstIter_(true),
|
||||||
absorptionEmission_(nullptr),
|
absorptionEmission_(nullptr),
|
||||||
scatter_(nullptr),
|
scatter_(nullptr),
|
||||||
soot_(nullptr),
|
soot_(nullptr)
|
||||||
transmissivity_(nullptr)
|
|
||||||
{
|
{
|
||||||
if (readOpt() == IOobject::NO_READ)
|
if (readOpt() == IOobject::NO_READ)
|
||||||
{
|
{
|
||||||
@ -181,8 +183,7 @@ Foam::radiation::radiationModel::radiationModel
|
|||||||
firstIter_(true),
|
firstIter_(true),
|
||||||
absorptionEmission_(nullptr),
|
absorptionEmission_(nullptr),
|
||||||
scatter_(nullptr),
|
scatter_(nullptr),
|
||||||
soot_(nullptr),
|
soot_(nullptr)
|
||||||
transmissivity_(nullptr)
|
|
||||||
{
|
{
|
||||||
initialise();
|
initialise();
|
||||||
}
|
}
|
||||||
@ -319,7 +320,7 @@ Foam::radiation::radiationModel::soot() const
|
|||||||
return *soot_;
|
return *soot_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
const Foam::radiation::transmissivityModel&
|
const Foam::radiation::transmissivityModel&
|
||||||
Foam::radiation::radiationModel::transmissivity() const
|
Foam::radiation::radiationModel::transmissivity() const
|
||||||
{
|
{
|
||||||
@ -332,6 +333,6 @@ Foam::radiation::radiationModel::transmissivity() const
|
|||||||
|
|
||||||
return *transmissivity_;
|
return *transmissivity_;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -50,7 +50,7 @@ SourceFiles
|
|||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "fvMatricesFwd.H"
|
#include "fvMatricesFwd.H"
|
||||||
#include "Switch.H"
|
#include "Switch.H"
|
||||||
#include "transmissivityModel.H"
|
#include "absorptionEmissionModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ namespace radiation
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Forward declaration of classes
|
// Forward declaration of classes
|
||||||
class absorptionEmissionModel;
|
//class absorptionEmissionModel;
|
||||||
class scatterModel;
|
class scatterModel;
|
||||||
class sootModel;
|
class sootModel;
|
||||||
|
|
||||||
@ -83,6 +83,13 @@ public:
|
|||||||
//- Static name external radiative fluxes
|
//- Static name external radiative fluxes
|
||||||
static const word externalRadHeatFieldName_;
|
static const word externalRadHeatFieldName_;
|
||||||
|
|
||||||
|
//- Static name for primary solar fluxes
|
||||||
|
static const word primaryFluxName_;
|
||||||
|
|
||||||
|
//- Static name for reflected solar fluxes
|
||||||
|
static const word relfectedFluxName_;
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
||||||
@ -124,7 +131,7 @@ protected:
|
|||||||
autoPtr<sootModel> soot_;
|
autoPtr<sootModel> soot_;
|
||||||
|
|
||||||
//- Transmissivity model
|
//- Transmissivity model
|
||||||
autoPtr<transmissivityModel> transmissivity_;
|
//autoPtr<transmissivityModel> transmissivity_;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -265,12 +272,11 @@ public:
|
|||||||
volScalarField& T
|
volScalarField& T
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
virtual label nBands() const = 0;
|
||||||
|
|
||||||
//- Access to absorptionEmission model
|
//- Access to absorptionEmission model
|
||||||
const absorptionEmissionModel& absorptionEmission() const;
|
const absorptionEmissionModel& absorptionEmission() const;
|
||||||
|
|
||||||
//- Access to transmissivity Model
|
|
||||||
const transmissivityModel& transmissivity() const;
|
|
||||||
|
|
||||||
//- Access to soot Model
|
//- Access to soot Model
|
||||||
const sootModel& soot() const;
|
const sootModel& soot() const;
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,536 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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 "faceReflecting.H"
|
||||||
|
#include "boundaryRadiationProperties.H"
|
||||||
|
#include "cyclicAMIPolyPatch.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace Foam::constant::mathematical;
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(faceReflecting, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::faceReflecting::initialise(const dictionary& coeffs)
|
||||||
|
{
|
||||||
|
|
||||||
|
forAll(qreflective_, bandI)
|
||||||
|
{
|
||||||
|
qreflective_.set
|
||||||
|
(
|
||||||
|
bandI,
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"qreflective_" + Foam::name(bandI) ,
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
label rayI = 0;
|
||||||
|
if (mesh_.nSolutionD() == 3)
|
||||||
|
{
|
||||||
|
nRay_ = 4*nPhi_*nTheta_;
|
||||||
|
refDiscAngles_.resize(nRay_);
|
||||||
|
const scalar deltaPhi = pi/(2.0*nPhi_);
|
||||||
|
const scalar deltaTheta = pi/nTheta_;
|
||||||
|
|
||||||
|
for (label n = 1; n <= nTheta_; n++)
|
||||||
|
{
|
||||||
|
for (label m = 1; m <= 4*nPhi_; m++)
|
||||||
|
{
|
||||||
|
const scalar thetai = (2*n - 1)*deltaTheta/2.0;
|
||||||
|
const scalar phii = (2*m - 1)*deltaPhi/2.0;
|
||||||
|
|
||||||
|
scalar sinTheta = Foam::sin(thetai);
|
||||||
|
scalar cosTheta = Foam::cos(thetai);
|
||||||
|
scalar sinPhi = Foam::sin(phii);
|
||||||
|
scalar cosPhi = Foam::cos(phii);
|
||||||
|
refDiscAngles_[rayI++] =
|
||||||
|
vector(sinTheta*sinPhi, sinTheta*cosPhi, cosTheta);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (mesh_.nSolutionD() == 2)
|
||||||
|
{
|
||||||
|
nRay_ = 4*nPhi_;
|
||||||
|
refDiscAngles_.resize(nRay_);
|
||||||
|
const scalar thetai = piByTwo;
|
||||||
|
//const scalar deltaTheta = pi;
|
||||||
|
const scalar deltaPhi = pi/(2.0*nPhi_);
|
||||||
|
for (label m = 1; m <= 4*nPhi_; m++)
|
||||||
|
{
|
||||||
|
const scalar phii = (2*m - 1)*deltaPhi/2.0;
|
||||||
|
|
||||||
|
scalar sinTheta = Foam::sin(thetai);
|
||||||
|
scalar cosTheta = Foam::cos(thetai);
|
||||||
|
scalar sinPhi = Foam::sin(phii);
|
||||||
|
scalar cosPhi = Foam::cos(phii);
|
||||||
|
|
||||||
|
refDiscAngles_[rayI++] =
|
||||||
|
vector(sinTheta*sinPhi, sinTheta*cosPhi, cosTheta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "The reflected rays are available in 2D or 3D "
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
|
|
||||||
|
const radiation::boundaryRadiationProperties& boundaryRadiation =
|
||||||
|
radiation::boundaryRadiationProperties::New(mesh_);
|
||||||
|
|
||||||
|
// global face index
|
||||||
|
globalIndex globalNumbering(mesh_.nFaces());
|
||||||
|
|
||||||
|
// Collect faces with t = 0, r = 0 and a > 0 to shoot rays
|
||||||
|
// and patches to construct the triSurface
|
||||||
|
DynamicList<point> dynCf;
|
||||||
|
DynamicList<label> dynFacesI;
|
||||||
|
forAll(patches, patchI)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = patches[patchI];
|
||||||
|
const pointField& cf = pp.faceCentres();
|
||||||
|
|
||||||
|
if (!pp.coupled() && !isA<cyclicAMIPolyPatch>(pp))
|
||||||
|
{
|
||||||
|
const tmp<scalarField> tt =
|
||||||
|
boundaryRadiation.transmissivity(patchI);
|
||||||
|
|
||||||
|
const tmp<scalarField> tr =
|
||||||
|
boundaryRadiation.specReflectivity(patchI);
|
||||||
|
|
||||||
|
const tmp<scalarField> ta =
|
||||||
|
boundaryRadiation.absorptivity(patchI);
|
||||||
|
|
||||||
|
const scalarField& t = tt();
|
||||||
|
const scalarField& r = tr();
|
||||||
|
const scalarField& a = ta();
|
||||||
|
|
||||||
|
forAll(pp, faceI)
|
||||||
|
{
|
||||||
|
// Opaque, non-reflective, absortived faces to shoot
|
||||||
|
if (t[faceI] == 0 && r[faceI] == 0 && a[faceI] > 0)
|
||||||
|
{
|
||||||
|
dynFacesI.append(faceI + pp.start());
|
||||||
|
dynCf.append(cf[faceI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// relfective opaque patches to build reflective surface
|
||||||
|
if (r[faceI] > 0 && t[faceI] == 0)
|
||||||
|
{
|
||||||
|
includePatches_.insert(patchI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shootFacesIds_.reset(new labelList(dynFacesI));
|
||||||
|
Cfs_.reset(new pointField(dynCf));
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * *
|
||||||
|
// Create distributedTriSurfaceMesh
|
||||||
|
Random rndGen(653213);
|
||||||
|
|
||||||
|
// Determine mesh bounding boxes:
|
||||||
|
List<treeBoundBox> meshBb
|
||||||
|
(
|
||||||
|
1,
|
||||||
|
treeBoundBox
|
||||||
|
(
|
||||||
|
boundBox(mesh_.points(), false)
|
||||||
|
).extend(rndGen, 1e-3)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Dummy bounds dictionary
|
||||||
|
dictionary dict;
|
||||||
|
dict.add("bounds", meshBb);
|
||||||
|
dict.add
|
||||||
|
(
|
||||||
|
"distributionType",
|
||||||
|
distributedTriSurfaceMesh::distributionTypeNames_
|
||||||
|
[
|
||||||
|
distributedTriSurfaceMesh::FROZEN
|
||||||
|
]
|
||||||
|
);
|
||||||
|
dict.add("mergeDistance", SMALL);
|
||||||
|
|
||||||
|
|
||||||
|
triSurface localSurface = triSurfaceTools::triangulate
|
||||||
|
(
|
||||||
|
mesh_.boundaryMesh(),
|
||||||
|
includePatches_,
|
||||||
|
mapTriToGlobal_
|
||||||
|
);
|
||||||
|
|
||||||
|
surfacesMesh_.reset
|
||||||
|
(
|
||||||
|
new distributedTriSurfaceMesh
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"reflectiveSurface.stl",
|
||||||
|
mesh_.time().constant(),
|
||||||
|
"triSurface",
|
||||||
|
mesh_.time(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
localSurface,
|
||||||
|
dict
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
surfacesMesh_->searchableSurface::write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Foam::faceReflecting::calculate()
|
||||||
|
{
|
||||||
|
const radiation::boundaryRadiationProperties& boundaryRadiation =
|
||||||
|
radiation::boundaryRadiationProperties::New(mesh_);
|
||||||
|
|
||||||
|
label nFaces = 0;
|
||||||
|
|
||||||
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
|
|
||||||
|
const fvBoundaryMesh& fvPatches = mesh_.boundary();
|
||||||
|
|
||||||
|
label nBands = spectralDistribution_.size();
|
||||||
|
|
||||||
|
// Collect reflected directions from reflecting surfaces on direct hit
|
||||||
|
// faces
|
||||||
|
const vector sunDir = directHitFaces_.direction();
|
||||||
|
const labelList& directHits = directHitFaces_.rayStartFaces();
|
||||||
|
|
||||||
|
globalIndex globalNumbering(mesh_.nFaces());
|
||||||
|
|
||||||
|
Map<label> refFacesDirIndex;
|
||||||
|
labelList refDisDirsIndex(nRay_, -1);
|
||||||
|
|
||||||
|
forAll(patches, patchI)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = patches[patchI];
|
||||||
|
|
||||||
|
if (!pp.coupled() && !isA<cyclicAMIPolyPatch>(pp))
|
||||||
|
{
|
||||||
|
const tmp<scalarField> tr =
|
||||||
|
boundaryRadiation.specReflectivity(patchI);
|
||||||
|
|
||||||
|
const scalarField& r = tr();
|
||||||
|
const vectorField n(fvPatches[patchI].nf());
|
||||||
|
|
||||||
|
forAll(pp, faceI)
|
||||||
|
{
|
||||||
|
label globalID = faceI + pp.start();
|
||||||
|
|
||||||
|
if (r[faceI] > 0.0 && directHits.found(globalID))
|
||||||
|
{
|
||||||
|
vector refDir =
|
||||||
|
sunDir + 2.0*(-sunDir & n[faceI]) * n[faceI];
|
||||||
|
|
||||||
|
// Look for the discrete direction
|
||||||
|
scalar dev(-GREAT);
|
||||||
|
label rayIndex = -1;
|
||||||
|
forAll(refDiscAngles_, iDisc)
|
||||||
|
{
|
||||||
|
scalar dotProd = refDir & refDiscAngles_[iDisc];
|
||||||
|
if (dev < dotProd)
|
||||||
|
{
|
||||||
|
dev = dotProd;
|
||||||
|
rayIndex = iDisc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rayIndex >= 0)
|
||||||
|
{
|
||||||
|
if (refDisDirsIndex[rayIndex] == -1)
|
||||||
|
{
|
||||||
|
refDisDirsIndex[rayIndex] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
refFacesDirIndex.insert
|
||||||
|
(
|
||||||
|
globalNumbering.toGlobal(globalID),
|
||||||
|
rayIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
nFaces++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Distribute ray indexes to all proc's
|
||||||
|
Pstream::listCombineGather(refDisDirsIndex, maxEqOp<label>());
|
||||||
|
Pstream::listCombineScatter(refDisDirsIndex);
|
||||||
|
|
||||||
|
// Make sure all the processors have the same map
|
||||||
|
Pstream::mapCombineGather(refFacesDirIndex, minEqOp<label>());
|
||||||
|
Pstream::mapCombineScatter(refFacesDirIndex);
|
||||||
|
|
||||||
|
scalar maxBounding = 5.0*mag(mesh_.bounds().max() - mesh_.bounds().min());
|
||||||
|
|
||||||
|
reduce(maxBounding, maxOp<scalar>());
|
||||||
|
|
||||||
|
// Shoot Rays
|
||||||
|
// From faces t = 0, r = 0 and a > 0 to all 'used' discrete reflected
|
||||||
|
// directions
|
||||||
|
|
||||||
|
DynamicField<point> start(nFaces);
|
||||||
|
DynamicField<point> end(start.size());
|
||||||
|
DynamicList<label> startIndex(start.size());
|
||||||
|
DynamicField<label> dirStartIndex(start.size());
|
||||||
|
|
||||||
|
label i = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
for (; i < Cfs_->size(); i++)
|
||||||
|
{
|
||||||
|
const point& fc = Cfs_()[i];
|
||||||
|
|
||||||
|
const label myFaceId = shootFacesIds_()[i];
|
||||||
|
|
||||||
|
forAll (refDisDirsIndex, dirIndex)
|
||||||
|
{
|
||||||
|
if (refDisDirsIndex[dirIndex] > -1)
|
||||||
|
{
|
||||||
|
const vector direction = -refDiscAngles_[dirIndex];
|
||||||
|
|
||||||
|
start.append(fc + 0.001*direction);
|
||||||
|
|
||||||
|
startIndex.append(myFaceId);
|
||||||
|
dirStartIndex.append(dirIndex);
|
||||||
|
|
||||||
|
end.append(fc + maxBounding*direction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}while (returnReduce(i < Cfs_->size(), orOp<bool>()));
|
||||||
|
|
||||||
|
List<pointIndexHit> hitInfo(startIndex.size());
|
||||||
|
|
||||||
|
surfacesMesh_->findLine(start, end, hitInfo);
|
||||||
|
|
||||||
|
// Query the local trigId on hit faces
|
||||||
|
labelList triangleIndex;
|
||||||
|
autoPtr<mapDistribute> mapPtr
|
||||||
|
(
|
||||||
|
surfacesMesh_->localQueries
|
||||||
|
(
|
||||||
|
hitInfo,
|
||||||
|
triangleIndex
|
||||||
|
)
|
||||||
|
);
|
||||||
|
const mapDistribute& map = mapPtr();
|
||||||
|
|
||||||
|
List<scalarField> r(nBands);
|
||||||
|
labelList refDirIndex(triangleIndex.size());
|
||||||
|
|
||||||
|
for (label bandI = 0; bandI < nBands; bandI++)
|
||||||
|
{
|
||||||
|
r[bandI].setSize(triangleIndex.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
PtrList<List<scalarField> > patchr(patches.size());
|
||||||
|
PtrList<List<scalarField> > patcha(patches.size());
|
||||||
|
forAll (patchr, patchi)
|
||||||
|
{
|
||||||
|
patchr.set
|
||||||
|
(
|
||||||
|
patchi,
|
||||||
|
new List<scalarField>(nBands)
|
||||||
|
);
|
||||||
|
|
||||||
|
patcha.set
|
||||||
|
(
|
||||||
|
patchi,
|
||||||
|
new List<scalarField>(nBands)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill patchr
|
||||||
|
forAll (patchr, patchi)
|
||||||
|
{
|
||||||
|
for (label bandI = 0; bandI < nBands; bandI++)
|
||||||
|
{
|
||||||
|
patchr[patchi][bandI] =
|
||||||
|
boundaryRadiation.specReflectivity
|
||||||
|
(
|
||||||
|
patchi,
|
||||||
|
bandI,
|
||||||
|
new vectorField(patches[patchi].size(), sunDir)
|
||||||
|
);
|
||||||
|
|
||||||
|
patcha[patchi][bandI] =
|
||||||
|
boundaryRadiation.absorptivity
|
||||||
|
(
|
||||||
|
patchi,
|
||||||
|
bandI,
|
||||||
|
new vectorField(patches[patchi].size(), sunDir)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(triangleIndex, i)
|
||||||
|
{
|
||||||
|
label trii = triangleIndex[i];
|
||||||
|
label facei = mapTriToGlobal_[trii];
|
||||||
|
label patchI = patches.whichPatch(facei);
|
||||||
|
const polyPatch& pp = patches[patchI];
|
||||||
|
label localFaceI = pp.whichFace(facei);
|
||||||
|
|
||||||
|
label globalFace = globalNumbering.toGlobal(Pstream::myProcNo(), facei);
|
||||||
|
if (refFacesDirIndex.found(globalFace))
|
||||||
|
{
|
||||||
|
refDirIndex[i] = refFacesDirIndex.find(globalFace)();
|
||||||
|
}
|
||||||
|
for (label bandI = 0; bandI < nBands; bandI++)
|
||||||
|
{
|
||||||
|
r[bandI][i] = patchr[patchI][bandI][localFaceI];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
map.reverseDistribute(hitInfo.size(), refDirIndex);
|
||||||
|
for (label bandI = 0; bandI < nBands; bandI++)
|
||||||
|
{
|
||||||
|
map.reverseDistribute(hitInfo.size(), r[bandI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (label bandI = 0; bandI < nBands; bandI++)
|
||||||
|
{
|
||||||
|
volScalarField::Boundary& qrefBf =
|
||||||
|
qreflective_[bandI].boundaryFieldRef();
|
||||||
|
qrefBf = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const vector qPrim(solarCalc_.directSolarRad()*solarCalc_.direction());
|
||||||
|
|
||||||
|
// Collect rays with a hit (hitting reflecting surfaces)
|
||||||
|
// and whose reflected direction are equal to the shot ray
|
||||||
|
forAll(hitInfo, rayI)
|
||||||
|
{
|
||||||
|
if (hitInfo[rayI].hit())
|
||||||
|
{
|
||||||
|
if (dirStartIndex[rayI]==refDirIndex[rayI])
|
||||||
|
{
|
||||||
|
for (label bandI = 0; bandI < nBands; bandI++)
|
||||||
|
{
|
||||||
|
volScalarField::Boundary& qrefBf =
|
||||||
|
qreflective_[bandI].boundaryFieldRef();
|
||||||
|
|
||||||
|
label startFaceId = startIndex[rayI];
|
||||||
|
label startPatchI = patches.whichPatch(startFaceId);
|
||||||
|
|
||||||
|
const polyPatch& ppStart = patches[startPatchI];
|
||||||
|
label localStartFaceI = ppStart.whichFace(startFaceId);
|
||||||
|
|
||||||
|
scalar a = patcha[startPatchI][bandI][localStartFaceI];
|
||||||
|
|
||||||
|
const vectorField& nStart = ppStart.faceNormals();
|
||||||
|
|
||||||
|
qrefBf[startPatchI][localStartFaceI] +=
|
||||||
|
(qPrim*r[bandI][rayI]*spectralDistribution_[bandI]*a)
|
||||||
|
& nStart[localStartFaceI];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start.clear();
|
||||||
|
startIndex.clear();
|
||||||
|
end.clear();
|
||||||
|
dirStartIndex.clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::faceReflecting::faceReflecting
|
||||||
|
(
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const faceShading& directHiyFaces,
|
||||||
|
const solarCalculator& solar,
|
||||||
|
const scalarList& spectralDistribution,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mesh_(mesh),
|
||||||
|
nTheta_(dict.subDict("reflecting").lookupOrDefault<label>("nTheta", 10)),
|
||||||
|
nPhi_(dict.subDict("reflecting").lookupOrDefault<label>("nPhi", 10)),
|
||||||
|
nRay_(0),
|
||||||
|
refDiscAngles_(0),
|
||||||
|
spectralDistribution_(spectralDistribution),
|
||||||
|
qreflective_(spectralDistribution_.size()),
|
||||||
|
directHitFaces_(directHiyFaces),
|
||||||
|
surfacesMesh_(),
|
||||||
|
shootFacesIds_(),
|
||||||
|
Cfs_(),
|
||||||
|
solarCalc_(solar),
|
||||||
|
includePatches_(),
|
||||||
|
mapTriToGlobal_()
|
||||||
|
{
|
||||||
|
initialise(dict);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::faceReflecting::~faceReflecting()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::faceReflecting::correct()
|
||||||
|
{
|
||||||
|
calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,166 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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::faceReflecting
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
Calculates the reflecting faces from specular surfaces. It only
|
||||||
|
takes into account the first reflection coming from a surface hit
|
||||||
|
by the primary Sun hit faces.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
faceReflecting.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef faceReflecting_H
|
||||||
|
#define faceReflecting_H
|
||||||
|
|
||||||
|
#include "fvMesh.H"
|
||||||
|
#include "wallPolyPatch.H"
|
||||||
|
#include "triSurfaceTools.H"
|
||||||
|
#include "vectorList.H"
|
||||||
|
#include "distributedTriSurfaceMesh.H"
|
||||||
|
#include "faceShading.H"
|
||||||
|
#include "solarCalculator.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class faceReflecting Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class faceReflecting
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Reference to mesh
|
||||||
|
const fvMesh& mesh_;
|
||||||
|
|
||||||
|
//- Number of solid angles in theta
|
||||||
|
label nTheta_;
|
||||||
|
|
||||||
|
//- Number of solid angles in phi
|
||||||
|
label nPhi_ ;
|
||||||
|
|
||||||
|
//- Total number of rays (1 per direction)
|
||||||
|
label nRay_;
|
||||||
|
|
||||||
|
//- Discretised angles for reflected rays
|
||||||
|
vectorList refDiscAngles_;
|
||||||
|
|
||||||
|
//- Spectral distribution for the integrated solar heat flux
|
||||||
|
const scalarList& spectralDistribution_;
|
||||||
|
|
||||||
|
//- Net reflected radiative heat flux [W/m2]
|
||||||
|
PtrList<volScalarField> qreflective_;
|
||||||
|
|
||||||
|
//- Primary hits faces
|
||||||
|
const faceShading& directHitFaces_;
|
||||||
|
|
||||||
|
//- Distributed surface for ray tracing
|
||||||
|
autoPtr<distributedTriSurfaceMesh> surfacesMesh_;
|
||||||
|
|
||||||
|
//- Faces from which rays are shot
|
||||||
|
autoPtr<labelList> shootFacesIds_;
|
||||||
|
|
||||||
|
//- Face centres from which rays are shot
|
||||||
|
autoPtr<pointField> Cfs_;
|
||||||
|
|
||||||
|
//- Solar calculator
|
||||||
|
const solarCalculator& solarCalc_;
|
||||||
|
|
||||||
|
//- Shooting rays pacthes
|
||||||
|
labelHashSet includePatches_;
|
||||||
|
|
||||||
|
//- Map from triSurface Index to global
|
||||||
|
labelList mapTriToGlobal_;
|
||||||
|
|
||||||
|
// Private members
|
||||||
|
|
||||||
|
//- Calculate ray start faces
|
||||||
|
void calculate();
|
||||||
|
|
||||||
|
//- Initialise model
|
||||||
|
void initialise(const dictionary& dict);
|
||||||
|
|
||||||
|
|
||||||
|
//- No copy construct
|
||||||
|
faceReflecting(const faceReflecting&) = delete;
|
||||||
|
|
||||||
|
//- No copy assignment
|
||||||
|
void operator=(const faceReflecting&) = delete;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Declare name of the class and its debug switch
|
||||||
|
ClassName("faceReflecting");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
faceReflecting
|
||||||
|
(
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const faceShading& directHiyFaces,
|
||||||
|
const solarCalculator& ,
|
||||||
|
const scalarList& spectralDistribution,
|
||||||
|
const dictionary& dict
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
~faceReflecting();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Const access to qreflective
|
||||||
|
const volScalarField& qreflective(const label bandI) const
|
||||||
|
{
|
||||||
|
return qreflective_[bandI];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//- Correct reflected flux
|
||||||
|
void correct();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd |
|
\\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
| Copyright (C) 2015 OpenFOAM Foundation
|
| Copyright (C) 2015 OpenFOAM Foundation
|
||||||
|
|||||||
@ -34,6 +34,10 @@ License
|
|||||||
#include "cyclicAMIPolyPatch.H"
|
#include "cyclicAMIPolyPatch.H"
|
||||||
#include "mappedPatchBase.H"
|
#include "mappedPatchBase.H"
|
||||||
#include "wallPolyPatch.H"
|
#include "wallPolyPatch.H"
|
||||||
|
#include "constants.H"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace Foam::constant;
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -46,11 +50,36 @@ namespace Foam
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const Foam::word Foam::radiation::solarLoad::viewFactorWalls = "viewFactorWall";
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::radiation::solarLoad::updateReflectedRays()
|
||||||
|
{
|
||||||
|
if (reflectedFaces_.empty() && !hitFaces_.empty())
|
||||||
|
{
|
||||||
|
reflectedFaces_.reset
|
||||||
|
(
|
||||||
|
new faceReflecting
|
||||||
|
(
|
||||||
|
mesh_,
|
||||||
|
hitFaces_(),
|
||||||
|
solarCalc_,
|
||||||
|
spectralDistribution_,
|
||||||
|
dict_
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
reflectedFaces_->correct();
|
||||||
|
|
||||||
|
volScalarField::Boundary& qrBf = qr_.boundaryFieldRef();
|
||||||
|
|
||||||
|
for (label bandI = 0; bandI < nBands_; bandI++)
|
||||||
|
{
|
||||||
|
qrBf += reflectedFaces_->qreflective(bandI).boundaryField();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::radiation::solarLoad::updateHitFaces()
|
bool Foam::radiation::solarLoad::updateHitFaces()
|
||||||
{
|
{
|
||||||
if (hitFaces_.empty())
|
if (hitFaces_.empty())
|
||||||
@ -122,38 +151,50 @@ void Foam::radiation::solarLoad::updateDirectHitRadiation
|
|||||||
const scalarField& V = mesh_.V();
|
const scalarField& V = mesh_.V();
|
||||||
volScalarField::Boundary& qrBf = qr_.boundaryFieldRef();
|
volScalarField::Boundary& qrBf = qr_.boundaryFieldRef();
|
||||||
|
|
||||||
forAll(hitFacesId, i)
|
// Reset qr and qrPrimary
|
||||||
|
qrBf = 0.0;
|
||||||
|
|
||||||
|
for (label bandI = 0; bandI < nBands_; bandI++)
|
||||||
{
|
{
|
||||||
const label faceI = hitFacesId[i];
|
volScalarField::Boundary& qprimaryBf =
|
||||||
label patchID = patches.whichPatch(faceI);
|
qprimaryRad_[bandI].boundaryFieldRef();
|
||||||
const polyPatch& pp = patches[patchID];
|
|
||||||
const label localFaceI = faceI - pp.start();
|
|
||||||
const vector qPrim = solarCalc_.directSolarRad()*solarCalc_.direction();
|
|
||||||
|
|
||||||
if (includeMappedPatchBasePatches[patchID])
|
qprimaryBf = 0.0;
|
||||||
|
|
||||||
|
forAll(hitFacesId, i)
|
||||||
{
|
{
|
||||||
const vectorField n = pp.faceNormals();
|
const label faceI = hitFacesId[i];
|
||||||
|
label patchID = patches.whichPatch(faceI);
|
||||||
|
const polyPatch& pp = patches[patchID];
|
||||||
|
const label localFaceI = faceI - pp.start();
|
||||||
|
const vector qPrim =
|
||||||
|
solarCalc_.directSolarRad()*solarCalc_.direction();
|
||||||
|
|
||||||
|
const vectorField& n = pp.faceNormals();
|
||||||
|
|
||||||
for (label bandI = 0; bandI < nBands_; bandI++)
|
|
||||||
{
|
{
|
||||||
qrBf[patchID][localFaceI] +=
|
qprimaryBf[patchID][localFaceI] +=
|
||||||
(qPrim & n[localFaceI])
|
(qPrim & n[localFaceI])
|
||||||
* spectralDistribution_[bandI]
|
* spectralDistribution_[bandI]
|
||||||
* absorptivity_[patchID][bandI]()[localFaceI];
|
* absorptivity_[patchID][bandI]()[localFaceI];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const vectorField& sf = mesh_.Sf().boundaryField()[patchID];
|
|
||||||
const label cellI = pp.faceCells()[localFaceI];
|
|
||||||
|
|
||||||
for (label bandI = 0; bandI < nBands_; bandI++)
|
if (includeMappedPatchBasePatches[patchID])
|
||||||
{
|
{
|
||||||
Ru_[cellI] +=
|
qrBf[patchID][localFaceI] += qprimaryBf[patchID][localFaceI];
|
||||||
(qPrim & sf[localFaceI])
|
}
|
||||||
* spectralDistribution_[bandI]
|
else
|
||||||
* absorptivity_[patchID][bandI]()[localFaceI]
|
{
|
||||||
/ V[cellI];
|
const vectorField& sf = mesh_.Sf().boundaryField()[patchID];
|
||||||
|
const label cellI = pp.faceCells()[localFaceI];
|
||||||
|
|
||||||
|
{
|
||||||
|
Ru_[cellI] +=
|
||||||
|
(qPrim & sf[localFaceI])
|
||||||
|
* spectralDistribution_[bandI]
|
||||||
|
* absorptivity_[patchID][bandI]()[localFaceI]
|
||||||
|
/ V[cellI];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -296,6 +337,12 @@ void Foam::radiation::solarLoad::updateSkyDiffusiveRadiation
|
|||||||
|
|
||||||
void Foam::radiation::solarLoad::initialise(const dictionary& coeffs)
|
void Foam::radiation::solarLoad::initialise(const dictionary& coeffs)
|
||||||
{
|
{
|
||||||
|
coeffs.readEntry("spectralDistribution", spectralDistribution_);
|
||||||
|
|
||||||
|
nBands_ = spectralDistribution_.size();
|
||||||
|
|
||||||
|
qprimaryRad_.setSize(nBands_);
|
||||||
|
|
||||||
if (coeffs.readIfPresent("gridUp", verticalDir_))
|
if (coeffs.readIfPresent("gridUp", verticalDir_))
|
||||||
{
|
{
|
||||||
verticalDir_.normalise();
|
verticalDir_.normalise();
|
||||||
@ -307,31 +354,28 @@ void Foam::radiation::solarLoad::initialise(const dictionary& coeffs)
|
|||||||
verticalDir_ = (-g/mag(g)).value();
|
verticalDir_ = (-g/mag(g)).value();
|
||||||
}
|
}
|
||||||
|
|
||||||
includePatches_ = mesh_.boundaryMesh().indices(viewFactorWalls);
|
coeffs.readEntry("useReflectedRays", useReflectedRays_);
|
||||||
|
|
||||||
coeffs.readEntry("useVFbeamToDiffuse", useVFbeamToDiffuse_);
|
|
||||||
|
|
||||||
coeffs.readEntry("spectralDistribution", spectralDistribution_);
|
|
||||||
|
|
||||||
spectralDistribution_ =
|
spectralDistribution_ =
|
||||||
spectralDistribution_/sum(spectralDistribution_);
|
spectralDistribution_/sum(spectralDistribution_);
|
||||||
|
|
||||||
nBands_ = spectralDistribution_.size();
|
forAll(qprimaryRad_, bandI)
|
||||||
|
|
||||||
if (useVFbeamToDiffuse_)
|
|
||||||
{
|
{
|
||||||
map_.reset
|
qprimaryRad_.set
|
||||||
(
|
(
|
||||||
new IOmapDistribute
|
bandI,
|
||||||
|
new volScalarField
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"mapDist",
|
"qprimaryRad_" + Foam::name(bandI) ,
|
||||||
mesh_.facesInstance(),
|
mesh_.time().timeName(),
|
||||||
mesh_,
|
mesh_,
|
||||||
IOobject::MUST_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::NO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
)
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -341,7 +385,7 @@ void Foam::radiation::solarLoad::initialise(const dictionary& coeffs)
|
|||||||
coeffs.readIfPresent("updateAbsorptivity", updateAbsorptivity_);
|
coeffs.readIfPresent("updateAbsorptivity", updateAbsorptivity_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void Foam::radiation::solarLoad::calculateQdiff
|
void Foam::radiation::solarLoad::calculateQdiff
|
||||||
(
|
(
|
||||||
const labelHashSet& includePatches,
|
const labelHashSet& includePatches,
|
||||||
@ -393,12 +437,16 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
reduce(totalFVNCoarseFaces, sumOp<label>());
|
reduce(totalFVNCoarseFaces, sumOp<label>());
|
||||||
|
|
||||||
// Calculate weighted absorptivity on coarse patches
|
// Calculate weighted absorptivity on coarse patches
|
||||||
List<scalar> localCoarseRave(nLocalVFCoarseFaces);
|
List<scalar> localCoarseEave(nLocalVFCoarseFaces);
|
||||||
|
List<scalar> localTave(nLocalVFCoarseFaces);
|
||||||
List<scalar> localCoarsePartialArea(nLocalVFCoarseFaces);
|
List<scalar> localCoarsePartialArea(nLocalVFCoarseFaces);
|
||||||
List<vector> localCoarseNorm(nLocalVFCoarseFaces);
|
List<vector> localCoarseNorm(nLocalVFCoarseFaces);
|
||||||
|
|
||||||
scalarField compactCoarseRave(map_->constructSize(), Zero);
|
scalarField compactCoarseEave(map_->constructSize(), 0.0);
|
||||||
scalarField compactCoarsePartialArea(map_->constructSize(), Zero);
|
scalarField compactCoarseTave(map_->constructSize(), 0.0);
|
||||||
|
|
||||||
|
scalarField compactCoarsePartialArea(map_->constructSize(), 0.0);
|
||||||
|
|
||||||
vectorList compactCoarseNorm(map_->constructSize(), Zero);
|
vectorList compactCoarseNorm(map_->constructSize(), Zero);
|
||||||
|
|
||||||
const boundaryRadiationProperties& boundaryRadiation =
|
const boundaryRadiationProperties& boundaryRadiation =
|
||||||
@ -418,29 +466,31 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
const polyPatch& cpp = coarseMesh_->boundaryMesh()[patchID];
|
const polyPatch& cpp = coarseMesh_->boundaryMesh()[patchID];
|
||||||
|
|
||||||
const labelList& agglom = finalAgglom_[patchID];
|
const labelList& agglom = finalAgglom_[patchID];
|
||||||
//if (pp.size() > 0)
|
|
||||||
if (agglom.size() > 0)
|
if (agglom.size() > 0)
|
||||||
{
|
{
|
||||||
label nAgglom = max(agglom) + 1;
|
label nAgglom = max(agglom) + 1;
|
||||||
coarseToFine_[i] = invertOneToMany(nAgglom, agglom);
|
coarseToFine_[i] = invertOneToMany(nAgglom, agglom);
|
||||||
}
|
}
|
||||||
|
|
||||||
scalarField r(pp.size(), Zero);
|
// Weight emissivity by spectral distribution
|
||||||
|
scalarField e(pp.size(), 0.0);
|
||||||
|
|
||||||
for (label bandI = 0; bandI < nBands_; bandI++)
|
for (label bandI = 0; bandI < nBands_; bandI++)
|
||||||
{
|
{
|
||||||
const tmp<scalarField> tr =
|
const tmp<scalarField> te =
|
||||||
spectralDistribution_[bandI]
|
spectralDistribution_[bandI]
|
||||||
*boundaryRadiation.reflectivity(patchID, bandI);
|
*boundaryRadiation.diffReflectivity(patchID, bandI);
|
||||||
r += tr();
|
e += te();
|
||||||
}
|
}
|
||||||
|
|
||||||
scalarList Rave(cpp.size(), Zero);
|
scalarList Eave(cpp.size(), 0.0);
|
||||||
scalarList area(cpp.size(), Zero);
|
scalarList Tave(cpp.size(), 0.0);
|
||||||
|
|
||||||
const scalarField& sf = mesh_.magSf().boundaryField()[patchID];
|
const scalarField& sf = mesh_.magSf().boundaryField()[patchID];
|
||||||
|
const scalarField& Tf = T_.boundaryField()[patchID];
|
||||||
|
|
||||||
const labelList& coarsePatchFace =
|
const labelList& coarsePatchFace=coarseMesh_->patchFaceMap()[patchID];
|
||||||
coarseMesh_->patchFaceMap()[patchID];
|
|
||||||
|
|
||||||
forAll(cpp, coarseI)
|
forAll(cpp, coarseI)
|
||||||
{
|
{
|
||||||
@ -460,18 +510,25 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
{
|
{
|
||||||
fullArea += sf[faceI];
|
fullArea += sf[faceI];
|
||||||
}
|
}
|
||||||
Rave[coarseI] += (r[faceI]*sf[faceI])/fineArea;
|
Eave[coarseI] += (e[faceI]*sf[faceI])/fineArea;
|
||||||
|
Tave[coarseI] += (pow4(Tf[faceI])*sf[faceI])/fineArea;
|
||||||
}
|
}
|
||||||
localCoarsePartialArea[compactI++] = fullArea/fineArea;
|
localCoarsePartialArea[compactI++] = fullArea/fineArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
SubList<scalar>
|
SubList<scalar>
|
||||||
(
|
(
|
||||||
localCoarseRave,
|
localCoarseEave,
|
||||||
Rave.size(),
|
Eave.size(),
|
||||||
startI
|
startI
|
||||||
) = Rave;
|
) = Eave;
|
||||||
|
|
||||||
|
SubList<scalar>
|
||||||
|
(
|
||||||
|
localTave,
|
||||||
|
Tave.size(),
|
||||||
|
startI
|
||||||
|
) = Tave;
|
||||||
|
|
||||||
const vectorList coarseNSf = cpp.faceNormals();
|
const vectorList coarseNSf = cpp.faceNormals();
|
||||||
SubList<vector>
|
SubList<vector>
|
||||||
@ -480,6 +537,7 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
cpp.size(),
|
cpp.size(),
|
||||||
startI
|
startI
|
||||||
) = coarseNSf;
|
) = coarseNSf;
|
||||||
|
|
||||||
startI += cpp.size();
|
startI += cpp.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,14 +545,18 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
SubList<scalar>(compactCoarsePartialArea, nLocalVFCoarseFaces) =
|
SubList<scalar>(compactCoarsePartialArea, nLocalVFCoarseFaces) =
|
||||||
localCoarsePartialArea;
|
localCoarsePartialArea;
|
||||||
|
|
||||||
SubList<scalar>(compactCoarseRave, nLocalVFCoarseFaces) =
|
SubList<scalar>(compactCoarseEave, nLocalVFCoarseFaces) =
|
||||||
localCoarseRave;
|
localCoarseEave;
|
||||||
|
|
||||||
|
SubList<scalar>(compactCoarseTave, nLocalVFCoarseFaces) =
|
||||||
|
localTave;
|
||||||
|
|
||||||
SubList<vector>(compactCoarseNorm, nLocalVFCoarseFaces) =
|
SubList<vector>(compactCoarseNorm, nLocalVFCoarseFaces) =
|
||||||
localCoarseNorm;
|
localCoarseNorm;
|
||||||
|
|
||||||
map_->distribute(compactCoarsePartialArea);
|
map_->distribute(compactCoarsePartialArea);
|
||||||
map_->distribute(compactCoarseRave);
|
map_->distribute(compactCoarseEave);
|
||||||
|
map_->distribute(compactCoarseTave);
|
||||||
map_->distribute(compactCoarseNorm);
|
map_->distribute(compactCoarseNorm);
|
||||||
|
|
||||||
|
|
||||||
@ -511,7 +573,9 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
const labelList& coarsePatchFace = coarseMesh_->patchFaceMap()[patchID];
|
const labelList& coarsePatchFace = coarseMesh_->patchFaceMap()[patchID];
|
||||||
const scalarField& sf = mesh_.magSf().boundaryField()[patchID];
|
const scalarField& sf = mesh_.magSf().boundaryField()[patchID];
|
||||||
|
|
||||||
|
|
||||||
scalarField a(ppf.size(), Zero);
|
scalarField a(ppf.size(), Zero);
|
||||||
|
|
||||||
for (label bandI = 0; bandI < nBands_; bandI++)
|
for (label bandI = 0; bandI < nBands_; bandI++)
|
||||||
{
|
{
|
||||||
const tmp<scalarField> ta =
|
const tmp<scalarField> ta =
|
||||||
@ -527,6 +591,7 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
UIndirectList<scalar> fineSf(sf, fineFaces);
|
UIndirectList<scalar> fineSf(sf, fineFaces);
|
||||||
scalar fineArea = sum(fineSf());
|
scalar fineArea = sum(fineSf());
|
||||||
|
|
||||||
|
// // Weighting absorptivity per area on secondary diffussive flux
|
||||||
scalar aAve = 0.0;
|
scalar aAve = 0.0;
|
||||||
forAll(fineFaces, j)
|
forAll(fineFaces, j)
|
||||||
{
|
{
|
||||||
@ -541,14 +606,22 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
{
|
{
|
||||||
label compactI = compactFaces[j];
|
label compactI = compactFaces[j];
|
||||||
|
|
||||||
localqDiffusive[locaFaceI] +=
|
scalar qin =
|
||||||
compactCoarsePartialArea[compactI]
|
(
|
||||||
* aAve
|
solarCalc_.directSolarRad()*solarCalc_.direction()
|
||||||
* (solarCalc_.directSolarRad()*solarCalc_.direction())
|
& compactCoarseNorm[compactI]
|
||||||
& compactCoarseNorm[compactI]
|
)*compactCoarsePartialArea[compactI];
|
||||||
* vf[j]
|
|
||||||
* compactCoarseRave[compactI];
|
|
||||||
|
|
||||||
|
// q emission
|
||||||
|
scalar qem =
|
||||||
|
compactCoarseEave[compactI]
|
||||||
|
*physicoChemical::sigma.value()
|
||||||
|
*compactCoarseTave[compactI];
|
||||||
|
|
||||||
|
// compactCoarseEave is the diffussive reflected coeff
|
||||||
|
scalar qDiff = (compactCoarseEave[compactI])*qin;
|
||||||
|
|
||||||
|
localqDiffusive[locaFaceI] += (qDiff)*aAve*vf[j];
|
||||||
}
|
}
|
||||||
locaFaceI++;
|
locaFaceI++;
|
||||||
}
|
}
|
||||||
@ -608,26 +681,14 @@ void Foam::radiation::solarLoad::calculateQdiff
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::solarLoad::solarLoad(const volScalarField& T)
|
Foam::radiation::solarLoad::solarLoad(const volScalarField& T)
|
||||||
:
|
:
|
||||||
radiationModel(typeName, T),
|
radiationModel(typeName, T),
|
||||||
finalAgglom_
|
dict_(coeffs_),
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"finalAgglom",
|
|
||||||
mesh_.facesInstance(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
),
|
|
||||||
coarseMesh_(),
|
|
||||||
qr_
|
qr_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -641,20 +702,8 @@ Foam::radiation::solarLoad::solarLoad(const volScalarField& T)
|
|||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
||||||
),
|
),
|
||||||
qsecondRad_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"qsecondRad",
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
|
||||||
),
|
|
||||||
hitFaces_(),
|
hitFaces_(),
|
||||||
|
reflectedFaces_(),
|
||||||
Ru_
|
Ru_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -668,26 +717,12 @@ Foam::radiation::solarLoad::solarLoad(const volScalarField& T)
|
|||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
||||||
),
|
),
|
||||||
solarCalc_(this->subDict(typeName + "Coeffs"), mesh_),
|
solarCalc_(coeffs_, mesh_),
|
||||||
verticalDir_(Zero),
|
verticalDir_(Zero),
|
||||||
useVFbeamToDiffuse_(false),
|
useReflectedRays_(false),
|
||||||
includePatches_(mesh_.boundary().size(), -1),
|
spectralDistribution_(),
|
||||||
coarseToFine_(),
|
nBands_(0),
|
||||||
nBands_(1),
|
qprimaryRad_(0),
|
||||||
spectralDistribution_(nBands_),
|
|
||||||
map_(),
|
|
||||||
visibleFaceFaces_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"visibleFaceFaces",
|
|
||||||
mesh_.facesInstance(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
),
|
|
||||||
solidCoupled_(true),
|
solidCoupled_(true),
|
||||||
absorptivity_(mesh_.boundaryMesh().size()),
|
absorptivity_(mesh_.boundaryMesh().size()),
|
||||||
updateAbsorptivity_(false),
|
updateAbsorptivity_(false),
|
||||||
@ -705,19 +740,7 @@ Foam::radiation::solarLoad::solarLoad
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
radiationModel(typeName, dict, T),
|
radiationModel(typeName, dict, T),
|
||||||
finalAgglom_
|
dict_(dict),
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"finalAgglom",
|
|
||||||
mesh_.facesInstance(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
),
|
|
||||||
coarseMesh_(),
|
|
||||||
qr_
|
qr_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -731,112 +754,8 @@ Foam::radiation::solarLoad::solarLoad
|
|||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
||||||
),
|
),
|
||||||
qsecondRad_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"qsecondRad",
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
|
||||||
),
|
|
||||||
hitFaces_(),
|
|
||||||
Ru_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"Ru",
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
|
||||||
),
|
|
||||||
solarCalc_(coeffs_, mesh_),
|
|
||||||
verticalDir_(Zero),
|
|
||||||
useVFbeamToDiffuse_(false),
|
|
||||||
includePatches_(mesh_.boundary().size(), -1),
|
|
||||||
coarseToFine_(),
|
|
||||||
nBands_(1),
|
|
||||||
spectralDistribution_(nBands_),
|
|
||||||
map_(),
|
|
||||||
visibleFaceFaces_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"visibleFaceFaces",
|
|
||||||
mesh_.facesInstance(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
),
|
|
||||||
solidCoupled_(true),
|
|
||||||
wallCoupled_(false),
|
|
||||||
absorptivity_(mesh_.boundaryMesh().size()),
|
|
||||||
updateAbsorptivity_(false),
|
|
||||||
firstIter_(true),
|
|
||||||
updateTimeIndex_(0)
|
|
||||||
{
|
|
||||||
initialise(coeffs_);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::radiation::solarLoad::solarLoad
|
|
||||||
(
|
|
||||||
const dictionary& dict,
|
|
||||||
const volScalarField& T,
|
|
||||||
const word radWallFieldName
|
|
||||||
)
|
|
||||||
:
|
|
||||||
radiationModel("none", T),
|
|
||||||
finalAgglom_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"finalAgglom",
|
|
||||||
mesh_.facesInstance(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
),
|
|
||||||
coarseMesh_(),
|
|
||||||
qr_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
radWallFieldName,
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
|
||||||
),
|
|
||||||
qsecondRad_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"qsecondRad",
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar(dimMass/pow3(dimTime), Zero)
|
|
||||||
),
|
|
||||||
hitFaces_(),
|
hitFaces_(),
|
||||||
|
reflectedFaces_(),
|
||||||
Ru_
|
Ru_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -852,34 +771,20 @@ Foam::radiation::solarLoad::solarLoad
|
|||||||
),
|
),
|
||||||
solarCalc_(dict, mesh_),
|
solarCalc_(dict, mesh_),
|
||||||
verticalDir_(Zero),
|
verticalDir_(Zero),
|
||||||
useVFbeamToDiffuse_(false),
|
useReflectedRays_(false),
|
||||||
includePatches_(mesh_.boundary().size(), -1),
|
spectralDistribution_(),
|
||||||
coarseToFine_(),
|
nBands_(0),
|
||||||
nBands_(1),
|
qprimaryRad_(0),
|
||||||
spectralDistribution_(nBands_),
|
|
||||||
map_(),
|
|
||||||
visibleFaceFaces_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"visibleFaceFaces",
|
|
||||||
mesh_.facesInstance(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
),
|
|
||||||
solidCoupled_(true),
|
solidCoupled_(true),
|
||||||
wallCoupled_(false),
|
wallCoupled_(false),
|
||||||
absorptivity_(mesh_.boundaryMesh().size()),
|
absorptivity_(mesh_.boundaryMesh().size()),
|
||||||
updateAbsorptivity_(false),
|
updateAbsorptivity_(false),
|
||||||
firstIter_(true)
|
firstIter_(true),
|
||||||
|
updateTimeIndex_(0)
|
||||||
{
|
{
|
||||||
initialise(dict);
|
initialise(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::solarLoad::~solarLoad()
|
Foam::radiation::solarLoad::~solarLoad()
|
||||||
@ -938,13 +843,11 @@ void Foam::radiation::solarLoad::calculate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool facesChanged = updateHitFaces();
|
bool facesChanged = updateHitFaces();
|
||||||
volScalarField::Boundary& qrBf = qr_.boundaryFieldRef();
|
|
||||||
|
|
||||||
if (facesChanged)
|
if (facesChanged)
|
||||||
{
|
{
|
||||||
// Reset Ru and qr
|
// Reset Ru
|
||||||
Ru_ = dimensionedScalar("Ru", dimMass/dimLength/pow3(dimTime), Zero);
|
Ru_ = dimensionedScalar("Ru", dimMass/dimLength/pow3(dimTime), Zero);
|
||||||
qrBf = 0.0;
|
|
||||||
|
|
||||||
// Add direct hit radiation
|
// Add direct hit radiation
|
||||||
const labelList& hitFacesId = hitFaces_->rayStartFaces();
|
const labelList& hitFacesId = hitFaces_->rayStartFaces();
|
||||||
@ -957,10 +860,10 @@ void Foam::radiation::solarLoad::calculate()
|
|||||||
includeMappedPatchBasePatches
|
includeMappedPatchBasePatches
|
||||||
);
|
);
|
||||||
|
|
||||||
// Add indirect diffusive radiation
|
// Add specular reflected radiation
|
||||||
if (useVFbeamToDiffuse_)
|
if (useReflectedRays_)
|
||||||
{
|
{
|
||||||
calculateQdiff(includePatches, includeMappedPatchBasePatches);
|
updateReflectedRays();
|
||||||
}
|
}
|
||||||
|
|
||||||
firstIter_ = false;
|
firstIter_ = false;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd |
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
| Copyright (C) 2015 OpenFOAM Foundation
|
| Copyright (C) 2015 OpenFOAM Foundation
|
||||||
@ -35,25 +35,20 @@ Description
|
|||||||
reflective fluxes and diffusive sky radiative fluxes.
|
reflective fluxes and diffusive sky radiative fluxes.
|
||||||
|
|
||||||
The primary hit rays are calculated using a face shading algorithm.
|
The primary hit rays are calculated using a face shading algorithm.
|
||||||
The reflected fluxes are considered diffusive and use a view factors method
|
The first reflected fluxes can be optionally included. A view factors
|
||||||
to deposit the energy on "visible" walls. The sky diffusive radiation for
|
method is needed in order to include diffusive surface to surface fluxes.
|
||||||
horizontal and vertical walls is calculated following the Fair Weather
|
|
||||||
Conditions Method from the ASHRAE Handbook.
|
The energy is included on "visible" walls by default. The sky diffusive radiation for horizontal and vertical walls is calculated following the
|
||||||
|
Fair Weather Conditions Method from the ASHRAE Handbook.
|
||||||
|
|
||||||
By default the energy is included in cells adjacent to the patches into
|
By default the energy is included in cells adjacent to the patches into
|
||||||
the energy Equation (wallCoupled = false). On coupled patches the flux is
|
the energy Equation (wallCoupled = false). On coupled patches the flux is
|
||||||
by default added to the wall and considered into the solid
|
by default added to the wall and considered into the solid
|
||||||
(solidCoupled = true).
|
(solidCoupled = true).
|
||||||
|
|
||||||
The reflected fluxes uses a grey absoprtion/emission model wich is weighted
|
|
||||||
by the spectral distribution. The flag useVFbeamToDiffuse should be
|
|
||||||
switched on and the view factors should be calculated using the
|
|
||||||
'viewFactorsGen' application.
|
|
||||||
|
|
||||||
The solarLoad model can be used in conjuntion with fvDOM and viewFactor
|
The solarLoad model can be used in conjuntion with fvDOM and viewFactor
|
||||||
radiation models but only using a single band spectrum. On the
|
radiation models. The flag useSolarLoad must be true on the rediation
|
||||||
corresponding BC's for these models the flag "solarLoad" must be set to
|
dictionary.
|
||||||
true.
|
|
||||||
|
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
@ -65,12 +60,10 @@ SourceFiles
|
|||||||
#define radiation_solarLoad_H
|
#define radiation_solarLoad_H
|
||||||
|
|
||||||
#include "radiationModel.H"
|
#include "radiationModel.H"
|
||||||
#include "singleCellFvMesh.H"
|
|
||||||
#include "scalarListIOList.H"
|
|
||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "faceShading.H"
|
#include "faceShading.H"
|
||||||
|
#include "faceReflecting.H"
|
||||||
#include "solarCalculator.H"
|
#include "solarCalculator.H"
|
||||||
#include "IOmapDistribute.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -87,35 +80,25 @@ class solarLoad
|
|||||||
:
|
:
|
||||||
public radiationModel
|
public radiationModel
|
||||||
{
|
{
|
||||||
protected:
|
|
||||||
|
|
||||||
// Static data
|
|
||||||
|
|
||||||
//- Static name for view factor walls
|
|
||||||
static const word viewFactorWalls;
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
|
//- Dictionary
|
||||||
//- Agglomeration List
|
dictionary dict_;
|
||||||
labelListIOList finalAgglom_;
|
|
||||||
|
|
||||||
//- Coarse mesh
|
|
||||||
autoPtr<singleCellFvMesh> coarseMesh_;
|
|
||||||
|
|
||||||
//- Net radiative heat flux [W/m2]
|
//- Net radiative heat flux [W/m2]
|
||||||
volScalarField qr_;
|
volScalarField qr_;
|
||||||
|
|
||||||
//- Secondary solar radiative heat flux [W/m2]
|
|
||||||
volScalarField qsecondRad_;
|
|
||||||
|
|
||||||
//- Direct hit faces Ids
|
//- Direct hit faces Ids
|
||||||
autoPtr<faceShading> hitFaces_;
|
autoPtr<faceShading> hitFaces_;
|
||||||
|
|
||||||
//- Constant source term
|
//- Reflected faces
|
||||||
|
autoPtr<faceReflecting> reflectedFaces_;
|
||||||
|
|
||||||
|
//- Source term for cells next to patches with flags solidCoupled
|
||||||
|
// and wallCoupled false
|
||||||
DimensionedField<scalar, volMesh> Ru_;
|
DimensionedField<scalar, volMesh> Ru_;
|
||||||
|
|
||||||
//- Solar calculator
|
//- Solar calculator
|
||||||
@ -124,26 +107,17 @@ private:
|
|||||||
//- Vertical direction (Default is g vector)
|
//- Vertical direction (Default is g vector)
|
||||||
vector verticalDir_;
|
vector verticalDir_;
|
||||||
|
|
||||||
//- Include diffuse reflected heat fluxes from direct heat flux
|
//- Include reflected rays from specular surfaces
|
||||||
bool useVFbeamToDiffuse_;
|
bool useReflectedRays_;
|
||||||
|
|
||||||
//- Selected patches to apply solar load
|
|
||||||
labelList includePatches_;
|
|
||||||
|
|
||||||
//- Cached coarse to fine mapping for coarse mesh
|
|
||||||
List<labelListList> coarseToFine_;
|
|
||||||
|
|
||||||
//-Number of bands
|
|
||||||
label nBands_;
|
|
||||||
|
|
||||||
//- Spectral distribution for the integrated solar heat flux
|
//- Spectral distribution for the integrated solar heat flux
|
||||||
scalarList spectralDistribution_;
|
scalarList spectralDistribution_;
|
||||||
|
|
||||||
//- Map distribute
|
//-Number of bands
|
||||||
autoPtr<IOmapDistribute> map_;
|
label nBands_;
|
||||||
|
|
||||||
//- Face-compact map
|
//- Primary solar radiative heat flux per band [W/m2]
|
||||||
labelListIOList visibleFaceFaces_;
|
PtrList<volScalarField> qprimaryRad_;
|
||||||
|
|
||||||
//- Couple solids through mapped boundary patch using qr (default:true)
|
//- Couple solids through mapped boundary patch using qr (default:true)
|
||||||
bool solidCoupled_;
|
bool solidCoupled_;
|
||||||
@ -173,8 +147,11 @@ private:
|
|||||||
//- Update direct hit faces radiation
|
//- Update direct hit faces radiation
|
||||||
void updateDirectHitRadiation(const labelList&, const labelHashSet&);
|
void updateDirectHitRadiation(const labelList&, const labelHashSet&);
|
||||||
|
|
||||||
|
//- Update reflected heat flux
|
||||||
|
void updateReflectedRays();
|
||||||
|
|
||||||
//- Calculate diffusive heat flux
|
//- Calculate diffusive heat flux
|
||||||
void calculateQdiff(const labelHashSet&, const labelHashSet&);
|
//void calculateQdiff(const labelHashSet&, const labelHashSet&);
|
||||||
|
|
||||||
//- Update Sky diffusive radiation
|
//- Update Sky diffusive radiation
|
||||||
void updateSkyDiffusiveRadiation
|
void updateSkyDiffusiveRadiation
|
||||||
@ -210,15 +187,6 @@ public:
|
|||||||
//- Construct from dictionary and volScalarField
|
//- Construct from dictionary and volScalarField
|
||||||
solarLoad(const dictionary& dict, const volScalarField& T);
|
solarLoad(const dictionary& dict, const volScalarField& T);
|
||||||
|
|
||||||
//- Constructor from local components. Does not create a radiationModel.
|
|
||||||
// radWallFieldName is the solar heat field name
|
|
||||||
solarLoad
|
|
||||||
(
|
|
||||||
const dictionary& dict,
|
|
||||||
const volScalarField& T,
|
|
||||||
const word radWallFieldName
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~solarLoad();
|
virtual ~solarLoad();
|
||||||
@ -245,6 +213,12 @@ public:
|
|||||||
|
|
||||||
//- Number of bands
|
//- Number of bands
|
||||||
label nBands() const;
|
label nBands() const;
|
||||||
|
|
||||||
|
//- Primary solar heat flux
|
||||||
|
const volScalarField& qprimaryRad(const label bandI) const
|
||||||
|
{
|
||||||
|
return qprimaryRad_[bandI];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -193,21 +193,18 @@ void Foam::radiation::viewFactor::initialise()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->readIfPresent("useSolarLoad", useSolarLoad_);
|
coeffs_.readIfPresent("useSolarLoad", useSolarLoad_);
|
||||||
|
|
||||||
if (useSolarLoad_)
|
if (useSolarLoad_)
|
||||||
{
|
{
|
||||||
const dictionary& solarDict = this->subDict("solarLoarCoeffs");
|
const dictionary& solarDict = this->subDict("solarLoadCoeffs");
|
||||||
solarLoad_.reset
|
solarLoad_.reset(new solarLoad(solarDict, T_));
|
||||||
(
|
|
||||||
new solarLoad(solarDict, T_, externalRadHeatFieldName_)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (solarLoad_->nBands() > 1)
|
if (solarLoad_->nBands() != nBands_)
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "Requested solar radiation with fvDOM. Using "
|
<< "Solar radiation and view factor band numbers "
|
||||||
<< "more thant one band for the solar load is not allowed"
|
<< "are different"
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,7 +265,8 @@ Foam::radiation::viewFactor::viewFactor(const volScalarField& T)
|
|||||||
iterCounter_(0),
|
iterCounter_(0),
|
||||||
pivotIndices_(0),
|
pivotIndices_(0),
|
||||||
useSolarLoad_(false),
|
useSolarLoad_(false),
|
||||||
solarLoad_()
|
solarLoad_(),
|
||||||
|
nBands_(coeffs_.lookupOrDefault<label>("nBands", 1))
|
||||||
{
|
{
|
||||||
initialise();
|
initialise();
|
||||||
}
|
}
|
||||||
@ -328,7 +326,8 @@ Foam::radiation::viewFactor::viewFactor
|
|||||||
iterCounter_(0),
|
iterCounter_(0),
|
||||||
pivotIndices_(0),
|
pivotIndices_(0),
|
||||||
useSolarLoad_(false),
|
useSolarLoad_(false),
|
||||||
solarLoad_()
|
solarLoad_(),
|
||||||
|
nBands_(coeffs_.lookupOrDefault<label>("nBands", 1))
|
||||||
{
|
{
|
||||||
initialise();
|
initialise();
|
||||||
}
|
}
|
||||||
@ -386,135 +385,154 @@ void Foam::radiation::viewFactor::calculate()
|
|||||||
solarLoad_->calculate();
|
solarLoad_->calculate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
scalarField compactCoarseT4(map_->constructSize(), Zero);
|
scalarField compactCoarseT4(map_->constructSize(), Zero);
|
||||||
scalarField compactCoarseE(map_->constructSize(), Zero);
|
scalarField compactCoarseE(map_->constructSize(), Zero);
|
||||||
scalarField compactCoarseHo(map_->constructSize(), Zero);
|
scalarField compactCoarseHo(map_->constructSize(), Zero);
|
||||||
|
=======
|
||||||
|
// Net radiation
|
||||||
|
scalarField q(totalNCoarseFaces_, 0.0);
|
||||||
|
volScalarField::Boundary& qrBf = qr_.boundaryFieldRef();
|
||||||
|
>>>>>>> ENH:
|
||||||
|
|
||||||
globalIndex globalNumbering(nLocalCoarseFaces_);
|
globalIndex globalNumbering(nLocalCoarseFaces_);
|
||||||
|
|
||||||
// Fill local averaged(T), emissivity(E) and external heatFlux(Ho)
|
|
||||||
DynamicList<scalar> localCoarseT4ave(nLocalCoarseFaces_);
|
|
||||||
DynamicList<scalar> localCoarseEave(nLocalCoarseFaces_);
|
|
||||||
DynamicList<scalar> localCoarseHoave(nLocalCoarseFaces_);
|
|
||||||
|
|
||||||
const boundaryRadiationProperties& boundaryRadiation =
|
const boundaryRadiationProperties& boundaryRadiation =
|
||||||
boundaryRadiationProperties::New(mesh_);
|
boundaryRadiationProperties::New(mesh_);
|
||||||
|
|
||||||
volScalarField::Boundary& qrBf = qr_.boundaryFieldRef();
|
for (label bandI = 0; bandI < nBands_; bandI++)
|
||||||
|
|
||||||
forAll(selectedPatches_, i)
|
|
||||||
{
|
{
|
||||||
label patchID = selectedPatches_[i];
|
scalarField compactCoarseT4(map_->constructSize(), 0.0);
|
||||||
|
scalarField compactCoarseE(map_->constructSize(), 0.0);
|
||||||
|
scalarField compactCoarseHo(map_->constructSize(), 0.0);
|
||||||
|
|
||||||
const scalarField& Tp = T_.boundaryField()[patchID];
|
// Fill local averaged(T), emissivity(E) and external heatFlux(Ho)
|
||||||
const scalarField& sf = mesh_.magSf().boundaryField()[patchID];
|
DynamicList<scalar> localCoarseT4ave(nLocalCoarseFaces_);
|
||||||
|
DynamicList<scalar> localCoarseEave(nLocalCoarseFaces_);
|
||||||
|
DynamicList<scalar> localCoarseHoave(nLocalCoarseFaces_);
|
||||||
|
|
||||||
fvPatchScalarField& qrPatch = qrBf[patchID];
|
forAll(selectedPatches_, i)
|
||||||
|
{
|
||||||
|
label patchID = selectedPatches_[i];
|
||||||
|
|
||||||
greyDiffusiveViewFactorFixedValueFvPatchScalarField& qrp =
|
const scalarField& Tp = T_.boundaryField()[patchID];
|
||||||
refCast
|
const scalarField& sf = mesh_.magSf().boundaryField()[patchID];
|
||||||
<
|
|
||||||
greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
|
||||||
>(qrPatch);
|
|
||||||
|
|
||||||
const tmp<scalarField> teb = boundaryRadiation.emissivity(patchID);
|
fvPatchScalarField& qrPatch = qrBf[patchID];
|
||||||
const scalarField& eb = teb();
|
|
||||||
|
|
||||||
const tmp<scalarField> tHoi = qrp.qro();
|
greyDiffusiveViewFactorFixedValueFvPatchScalarField& qrp =
|
||||||
const scalarField& Hoi = tHoi();
|
refCast
|
||||||
|
<
|
||||||
|
greyDiffusiveViewFactorFixedValueFvPatchScalarField
|
||||||
|
>(qrPatch);
|
||||||
|
|
||||||
const polyPatch& pp = coarseMesh_.boundaryMesh()[patchID];
|
const tmp<scalarField> teb =
|
||||||
const labelList& coarsePatchFace = coarseMesh_.patchFaceMap()[patchID];
|
boundaryRadiation.emissivity(patchID, bandI);
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
scalarList T4ave(pp.size(), Zero);
|
scalarList T4ave(pp.size(), Zero);
|
||||||
scalarList Eave(pp.size(), Zero);
|
scalarList Eave(pp.size(), Zero);
|
||||||
scalarList Hoiave(pp.size(), Zero);
|
scalarList Hoiave(pp.size(), Zero);
|
||||||
|
=======
|
||||||
|
const scalarField& eb = teb();
|
||||||
|
>>>>>>> ENH:
|
||||||
|
|
||||||
if (pp.size() > 0)
|
const tmp<scalarField> tHoi = qrp.qro(bandI);
|
||||||
{
|
const scalarField& Hoi = tHoi();
|
||||||
const labelList& agglom = finalAgglom_[patchID];
|
|
||||||
label nAgglom = max(agglom) + 1;
|
|
||||||
|
|
||||||
labelListList coarseToFine(invertOneToMany(nAgglom, agglom));
|
const polyPatch& pp = coarseMesh_.boundaryMesh()[patchID];
|
||||||
|
|
||||||
forAll(coarseToFine, coarseI)
|
const labelList& coarsePatchFace =
|
||||||
|
coarseMesh_.patchFaceMap()[patchID];
|
||||||
|
|
||||||
|
scalarList T4ave(pp.size(), 0.0);
|
||||||
|
scalarList Eave(pp.size(), 0.0);
|
||||||
|
scalarList Hoiave(pp.size(), 0.0);
|
||||||
|
|
||||||
|
if (pp.size() > 0)
|
||||||
{
|
{
|
||||||
const label coarseFaceID = coarsePatchFace[coarseI];
|
const labelList& agglom = finalAgglom_[patchID];
|
||||||
const labelList& fineFaces = coarseToFine[coarseFaceID];
|
label nAgglom = max(agglom) + 1;
|
||||||
UIndirectList<scalar> fineSf
|
|
||||||
(
|
|
||||||
sf,
|
|
||||||
fineFaces
|
|
||||||
);
|
|
||||||
|
|
||||||
const scalar area = sum(fineSf());
|
labelListList coarseToFine(invertOneToMany(nAgglom, agglom));
|
||||||
|
|
||||||
// Temperature, emissivity and external flux area weighting
|
forAll(coarseToFine, coarseI)
|
||||||
forAll(fineFaces, j)
|
|
||||||
{
|
{
|
||||||
label facei = fineFaces[j];
|
const label coarseFaceID = coarsePatchFace[coarseI];
|
||||||
T4ave[coarseI] += (pow4(Tp[facei])*sf[facei])/area;
|
const labelList& fineFaces = coarseToFine[coarseFaceID];
|
||||||
Eave[coarseI] += (eb[facei]*sf[facei])/area;
|
UIndirectList<scalar> fineSf
|
||||||
Hoiave[coarseI] += (Hoi[facei]*sf[facei])/area;
|
(
|
||||||
|
sf,
|
||||||
|
fineFaces
|
||||||
|
);
|
||||||
|
|
||||||
|
const scalar area = sum(fineSf());
|
||||||
|
|
||||||
|
// Temperature, emissivity and external flux area weighting
|
||||||
|
forAll(fineFaces, j)
|
||||||
|
{
|
||||||
|
label facei = fineFaces[j];
|
||||||
|
T4ave[coarseI] += (pow4(Tp[facei])*sf[facei])/area;
|
||||||
|
Eave[coarseI] += (eb[facei]*sf[facei])/area;
|
||||||
|
Hoiave[coarseI] += (Hoi[facei]*sf[facei])/area;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
localCoarseT4ave.append(T4ave);
|
||||||
|
localCoarseEave.append(Eave);
|
||||||
|
localCoarseHoave.append(Hoiave);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
localCoarseT4ave.append(T4ave);
|
// Fill the local values to distribute
|
||||||
localCoarseEave.append(Eave);
|
SubList<scalar>(compactCoarseT4, nLocalCoarseFaces_) =
|
||||||
localCoarseHoave.append(Hoiave);
|
localCoarseT4ave;
|
||||||
}
|
SubList<scalar>(compactCoarseE, nLocalCoarseFaces_) = localCoarseEave;
|
||||||
|
SubList<scalar>(compactCoarseHo, nLocalCoarseFaces_) =
|
||||||
// Fill the local values to distribute
|
localCoarseHoave;
|
||||||
SubList<scalar>(compactCoarseT4, nLocalCoarseFaces_) = localCoarseT4ave;
|
|
||||||
SubList<scalar>(compactCoarseE, nLocalCoarseFaces_) = localCoarseEave;
|
|
||||||
SubList<scalar>(compactCoarseHo, nLocalCoarseFaces_) = localCoarseHoave;
|
|
||||||
|
|
||||||
// Distribute data
|
|
||||||
map_->distribute(compactCoarseT4);
|
|
||||||
map_->distribute(compactCoarseE);
|
|
||||||
map_->distribute(compactCoarseHo);
|
|
||||||
|
|
||||||
// Distribute local global ID
|
|
||||||
labelList compactGlobalIds(map_->constructSize(), Zero);
|
|
||||||
|
|
||||||
SubList<label>
|
|
||||||
(
|
|
||||||
compactGlobalIds,
|
|
||||||
nLocalCoarseFaces_
|
|
||||||
) = identity(globalNumbering.localSize(), globalNumbering.localStart());
|
|
||||||
|
|
||||||
map_->distribute(compactGlobalIds);
|
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
// Create global size vectors
|
// Create global size vectors
|
||||||
scalarField T4(totalNCoarseFaces_, Zero);
|
scalarField T4(totalNCoarseFaces_, Zero);
|
||||||
scalarField E(totalNCoarseFaces_, Zero);
|
scalarField E(totalNCoarseFaces_, Zero);
|
||||||
scalarField qrExt(totalNCoarseFaces_, Zero);
|
scalarField qrExt(totalNCoarseFaces_, Zero);
|
||||||
|
=======
|
||||||
|
// Distribute data
|
||||||
|
map_->distribute(compactCoarseT4);
|
||||||
|
map_->distribute(compactCoarseE);
|
||||||
|
map_->distribute(compactCoarseHo);
|
||||||
|
>>>>>>> ENH:
|
||||||
|
|
||||||
// Fill lists from compact to global indexes.
|
// Distribute local global ID
|
||||||
forAll(compactCoarseT4, i)
|
labelList compactGlobalIds(map_->constructSize(), Zero);
|
||||||
{
|
|
||||||
T4[compactGlobalIds[i]] = compactCoarseT4[i];
|
|
||||||
E[compactGlobalIds[i]] = compactCoarseE[i];
|
|
||||||
qrExt[compactGlobalIds[i]] = compactCoarseHo[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
Pstream::listCombineGather(T4, maxEqOp<scalar>());
|
SubList<label>
|
||||||
Pstream::listCombineGather(E, maxEqOp<scalar>());
|
(
|
||||||
Pstream::listCombineGather(qrExt, maxEqOp<scalar>());
|
compactGlobalIds,
|
||||||
|
nLocalCoarseFaces_
|
||||||
|
) = identity
|
||||||
|
(
|
||||||
|
globalNumbering.localSize(),
|
||||||
|
globalNumbering.localStart()
|
||||||
|
);
|
||||||
|
|
||||||
Pstream::listCombineScatter(T4);
|
map_->distribute(compactGlobalIds);
|
||||||
Pstream::listCombineScatter(E);
|
|
||||||
Pstream::listCombineScatter(qrExt);
|
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
// Net radiation
|
// Net radiation
|
||||||
scalarField q(totalNCoarseFaces_, Zero);
|
scalarField q(totalNCoarseFaces_, Zero);
|
||||||
|
=======
|
||||||
|
// Create global size vectors
|
||||||
|
scalarField T4(totalNCoarseFaces_, 0.0);
|
||||||
|
scalarField E(totalNCoarseFaces_, 0.0);
|
||||||
|
scalarField qrExt(totalNCoarseFaces_, 0.0);
|
||||||
|
>>>>>>> ENH:
|
||||||
|
|
||||||
if (Pstream::master())
|
// Fill lists from compact to global indexes.
|
||||||
{
|
forAll(compactCoarseT4, i)
|
||||||
// Variable emissivity
|
|
||||||
if (!constEmissivity_)
|
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
scalarSquareMatrix C(totalNCoarseFaces_, Zero);
|
scalarSquareMatrix C(totalNCoarseFaces_, Zero);
|
||||||
|
|
||||||
for (label i=0; i<totalNCoarseFaces_; i++)
|
for (label i=0; i<totalNCoarseFaces_; i++)
|
||||||
@ -534,74 +552,118 @@ void Foam::radiation::viewFactor::calculate()
|
|||||||
C(i, j) = (1.0 - invEj)*Fmatrix_()(i, j);
|
C(i, j) = (1.0 - invEj)*Fmatrix_()(i, j);
|
||||||
q[i] += Fmatrix_()(i, j)*sigmaT4;
|
q[i] += Fmatrix_()(i, j)*sigmaT4;
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
}
|
T4[compactGlobalIds[i]] = compactCoarseT4[i];
|
||||||
}
|
E[compactGlobalIds[i]] = compactCoarseE[i];
|
||||||
|
qrExt[compactGlobalIds[i]] = compactCoarseHo[i];
|
||||||
Info<< "\nSolving view factor equations..." << endl;
|
|
||||||
|
|
||||||
// Negative coming into the fluid
|
|
||||||
LUsolve(C, q);
|
|
||||||
}
|
}
|
||||||
else //Constant emissivity
|
>>>>>>> ENH:
|
||||||
|
|
||||||
|
Pstream::listCombineGather(T4, maxEqOp<scalar>());
|
||||||
|
Pstream::listCombineGather(E, maxEqOp<scalar>());
|
||||||
|
Pstream::listCombineGather(qrExt, maxEqOp<scalar>());
|
||||||
|
|
||||||
|
Pstream::listCombineScatter(T4);
|
||||||
|
Pstream::listCombineScatter(E);
|
||||||
|
Pstream::listCombineScatter(qrExt);
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
// Initial iter calculates CLU and caches it
|
// Variable emissivity
|
||||||
if (iterCounter_ == 0)
|
if (!constEmissivity_)
|
||||||
{
|
{
|
||||||
|
scalarSquareMatrix C(totalNCoarseFaces_, 0.0);
|
||||||
|
|
||||||
for (label i=0; i<totalNCoarseFaces_; i++)
|
for (label i=0; i<totalNCoarseFaces_; i++)
|
||||||
{
|
{
|
||||||
for (label j=0; j<totalNCoarseFaces_; j++)
|
for (label j=0; j<totalNCoarseFaces_; j++)
|
||||||
{
|
{
|
||||||
const scalar invEj = 1.0/E[j];
|
const scalar invEj = 1.0/E[j];
|
||||||
|
const scalar sigmaT4 =
|
||||||
|
physicoChemical::sigma.value()*T4[j];
|
||||||
|
|
||||||
if (i==j)
|
if (i==j)
|
||||||
{
|
{
|
||||||
CLU_()(i, j) = invEj-(invEj-1.0)*Fmatrix_()(i, j);
|
C(i, j) = invEj - (invEj - 1.0)*Fmatrix_()(i, j);
|
||||||
|
q[i] +=
|
||||||
|
(Fmatrix_()(i, j) - 1.0)*sigmaT4 + qrExt[j];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CLU_()(i, j) = (1.0 - invEj)*Fmatrix_()(i, j);
|
C(i, j) = (1.0 - invEj)*Fmatrix_()(i, j);
|
||||||
|
q[i] += Fmatrix_()(i, j)*sigmaT4;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "Solving view factor equations for band :"
|
||||||
|
<< bandI << endl;
|
||||||
|
|
||||||
|
// Negative coming into the fluid
|
||||||
|
LUsolve(C, q);
|
||||||
|
}
|
||||||
|
else //Constant emissivity
|
||||||
|
{
|
||||||
|
// Initial iter calculates CLU and caches it
|
||||||
|
if (iterCounter_ == 0)
|
||||||
|
{
|
||||||
|
for (label i=0; i<totalNCoarseFaces_; i++)
|
||||||
|
{
|
||||||
|
for (label j=0; j<totalNCoarseFaces_; j++)
|
||||||
|
{
|
||||||
|
const scalar invEj = 1.0/E[j];
|
||||||
|
if (i==j)
|
||||||
|
{
|
||||||
|
CLU_()(i, j) =
|
||||||
|
invEj-(invEj-1.0)*Fmatrix_()(i, j);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CLU_()(i, j) = (1.0 - invEj)*Fmatrix_()(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
InfoInFunction
|
||||||
|
<< "\nDecomposing C matrix..." << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUDecompose(CLU_(), pivotIndices_);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (label i=0; i<totalNCoarseFaces_; i++)
|
||||||
|
{
|
||||||
|
for (label j=0; j<totalNCoarseFaces_; j++)
|
||||||
|
{
|
||||||
|
const scalar sigmaT4 =
|
||||||
|
constant::physicoChemical::sigma.value()*T4[j];
|
||||||
|
|
||||||
|
if (i==j)
|
||||||
|
{
|
||||||
|
q[i] +=
|
||||||
|
(Fmatrix_()(i, j) - 1.0)*sigmaT4 + qrExt[j];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
q[i] += Fmatrix_()(i, j)*sigmaT4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
InfoInFunction
|
|
||||||
<< "\nDecomposing C matrix..." << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
LUDecompose(CLU_(), pivotIndices_);
|
Info<< "Solving view factor equations for band : "
|
||||||
|
<< bandI << endl;
|
||||||
|
|
||||||
|
|
||||||
|
LUBacksubstitute(CLU_(), pivotIndices_, q);
|
||||||
|
iterCounter_ ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (label i=0; i<totalNCoarseFaces_; i++)
|
|
||||||
{
|
|
||||||
for (label j=0; j<totalNCoarseFaces_; j++)
|
|
||||||
{
|
|
||||||
const scalar sigmaT4 =
|
|
||||||
constant::physicoChemical::sigma.value()*T4[j];
|
|
||||||
|
|
||||||
if (i==j)
|
|
||||||
{
|
|
||||||
q[i] += (Fmatrix_()(i, j) - 1.0)*sigmaT4 - qrExt[j];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
q[i] += Fmatrix_()(i, j)*sigmaT4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
InfoInFunction
|
|
||||||
<< "\nLU Back substitute C matrix.." << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
LUBacksubstitute(CLU_(), pivotIndices_, q);
|
|
||||||
iterCounter_ ++;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
// Scatter q and fill qr
|
// Scatter q and fill qr
|
||||||
Pstream::listCombineScatter(q);
|
Pstream::listCombineScatter(q);
|
||||||
Pstream::listCombineGather(q, maxEqOp<scalar>());
|
Pstream::listCombineGather(q, maxEqOp<scalar>());
|
||||||
@ -627,7 +689,9 @@ void Foam::radiation::viewFactor::calculate()
|
|||||||
forAll(coarseToFine, coarseI)
|
forAll(coarseToFine, coarseI)
|
||||||
{
|
{
|
||||||
label globalCoarse =
|
label globalCoarse =
|
||||||
globalNumbering.toGlobal(Pstream::myProcNo(), globCoarseId);
|
globalNumbering.toGlobal
|
||||||
|
(Pstream::myProcNo(), globCoarseId);
|
||||||
|
|
||||||
const label coarseFaceID = coarsePatchFace[coarseI];
|
const label coarseFaceID = coarsePatchFace[coarseI];
|
||||||
const labelList& fineFaces = coarseToFine[coarseFaceID];
|
const labelList& fineFaces = coarseToFine[coarseFaceID];
|
||||||
forAll(fineFaces, k)
|
forAll(fineFaces, k)
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd |
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
| Copyright (C) 2011-2017 OpenFOAM Foundation
|
| Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||||
@ -126,6 +126,9 @@ protected:
|
|||||||
//- Solar load radiation model
|
//- Solar load radiation model
|
||||||
autoPtr<solarLoad> solarLoad_;
|
autoPtr<solarLoad> solarLoad_;
|
||||||
|
|
||||||
|
//-Number of bands
|
||||||
|
label nBands_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
@ -189,6 +192,12 @@ public:
|
|||||||
|
|
||||||
//- Const access to total radiative heat flux field
|
//- Const access to total radiative heat flux field
|
||||||
inline const volScalarField& qr() const;
|
inline const volScalarField& qr() const;
|
||||||
|
|
||||||
|
//- Use useSolarLoad
|
||||||
|
inline bool useSolarLoad() const;
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
virtual label nBands() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd |
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
| Copyright (C) 2011-2017 OpenFOAM Foundation
|
| Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||||
@ -30,5 +30,14 @@ inline const Foam::volScalarField& Foam::radiation::viewFactor::qr() const
|
|||||||
return qr_;
|
return qr_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool Foam::radiation::viewFactor::useSolarLoad() const
|
||||||
|
{
|
||||||
|
return useSolarLoad_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline label Foam::radiation::viewFactor::nBands() const
|
||||||
|
{
|
||||||
|
return nBands_;
|
||||||
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -24,6 +24,7 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "boundaryRadiationProperties.H"
|
#include "boundaryRadiationProperties.H"
|
||||||
|
#include "radiationModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -63,6 +64,15 @@ Foam::radiation::boundaryRadiationProperties::boundaryRadiationProperties
|
|||||||
|
|
||||||
if (boundaryIO.typeHeaderOk<IOdictionary>(true))
|
if (boundaryIO.typeHeaderOk<IOdictionary>(true))
|
||||||
{
|
{
|
||||||
|
const radiationModel& radiation =
|
||||||
|
mesh.lookupObject<radiationModel>
|
||||||
|
(
|
||||||
|
"radiationProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Model number of bands
|
||||||
|
label nBands = radiation.nBands();
|
||||||
|
|
||||||
const IOdictionary radiationDict(boundaryIO);
|
const IOdictionary radiationDict(boundaryIO);
|
||||||
|
|
||||||
forAll(mesh.boundary(), patchi)
|
forAll(mesh.boundary(), patchi)
|
||||||
@ -75,9 +85,20 @@ Foam::radiation::boundaryRadiationProperties::boundaryRadiationProperties
|
|||||||
|
|
||||||
radBoundaryPropertiesPtrList_[patchi].reset
|
radBoundaryPropertiesPtrList_[patchi].reset
|
||||||
(
|
(
|
||||||
new boundaryRadiationPropertiesPatch(pp, dict)
|
boundaryRadiationPropertiesPatch::New(dict, pp)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (nBands != radBoundaryPropertiesPtrList_[patchi]->nBands())
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Radiation bands : " << nBands << nl
|
||||||
|
<< "Bands on patch : " << patchi << " is "
|
||||||
|
<< radBoundaryPropertiesPtrList_[patchi]->nBands()
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,12 +110,19 @@ Foam::tmp<Foam::scalarField>
|
|||||||
Foam::radiation::boundaryRadiationProperties::emissivity
|
Foam::radiation::boundaryRadiationProperties::emissivity
|
||||||
(
|
(
|
||||||
const label patchi,
|
const label patchi,
|
||||||
const label bandi
|
const label bandi,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
{
|
{
|
||||||
return radBoundaryPropertiesPtrList_[patchi]->emissivity(bandi);
|
return radBoundaryPropertiesPtrList_[patchi]->e
|
||||||
|
(
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
@ -107,16 +135,53 @@ Foam::radiation::boundaryRadiationProperties::emissivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField>
|
Foam::scalar Foam::radiation::boundaryRadiationProperties::faceEmissivity
|
||||||
Foam::radiation::boundaryRadiationProperties::absorptivity
|
|
||||||
(
|
(
|
||||||
const label patchi,
|
const label patchi,
|
||||||
const label bandi
|
const label faceI,
|
||||||
|
const label bandi,
|
||||||
|
vector incomingDirection,
|
||||||
|
scalar T
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
{
|
{
|
||||||
return radBoundaryPropertiesPtrList_[patchi]->absorptivity(bandi);
|
return radBoundaryPropertiesPtrList_[patchi]->e
|
||||||
|
(
|
||||||
|
faceI,
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Patch : " << mesh().boundaryMesh()[patchi].name()
|
||||||
|
<< " is not found in the boundaryRadiationProperties. "
|
||||||
|
<< "Please add it"
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::boundaryRadiationProperties::absorptivity
|
||||||
|
(
|
||||||
|
const label patchi,
|
||||||
|
const label bandi,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
|
{
|
||||||
|
return radBoundaryPropertiesPtrList_[patchi]->a
|
||||||
|
(
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
@ -129,16 +194,53 @@ Foam::radiation::boundaryRadiationProperties::absorptivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::boundaryRadiationProperties::faceAbsorptivity
|
||||||
|
(
|
||||||
|
const label patchi,
|
||||||
|
const label faceI,
|
||||||
|
const label bandi,
|
||||||
|
vector incomingDirection,
|
||||||
|
scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
|
{
|
||||||
|
return radBoundaryPropertiesPtrList_[patchi]->a
|
||||||
|
(
|
||||||
|
faceI,
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Patch : " << mesh().boundaryMesh()[patchi].name()
|
||||||
|
<< " is not found in the boundaryRadiationProperties. "
|
||||||
|
<< "Please add it"
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField>
|
Foam::tmp<Foam::scalarField>
|
||||||
Foam::radiation::boundaryRadiationProperties::transmissivity
|
Foam::radiation::boundaryRadiationProperties::transmissivity
|
||||||
(
|
(
|
||||||
const label patchi,
|
const label patchi,
|
||||||
const label bandi
|
const label bandi,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
{
|
{
|
||||||
return radBoundaryPropertiesPtrList_[patchi]->transmissivity(bandi);
|
return radBoundaryPropertiesPtrList_[patchi]->t
|
||||||
|
(
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
@ -151,16 +253,53 @@ Foam::radiation::boundaryRadiationProperties::transmissivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::boundaryRadiationProperties::faceTransmissivity
|
||||||
|
(
|
||||||
|
const label patchi,
|
||||||
|
const label faceI,
|
||||||
|
const label bandi,
|
||||||
|
vector incomingDirection,
|
||||||
|
scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
|
{
|
||||||
|
return radBoundaryPropertiesPtrList_[patchi]->t
|
||||||
|
(
|
||||||
|
faceI,
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Patch : " << mesh().boundaryMesh()[patchi].name()
|
||||||
|
<< " is not found in the boundaryRadiationProperties. "
|
||||||
|
<< "Please add it"
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField>
|
Foam::tmp<Foam::scalarField>
|
||||||
Foam::radiation::boundaryRadiationProperties::reflectivity
|
Foam::radiation::boundaryRadiationProperties::diffReflectivity
|
||||||
(
|
(
|
||||||
const label patchi,
|
const label patchi,
|
||||||
const label bandi
|
const label bandi,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
{
|
{
|
||||||
return radBoundaryPropertiesPtrList_[patchi]->reflectivity(bandi);
|
return radBoundaryPropertiesPtrList_[patchi]->rDiff
|
||||||
|
(
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
@ -173,6 +312,93 @@ Foam::radiation::boundaryRadiationProperties::reflectivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::boundaryRadiationProperties::faceDiffReflectivity
|
||||||
|
(
|
||||||
|
const label patchi,
|
||||||
|
const label faceI,
|
||||||
|
const label bandi,
|
||||||
|
vector incomingDirection,
|
||||||
|
scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
|
{
|
||||||
|
return radBoundaryPropertiesPtrList_[patchi]->rDiff
|
||||||
|
(
|
||||||
|
faceI,
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Patch : " << mesh().boundaryMesh()[patchi].name()
|
||||||
|
<< " is not found in the boundaryRadiationProperties. "
|
||||||
|
<< "Please add it"
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::boundaryRadiationProperties::specReflectivity
|
||||||
|
(
|
||||||
|
const label patchi,
|
||||||
|
const label bandi,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
|
{
|
||||||
|
return radBoundaryPropertiesPtrList_[patchi]->rSpec
|
||||||
|
(
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Patch : " << mesh().boundaryMesh()[patchi].name()
|
||||||
|
<< " is not found in the boundaryRadiationProperties. "
|
||||||
|
<< "Please add it"
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return tmp<scalarField>::New();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::boundaryRadiationProperties::faceSpecReflectivity
|
||||||
|
(
|
||||||
|
const label patchi,
|
||||||
|
const label faceI,
|
||||||
|
const label bandi,
|
||||||
|
vector incomingDirection,
|
||||||
|
scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!radBoundaryPropertiesPtrList_[patchi].empty())
|
||||||
|
{
|
||||||
|
return radBoundaryPropertiesPtrList_[patchi]->rSpec
|
||||||
|
(
|
||||||
|
faceI,
|
||||||
|
bandi,
|
||||||
|
incomingDirection,
|
||||||
|
T
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Patch : " << mesh().boundaryMesh()[patchi].name()
|
||||||
|
<< " is not found in the boundaryRadiationProperties. "
|
||||||
|
<< "Please add it"
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::boundaryRadiationProperties::~boundaryRadiationProperties()
|
Foam::radiation::boundaryRadiationProperties::~boundaryRadiationProperties()
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -86,7 +86,19 @@ public:
|
|||||||
tmp<scalarField> emissivity
|
tmp<scalarField> emissivity
|
||||||
(
|
(
|
||||||
const label patchI,
|
const label patchI,
|
||||||
const label bandI = 0
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Access boundary emissivity on face
|
||||||
|
scalar faceEmissivity
|
||||||
|
(
|
||||||
|
const label patchI,
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
vector incomingDirection = Zero,
|
||||||
|
scalar T = 0
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
@ -94,7 +106,20 @@ public:
|
|||||||
tmp<scalarField> absorptivity
|
tmp<scalarField> absorptivity
|
||||||
(
|
(
|
||||||
const label patchI,
|
const label patchI,
|
||||||
const label bandI = 0
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Access boundary absorptivity on face
|
||||||
|
scalar faceAbsorptivity
|
||||||
|
(
|
||||||
|
const label patchI,
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
vector incomingDirection = Zero,
|
||||||
|
scalar T = 0
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
@ -102,14 +127,61 @@ public:
|
|||||||
tmp<scalarField> transmissivity
|
tmp<scalarField> transmissivity
|
||||||
(
|
(
|
||||||
const label patchI,
|
const label patchI,
|
||||||
const label bandI = 0
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Access boundary reflectivity on patch
|
|
||||||
tmp<scalarField> reflectivity
|
//- Access boundary transmissivity on face
|
||||||
|
scalar faceTransmissivity
|
||||||
(
|
(
|
||||||
const label patchI,
|
const label patchI,
|
||||||
const label bandI = 0
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
vector incomingDirection = Zero,
|
||||||
|
scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Access boundary diffuse reflectivity on patch
|
||||||
|
tmp<scalarField> diffReflectivity
|
||||||
|
(
|
||||||
|
const label patchI,
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Access boundary diffuse reflectivity on face
|
||||||
|
scalar faceDiffReflectivity
|
||||||
|
(
|
||||||
|
const label patchI,
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
vector incomingDirection = Zero,
|
||||||
|
scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Access boundary specular reflectivity on patch
|
||||||
|
tmp<scalarField> specReflectivity
|
||||||
|
(
|
||||||
|
const label patchI,
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Access boundary specular reflectivity on face
|
||||||
|
scalar faceSpecReflectivity
|
||||||
|
(
|
||||||
|
const label patchI,
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
vector incomingDirection = Zero,
|
||||||
|
scalar T = 0
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -29,18 +29,48 @@ License
|
|||||||
#include "absorptionEmissionModel.H"
|
#include "absorptionEmissionModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * //
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(boundaryRadiationPropertiesPatch, 0);
|
||||||
|
defineRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
boundaryRadiationPropertiesPatch,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const Foam::Enum
|
// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
|
||||||
<
|
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::methodType
|
|
||||||
>
|
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::methodTypeNames_
|
|
||||||
({
|
|
||||||
{ methodType::SOLIDRADIATION, "solidRadiation" },
|
|
||||||
{ methodType::LOOKUP, "lookup" },
|
|
||||||
{ methodType::MODEL, "model" },
|
|
||||||
});
|
|
||||||
|
|
||||||
|
Foam::autoPtr<Foam::radiation::boundaryRadiationPropertiesPatch>
|
||||||
|
Foam::radiation::boundaryRadiationPropertiesPatch::New
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
word modelType(dict.lookup("type"));
|
||||||
|
|
||||||
|
Info<< "Selecting boundary radiation Model: "
|
||||||
|
<< modelType << endl;
|
||||||
|
|
||||||
|
dictionaryConstructorTable::iterator cstrIter =
|
||||||
|
dictionaryConstructorTablePtr_->find(modelType);
|
||||||
|
|
||||||
|
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Unknown modelType type "
|
||||||
|
<< modelType << endl << endl
|
||||||
|
<< "Valid radiation types are : " << endl
|
||||||
|
<< dictionaryConstructorTablePtr_->sortedToc()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cstrIter()(dict, pp);
|
||||||
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Private functions * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Private functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -70,56 +100,15 @@ Foam::radiation::boundaryRadiationPropertiesPatch::nbrRegion() const
|
|||||||
Foam::radiation::boundaryRadiationPropertiesPatch::
|
Foam::radiation::boundaryRadiationPropertiesPatch::
|
||||||
boundaryRadiationPropertiesPatch
|
boundaryRadiationPropertiesPatch
|
||||||
(
|
(
|
||||||
const polyPatch& p,
|
const dictionary& dict,
|
||||||
const dictionary& dict
|
const polyPatch& p
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
method_(methodTypeNames_.get("mode", dict)),
|
|
||||||
dict_(dict),
|
dict_(dict),
|
||||||
|
patch_(p),
|
||||||
absorptionEmission_(nullptr),
|
absorptionEmission_(nullptr),
|
||||||
transmissivity_(nullptr),
|
transmissivity_(nullptr)
|
||||||
patch_(p)
|
{}
|
||||||
{
|
|
||||||
switch (method_)
|
|
||||||
{
|
|
||||||
case SOLIDRADIATION:
|
|
||||||
{
|
|
||||||
if (!isA<mappedPatchBase>(p))
|
|
||||||
{
|
|
||||||
FatalErrorInFunction
|
|
||||||
<< "\n patch type '" << p.type()
|
|
||||||
<< "' not type '" << mappedPatchBase::typeName << "'"
|
|
||||||
<< "\n for patch " << p.name()
|
|
||||||
<< abort(FatalIOError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODEL:
|
|
||||||
{
|
|
||||||
const fvMesh& mesh =
|
|
||||||
refCast<const fvMesh>(p.boundaryMesh().mesh());
|
|
||||||
|
|
||||||
absorptionEmission_.reset
|
|
||||||
(
|
|
||||||
absorptionEmissionModel::New(dict, mesh).ptr()
|
|
||||||
);
|
|
||||||
|
|
||||||
transmissivity_.reset
|
|
||||||
(
|
|
||||||
transmissivityModel::New(dict, mesh).ptr()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LOOKUP:
|
|
||||||
{
|
|
||||||
//Do nothing
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -130,303 +119,17 @@ Foam::radiation::boundaryRadiationPropertiesPatch::
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
const Foam::radiation::absorptionEmissionModel&
|
const Foam::radiation::wallAbsorptionEmissionModel&
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::absorptionEmission() const
|
Foam::radiation::boundaryRadiationPropertiesPatch::absorptionEmission() const
|
||||||
{
|
{
|
||||||
return *absorptionEmission_;
|
return *absorptionEmission_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::radiation::transmissivityModel&
|
const Foam::radiation::wallTransmissivityModel&
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::transmissiveModel() const
|
Foam::radiation::boundaryRadiationPropertiesPatch::transmissiveModel() const
|
||||||
{
|
{
|
||||||
return *transmissivity_;
|
return *transmissivity_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField>
|
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::emissivity
|
|
||||||
(
|
|
||||||
const label bandI
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
switch (method_)
|
|
||||||
{
|
|
||||||
case SOLIDRADIATION:
|
|
||||||
{
|
|
||||||
const fvMesh& nbrMesh = nbrRegion();
|
|
||||||
|
|
||||||
const radiation::radiationModel& radiation =
|
|
||||||
nbrMesh.lookupObject<radiation::radiationModel>
|
|
||||||
(
|
|
||||||
"radiationProperties"
|
|
||||||
);
|
|
||||||
|
|
||||||
scalarField emissivity
|
|
||||||
(
|
|
||||||
radiation.absorptionEmission().e(bandI)().boundaryField()
|
|
||||||
[
|
|
||||||
nbrPatchIndex()
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
const mappedPatchBase& mpp =
|
|
||||||
refCast<const mappedPatchBase>(patch_);
|
|
||||||
|
|
||||||
mpp.distribute(emissivity);
|
|
||||||
|
|
||||||
return tmp<scalarField>::New(std::move(emissivity));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LOOKUP:
|
|
||||||
{
|
|
||||||
return tmp<scalarField>::New
|
|
||||||
(
|
|
||||||
patch_.size(),
|
|
||||||
dict_.get<scalar>("emissivity")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODEL:
|
|
||||||
{
|
|
||||||
const label index = patch_.index();
|
|
||||||
|
|
||||||
return tmp<scalarField>::New
|
|
||||||
(
|
|
||||||
absorptionEmission_->e(bandI)().boundaryField()[index]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
FatalErrorInFunction
|
|
||||||
<< "Please set 'mode' to one of "
|
|
||||||
<< methodTypeNames_
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return scalarField(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField>
|
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::absorptivity
|
|
||||||
(
|
|
||||||
const label bandI
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
switch (method_)
|
|
||||||
{
|
|
||||||
case SOLIDRADIATION:
|
|
||||||
{
|
|
||||||
const fvMesh& nbrMesh = nbrRegion();
|
|
||||||
|
|
||||||
const radiation::radiationModel& radiation =
|
|
||||||
nbrMesh.lookupObject<radiation::radiationModel>
|
|
||||||
(
|
|
||||||
"radiationProperties"
|
|
||||||
);
|
|
||||||
|
|
||||||
scalarField absorp
|
|
||||||
(
|
|
||||||
radiation.absorptionEmission().a(bandI)().boundaryField()
|
|
||||||
[
|
|
||||||
nbrPatchIndex()
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
const mappedPatchBase& mpp =
|
|
||||||
refCast<const mappedPatchBase>(patch_);
|
|
||||||
|
|
||||||
mpp.distribute(absorp);
|
|
||||||
|
|
||||||
return tmp<scalarField>::New(std::move(absorp));
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODEL:
|
|
||||||
{
|
|
||||||
const label index = patch_.index();
|
|
||||||
|
|
||||||
return tmp<scalarField>::New
|
|
||||||
(
|
|
||||||
absorptionEmission_->a(bandI)().boundaryField()[index]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LOOKUP:
|
|
||||||
{
|
|
||||||
return tmp<scalarField>::New
|
|
||||||
(
|
|
||||||
patch_.size(),
|
|
||||||
dict_.get<scalar>("absorptivity")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
FatalErrorInFunction
|
|
||||||
<< "Unimplemented method " << method_ << endl
|
|
||||||
<< "Please set 'mode' to one of "
|
|
||||||
<< methodTypeNames_
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return scalarField(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField>
|
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::transmissivity
|
|
||||||
(
|
|
||||||
const label bandI
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
switch (method_)
|
|
||||||
{
|
|
||||||
case SOLIDRADIATION:
|
|
||||||
{
|
|
||||||
const fvMesh& nbrMesh = nbrRegion();
|
|
||||||
|
|
||||||
const radiation::radiationModel& radiation =
|
|
||||||
nbrMesh.lookupObject<radiation::radiationModel>
|
|
||||||
(
|
|
||||||
"radiationProperties"
|
|
||||||
);
|
|
||||||
|
|
||||||
scalarField trans
|
|
||||||
(
|
|
||||||
radiation.transmissivity().tauEff(bandI)().boundaryField()
|
|
||||||
[
|
|
||||||
nbrPatchIndex()
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
const mappedPatchBase& mpp =
|
|
||||||
refCast<const mappedPatchBase>(patch_);
|
|
||||||
|
|
||||||
mpp.distribute(trans);
|
|
||||||
|
|
||||||
return tmp<scalarField>::New(std::move(trans));
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODEL:
|
|
||||||
{
|
|
||||||
const label index = patch_.index();
|
|
||||||
|
|
||||||
return tmp<scalarField>::New
|
|
||||||
(
|
|
||||||
transmissivity_->tauEff(bandI)().boundaryField()[index]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
case LOOKUP:
|
|
||||||
{
|
|
||||||
return tmp<scalarField>::New
|
|
||||||
(
|
|
||||||
patch_.size(),
|
|
||||||
dict_.get<scalar>("transmissivity")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
FatalErrorInFunction
|
|
||||||
<< "Unimplemented method " << method_ << endl
|
|
||||||
<< "Please set 'mode' to one of "
|
|
||||||
<< methodTypeNames_
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return scalarField(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField>
|
|
||||||
Foam::radiation::boundaryRadiationPropertiesPatch::reflectivity
|
|
||||||
(
|
|
||||||
const label bandI
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
const tmp<scalarField> tt = transmissivity(bandI);
|
|
||||||
const tmp<scalarField> ta = absorptivity(bandI);
|
|
||||||
|
|
||||||
return (1.0 - tt - ta);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::radiation::boundaryRadiationPropertiesPatch::write
|
|
||||||
(
|
|
||||||
Ostream& os
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
os.writeEntry("mode", methodTypeNames_[method_]);
|
|
||||||
|
|
||||||
switch (method_)
|
|
||||||
{
|
|
||||||
case MODEL:
|
|
||||||
{
|
|
||||||
word modelType(dict_.get<word>("absorptionEmissionModel"));
|
|
||||||
|
|
||||||
os.writeEntry("absorptionEmissionModel", modelType);
|
|
||||||
|
|
||||||
word modelCoeffs(modelType + word("Coeffs"));
|
|
||||||
os.writeKeyword(modelCoeffs);
|
|
||||||
|
|
||||||
dict_.subDict(modelCoeffs).write(os);
|
|
||||||
|
|
||||||
modelType = dict_.get<word>("transmissivityModel");
|
|
||||||
|
|
||||||
os.writeEntry("transmissivityModel", modelType);
|
|
||||||
|
|
||||||
modelCoeffs = modelType + word("Coeffs");
|
|
||||||
|
|
||||||
os.writeKeyword(modelCoeffs);
|
|
||||||
|
|
||||||
dict_.subDict(modelCoeffs).write(os);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case LOOKUP:
|
|
||||||
{
|
|
||||||
const scalarField emissivity("emissivity", dict_, patch_.size());
|
|
||||||
emissivity.writeEntry("emissivity", os);
|
|
||||||
|
|
||||||
const scalarField absorptivity
|
|
||||||
(
|
|
||||||
"absorptivity", dict_, patch_.size()
|
|
||||||
);
|
|
||||||
absorptivity.writeEntry("absorptivity", os);
|
|
||||||
|
|
||||||
const scalarField transmissivity
|
|
||||||
(
|
|
||||||
"transmissivity", dict_, patch_.size()
|
|
||||||
);
|
|
||||||
transmissivity.writeEntry("transmissivity", os);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SOLIDRADIATION:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -25,12 +25,6 @@ Class
|
|||||||
Foam::boundaryRadiationPropertiesPatch
|
Foam::boundaryRadiationPropertiesPatch
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Common functions to emissivity. It gets supplied from lookup into a
|
|
||||||
dictionary or calculated by the solidThermo:
|
|
||||||
|
|
||||||
- 'lookup' : lookup volScalarField with name
|
|
||||||
- 'solidThermo' : use solidThermo
|
|
||||||
- 'model' : use a model
|
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
boundaryRadiationPropertiesPatch.C
|
boundaryRadiationPropertiesPatch.C
|
||||||
@ -44,8 +38,9 @@ SourceFiles
|
|||||||
#include "Enum.H"
|
#include "Enum.H"
|
||||||
#include "fvPatch.H"
|
#include "fvPatch.H"
|
||||||
#include "calculatedFvPatchFields.H"
|
#include "calculatedFvPatchFields.H"
|
||||||
#include "transmissivityModel.H"
|
#include "runTimeSelectionTables.H"
|
||||||
#include "absorptionEmissionModel.H"
|
#include "wallTransmissivityModel.H"
|
||||||
|
#include "wallAbsorptionEmissionModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -59,35 +54,13 @@ namespace radiation
|
|||||||
|
|
||||||
class boundaryRadiationPropertiesPatch
|
class boundaryRadiationPropertiesPatch
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
|
|
||||||
// - Type of method
|
|
||||||
enum methodType
|
|
||||||
{
|
|
||||||
SOLIDRADIATION,
|
|
||||||
LOOKUP,
|
|
||||||
MODEL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
static const Enum<methodType> methodTypeNames_;
|
|
||||||
|
|
||||||
//- How to get property
|
|
||||||
const methodType method_;
|
|
||||||
|
|
||||||
//- Dictionary
|
//- Dictionary
|
||||||
const dictionary dict_;
|
const dictionary dict_;
|
||||||
|
|
||||||
//- Absorption/emission model
|
|
||||||
autoPtr<absorptionEmissionModel> absorptionEmission_;
|
|
||||||
|
|
||||||
//- transmissivity model
|
|
||||||
autoPtr<transmissivityModel> transmissivity_;
|
|
||||||
|
|
||||||
//- reference to fvPatch
|
//- reference to fvPatch
|
||||||
const polyPatch& patch_;
|
const polyPatch& patch_;
|
||||||
|
|
||||||
@ -101,8 +74,35 @@ private:
|
|||||||
const fvMesh& nbrRegion() const;
|
const fvMesh& nbrRegion() const;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
|
||||||
|
//- Absorption/emission model
|
||||||
|
autoPtr<wallAbsorptionEmissionModel> absorptionEmission_;
|
||||||
|
|
||||||
|
//- Transmissivity model
|
||||||
|
autoPtr<wallTransmissivityModel> transmissivity_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("boundaryRadiationPropertiesPatch");
|
||||||
|
|
||||||
|
// Declare runtime constructor selection table
|
||||||
|
|
||||||
|
declareRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
autoPtr,
|
||||||
|
boundaryRadiationPropertiesPatch,
|
||||||
|
dictionary,
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
),
|
||||||
|
(dict, pp)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
@ -110,8 +110,16 @@ public:
|
|||||||
//- Construct from patch, internal field and dictionary
|
//- Construct from patch, internal field and dictionary
|
||||||
boundaryRadiationPropertiesPatch
|
boundaryRadiationPropertiesPatch
|
||||||
(
|
(
|
||||||
const polyPatch&,
|
const dictionary&,
|
||||||
const dictionary&
|
const polyPatch&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Selector
|
||||||
|
static autoPtr<boundaryRadiationPropertiesPatch> New
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -120,30 +128,114 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
//- Method to obtain properties
|
|
||||||
word method() const
|
|
||||||
{
|
|
||||||
return methodTypeNames_[method_];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//- Return absorptionEmissionModel
|
//- Return absorptionEmissionModel
|
||||||
const absorptionEmissionModel& absorptionEmission() const;
|
const wallAbsorptionEmissionModel& absorptionEmission() const;
|
||||||
|
|
||||||
//- Return transmissivityModel
|
//- Return transmissivityModel
|
||||||
const transmissivityModel& transmissiveModel() const;
|
const wallTransmissivityModel& transmissiveModel() const;
|
||||||
|
|
||||||
//- Calculate corresponding emissivity field for bandI
|
//- Return emissivity on patch
|
||||||
tmp<scalarField> emissivity(const label bandI = 0) const;
|
virtual tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
//- Calculate corresponding absorptivity field for bandI
|
|
||||||
tmp<scalarField> absorptivity(const label bandI = 0) const;
|
|
||||||
|
|
||||||
//- Calculate corresponding transmissivity field for bandI
|
//- Return emissivity on face
|
||||||
tmp<scalarField> transmissivity(const label bandI = 0) const;
|
virtual scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on patch
|
||||||
|
virtual tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
virtual scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on patch
|
||||||
|
virtual tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on face
|
||||||
|
virtual scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on patch
|
||||||
|
virtual tmp<scalarField> rSpec
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on face
|
||||||
|
virtual scalar rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on patch
|
||||||
|
virtual tmp<scalarField> rDiff
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on face
|
||||||
|
virtual scalar rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
virtual bool isGrey() const = 0;
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
virtual label nBands() const = 0;
|
||||||
|
|
||||||
|
|
||||||
//- Calculate corresponding reflectivity field
|
|
||||||
tmp<scalarField> reflectivity(const label bandI = 0) const;
|
|
||||||
|
|
||||||
//- Write
|
//- Write
|
||||||
void write(Ostream&) const;
|
void write(Ostream&) const;
|
||||||
|
|||||||
@ -0,0 +1,208 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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 "lookup.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(lookup, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
boundaryRadiationPropertiesPatch,
|
||||||
|
lookup,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::lookup::lookup
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
boundaryRadiationPropertiesPatch(dict, pp),
|
||||||
|
pp_(pp),
|
||||||
|
dict_(dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::lookup::~lookup()
|
||||||
|
{}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::lookup::e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>::New
|
||||||
|
(
|
||||||
|
pp_.size(),
|
||||||
|
dict_.get<scalar>("emissivity")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::lookup::e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(dict_.get<scalar>("emissivity"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::lookup::a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>::New
|
||||||
|
(
|
||||||
|
pp_.size(),
|
||||||
|
dict_.get<scalar>("absorptivity")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::lookup::a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(dict_.get<scalar>("absorptivity"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::lookup::t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>::New
|
||||||
|
(
|
||||||
|
pp_.size(),
|
||||||
|
dict_.get<scalar>("transmissivity")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::lookup::t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(dict_.get<scalar>("transmissivity"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::lookup::rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), Zero));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::lookup::rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::lookup::rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), Zero));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::lookup::rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::radiation::lookup::isGrey() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::lookup::nBands() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,209 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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::radiation::lookup
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
Look up type of boundary radiation properties.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\verbatim
|
||||||
|
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type lookup;
|
||||||
|
absorptivity 0.1;
|
||||||
|
emissivity 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef lookup_H
|
||||||
|
#define lookup_H
|
||||||
|
|
||||||
|
#include "boundaryRadiationPropertiesPatch.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class lookup Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class lookup
|
||||||
|
:
|
||||||
|
public boundaryRadiationPropertiesPatch
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Reference to the polyPatch
|
||||||
|
const polyPatch& pp_;
|
||||||
|
|
||||||
|
//-Dictionary
|
||||||
|
const dictionary dict_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("lookup");
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
lookup(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~lookup();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return emissivity
|
||||||
|
tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return emissivity on face
|
||||||
|
scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on patch
|
||||||
|
tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on patch
|
||||||
|
tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on face
|
||||||
|
scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on patch
|
||||||
|
tmp<scalarField> rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on face
|
||||||
|
scalar rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on patch
|
||||||
|
tmp<scalarField> rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection ,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on face
|
||||||
|
scalar rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
virtual bool isGrey() const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
virtual label nBands() const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace radiation
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,203 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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 "opaqueDiffusive.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(opaqueDiffusive, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
boundaryRadiationPropertiesPatch,
|
||||||
|
opaqueDiffusive,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::opaqueDiffusive::opaqueDiffusive
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
boundaryRadiationPropertiesPatch(dict, pp),
|
||||||
|
pp_(pp)
|
||||||
|
{
|
||||||
|
const dictionary& absorptionDict =
|
||||||
|
dict.subDict("wallAbsorptionEmissionModel");
|
||||||
|
|
||||||
|
absorptionEmission_.reset
|
||||||
|
(
|
||||||
|
wallAbsorptionEmissionModel::New(absorptionDict, pp).ptr()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::opaqueDiffusive::~opaqueDiffusive()
|
||||||
|
{}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::opaqueDiffusive::e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->e(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueDiffusive::e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->e(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::opaqueDiffusive::a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->a(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueDiffusive::a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->a(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::opaqueDiffusive::t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), 0.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueDiffusive::t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::opaqueDiffusive::rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), Zero));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueDiffusive::rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::opaqueDiffusive::rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), Zero));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueDiffusive::rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::radiation::opaqueDiffusive::isGrey() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->isGrey();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::opaqueDiffusive::nBands() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->nBands();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,206 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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::radiation::opaqueDiffusive
|
||||||
|
|
||||||
|
Description
|
||||||
|
Radiation boundary model for opaque diffusive walls. It requires to
|
||||||
|
specify a wallAbsorptionEmissionModel in boundaryRadiationProperties
|
||||||
|
file.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\verbatim
|
||||||
|
|
||||||
|
type opaqueDiffusive;
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type multiBandAbsorption;
|
||||||
|
absorptivity (0.3 0.7);
|
||||||
|
emissivity (0.3 0.7);
|
||||||
|
};
|
||||||
|
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef opaqueDiffusive_H
|
||||||
|
#define opaqueDiffusive_H
|
||||||
|
|
||||||
|
#include "boundaryRadiationPropertiesPatch.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class opaqueDiffusive Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class opaqueDiffusive
|
||||||
|
:
|
||||||
|
public boundaryRadiationPropertiesPatch
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Reference to the polyPatch
|
||||||
|
const polyPatch& pp_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("opaqueDiffusive");
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
opaqueDiffusive(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~opaqueDiffusive();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return emissivity
|
||||||
|
tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return emissivity on face
|
||||||
|
scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on patch
|
||||||
|
tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on patch
|
||||||
|
tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on face
|
||||||
|
scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on patch
|
||||||
|
tmp<scalarField> rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on face
|
||||||
|
scalar rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on patch
|
||||||
|
tmp<scalarField> rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection ,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on face
|
||||||
|
scalar rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
virtual bool isGrey() const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
virtual label nBands() const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace radiation
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,205 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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 "opaqueReflective.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(opaqueReflective, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
boundaryRadiationPropertiesPatch,
|
||||||
|
opaqueReflective,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::opaqueReflective::opaqueReflective
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
boundaryRadiationPropertiesPatch(dict, pp),
|
||||||
|
pp_(pp),
|
||||||
|
fd_(dict.lookupOrDefault<scalar>("fd", 1))
|
||||||
|
{
|
||||||
|
const dictionary& absorptionDict =
|
||||||
|
dict.subDict("wallAbsorptionEmissionModel");
|
||||||
|
|
||||||
|
absorptionEmission_.reset
|
||||||
|
(
|
||||||
|
wallAbsorptionEmissionModel::New(absorptionDict, pp).ptr()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::opaqueReflective::~opaqueReflective()
|
||||||
|
{}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::opaqueReflective::e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->e(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueReflective::e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->e(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::opaqueReflective::a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->a(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueReflective::a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->a(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::opaqueReflective::t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), Zero));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueReflective::t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::opaqueReflective::rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return (1.0 - fd_)*(1.0 - a(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueReflective::rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return (1.0 - fd_)*(1.0 - a(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::opaqueReflective::rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return fd_*(1.0 - a(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::opaqueReflective::rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return fd_*(1.0 - a(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::radiation::opaqueReflective::isGrey() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->isGrey();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::opaqueReflective::nBands() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->nBands();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,217 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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::radiation::opaqueReflective
|
||||||
|
|
||||||
|
Description
|
||||||
|
Radiation boundary model for opaque reflective walls. It requires to
|
||||||
|
specify a wallAbsorptionEmissionModel and the reflected fraction
|
||||||
|
in boundaryRadiationProperties file
|
||||||
|
fd is the diffussive reflected fraction. 0 all the incoming flux is
|
||||||
|
specularly reflected and 1 all is diffussive reflected. fd is used
|
||||||
|
in the calculation of the specular reflection (rSpec) and the
|
||||||
|
diffusive reflection (rDiff). Absorptivity and emissivity are
|
||||||
|
independent of fd.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\verbatim
|
||||||
|
|
||||||
|
type opaqueReflective;
|
||||||
|
|
||||||
|
fd 0.0;
|
||||||
|
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type multiBandAbsorption;
|
||||||
|
absorptivity (0.3 0.7);
|
||||||
|
emissivity (0.3 0.7);
|
||||||
|
};
|
||||||
|
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef opaqueReflective_H
|
||||||
|
#define opaqueReflective_H
|
||||||
|
|
||||||
|
#include "boundaryRadiationPropertiesPatch.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class opaqueReflective Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class opaqueReflective
|
||||||
|
:
|
||||||
|
public boundaryRadiationPropertiesPatch
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Reference to the polyPatch
|
||||||
|
const polyPatch& pp_;
|
||||||
|
|
||||||
|
//- Diffuse fraction
|
||||||
|
const scalar fd_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("opaqueReflective");
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
opaqueReflective(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~opaqueReflective();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return emissivity
|
||||||
|
tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return emissivity on face
|
||||||
|
scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on patch
|
||||||
|
tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on patch
|
||||||
|
tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on face
|
||||||
|
scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on patch
|
||||||
|
tmp<scalarField> rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on face
|
||||||
|
scalar rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on patch
|
||||||
|
tmp<scalarField> rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection ,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on face
|
||||||
|
scalar rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
virtual bool isGrey() const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
virtual label nBands() const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace radiation
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,204 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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 "transparent.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(transparent, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
boundaryRadiationPropertiesPatch,
|
||||||
|
transparent,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::transparent::transparent
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
boundaryRadiationPropertiesPatch(dict, pp),
|
||||||
|
pp_(pp)
|
||||||
|
{
|
||||||
|
const dictionary& absorptionDict =
|
||||||
|
dict.subDict("wallAbsorptionEmissionModel");
|
||||||
|
|
||||||
|
absorptionEmission_.reset
|
||||||
|
(
|
||||||
|
wallAbsorptionEmissionModel::New(absorptionDict, pp).ptr()
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::transparent::~transparent()
|
||||||
|
{}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::transparent::e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->e(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::transparent::e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->e(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::transparent::a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->a(bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::transparent::a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return(absorptionEmission_->a(faceI, bandI, dir, T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::transparent::t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), 1.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::transparent::t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::transparent::rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), Zero));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::transparent::rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::transparent::rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* dir,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), Zero));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::transparent::rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::radiation::transparent::isGrey() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->isGrey();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::transparent::nBands() const
|
||||||
|
{
|
||||||
|
return absorptionEmission_->nBands();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,206 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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::radiation::transparent
|
||||||
|
|
||||||
|
Description
|
||||||
|
Radiation boundary model for transparent walls. It requires to
|
||||||
|
specify a wallAbsorptionEmissionModel in boundaryRadiationProperties
|
||||||
|
file.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\verbatim
|
||||||
|
|
||||||
|
type transparent;
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type multiBandAbsorption;
|
||||||
|
absorptivity (0.3 0.7);
|
||||||
|
emissivity (0.3 0.7);
|
||||||
|
};
|
||||||
|
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef transparent_H
|
||||||
|
#define transparent_H
|
||||||
|
|
||||||
|
#include "boundaryRadiationPropertiesPatch.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class transparent Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class transparent
|
||||||
|
:
|
||||||
|
public boundaryRadiationPropertiesPatch
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Reference to the polyPatch
|
||||||
|
const polyPatch& pp_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("transparent");
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
transparent(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~transparent();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return emissivity
|
||||||
|
tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return emissivity on face
|
||||||
|
scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on patch
|
||||||
|
tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on patch
|
||||||
|
tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return transmissivity on face
|
||||||
|
scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on patch
|
||||||
|
tmp<scalarField> rSpec
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return specular reflectivity on face
|
||||||
|
scalar rSpec
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on patch
|
||||||
|
tmp<scalarField> rDiff
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection ,
|
||||||
|
scalarField* T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return diffusive reflectivity on face
|
||||||
|
scalar rDiff
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
virtual bool isGrey() const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
virtual label nBands() const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace radiation
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -234,7 +234,7 @@ public:
|
|||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- const acess to direction
|
//- const acess to direction
|
||||||
const vector direction() const
|
const vector& direction() const
|
||||||
{
|
{
|
||||||
return direction_;
|
return direction_;
|
||||||
}
|
}
|
||||||
@ -245,14 +245,20 @@ public:
|
|||||||
return direction_;
|
return direction_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return direct solar irradiation
|
//- Return direct solar irradiation
|
||||||
scalar directSolarRad()
|
scalar& directSolarRad()
|
||||||
|
{
|
||||||
|
return directSolarRad_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return const access to direct solar irradiation
|
||||||
|
const scalar& directSolarRad() const
|
||||||
{
|
{
|
||||||
return directSolarRad_;
|
return directSolarRad_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return diffuse solar irradiation
|
//- Return diffuse solar irradiation
|
||||||
scalar diffuseSolarRad()
|
scalar& diffuseSolarRad()
|
||||||
{
|
{
|
||||||
return diffuseSolarRad_;
|
return diffuseSolarRad_;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,115 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015-2018 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 "constantAbsorption.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(constantAbsorption, 0);
|
||||||
|
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
wallAbsorptionEmissionModel,
|
||||||
|
constantAbsorption,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::constantAbsorption::constantAbsorption
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
wallAbsorptionEmissionModel(dict, pp),
|
||||||
|
coeffsDict_(dict),
|
||||||
|
a_(coeffsDict_.get<scalar>("absorptivity")),
|
||||||
|
e_(coeffsDict_.get<scalar>("emissivity"))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::constantAbsorption::~constantAbsorption()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::constantAbsorption::a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), a_));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::constantAbsorption::a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return a_;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::constantAbsorption::e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), e_));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::constantAbsorption::e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return e_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,23 +22,23 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::radiation::noTransmissivity
|
Foam::radiation::constantAbsorption
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpRadiationTransmissivitySubModels
|
grpRadiationTransmissivitySubModels
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Dummy transmissivity model for 'none'
|
Constant radiation transmissivity coefficient
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
noTransmissivity.C
|
constantAbsorption.C
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef radiation_noTransmissivity_H
|
#ifndef radiation_constantAbsorption_H
|
||||||
#define radiation_noTransmissivity_H
|
#define radiation_constantAbsorption_H
|
||||||
|
|
||||||
#include "transmissivityModel.H"
|
#include "wallAbsorptionEmissionModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -48,36 +48,80 @@ namespace radiation
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class noTransmissivity Declaration
|
Class constantAbsorption Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class noTransmissivity
|
class constantAbsorption
|
||||||
:
|
:
|
||||||
public transmissivityModel
|
public wallAbsorptionEmissionModel
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Coefficients dictionary
|
||||||
|
dictionary coeffsDict_;
|
||||||
|
|
||||||
|
//- Absorptivity coefficient
|
||||||
|
scalar a_;
|
||||||
|
|
||||||
|
//- Emissivity coefficient
|
||||||
|
scalar e_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
TypeName("none");
|
TypeName("constantAbsorption");
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
noTransmissivity(const dictionary& dict, const fvMesh& mesh);
|
constantAbsorption(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~noTransmissivity();
|
virtual ~constantAbsorption();
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return scatter coefficient
|
//- absorptivity coefficient
|
||||||
tmp<volScalarField> tauEff(const label bandI = 0) const;
|
tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
//- Is Grey
|
//- Return absorptivity on face
|
||||||
|
scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return emission coefficient
|
||||||
|
tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return emission coefficient
|
||||||
|
scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
inline bool isGrey() const
|
inline bool isGrey() const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015-2018 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 "multiBandAbsorption.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(multiBandAbsorption, 0);
|
||||||
|
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
wallAbsorptionEmissionModel,
|
||||||
|
multiBandAbsorption,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::multiBandAbsorption::multiBandAbsorption
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
wallAbsorptionEmissionModel(dict, pp),
|
||||||
|
coeffsDict_(dict),
|
||||||
|
aCoeffs_(),
|
||||||
|
eCoeffs_(),
|
||||||
|
nBands_(0)
|
||||||
|
{
|
||||||
|
coeffsDict_.readEntry("absorptivity", aCoeffs_);
|
||||||
|
coeffsDict_.readEntry("emissivity", eCoeffs_);
|
||||||
|
nBands_ = aCoeffs_.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::multiBandAbsorption::~multiBandAbsorption()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::radiation::multiBandAbsorption::a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), aCoeffs_[bandI]));
|
||||||
|
}
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::multiBandAbsorption::a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return aCoeffs_[bandI];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::multiBandAbsorption::e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<scalarField>(new scalarField(pp_.size(), eCoeffs_[bandI]));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::multiBandAbsorption::e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return eCoeffs_[bandI];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,177 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015-2018 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::radiation::multiBandAbsorption
|
||||||
|
|
||||||
|
Group
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
|
||||||
|
Description
|
||||||
|
multiBandAbsorption radiation transmissivity for solids.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\verbatim
|
||||||
|
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type multiBandAbsorption;
|
||||||
|
absorptivity (0.3 0.7);
|
||||||
|
emissivity (0.3 0.7);
|
||||||
|
};
|
||||||
|
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
multiBandAbsorption.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef multiBandAbsorption_H
|
||||||
|
#define multiBandAbsorption_H
|
||||||
|
|
||||||
|
#include "wallAbsorptionEmissionModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class multiBandAbsorption Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class multiBandAbsorption
|
||||||
|
:
|
||||||
|
public wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public data
|
||||||
|
|
||||||
|
//- Maximum number of bands
|
||||||
|
static const label maxBands_ = 5;
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Absorption model dictionary
|
||||||
|
dictionary coeffsDict_;
|
||||||
|
|
||||||
|
//- Absorption coefficients
|
||||||
|
scalarList aCoeffs_;
|
||||||
|
|
||||||
|
//- Emission coefficients
|
||||||
|
scalarList eCoeffs_;
|
||||||
|
|
||||||
|
//- Bands
|
||||||
|
label nBands_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("multiBandAbsorption");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
multiBandAbsorption
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~multiBandAbsorption();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- absorptivity coefficient
|
||||||
|
tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return emission coefficient
|
||||||
|
tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return emission coefficient
|
||||||
|
scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
inline bool isGrey() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
inline label nBands() const
|
||||||
|
{
|
||||||
|
return nBands_;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace radiation
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,215 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015-2018 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 "solidAbsorption.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "mappedPatchBase.H"
|
||||||
|
#include "radiationModel.H"
|
||||||
|
#include "absorptionEmissionModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(solidAbsorption, 0);
|
||||||
|
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
wallAbsorptionEmissionModel,
|
||||||
|
solidAbsorption,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Private members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
const Foam::fvMesh& Foam::radiation::solidAbsorption::nbrRegion() const
|
||||||
|
{
|
||||||
|
const mappedPatchBase& mpp = refCast<const mappedPatchBase>(pp_);
|
||||||
|
return (refCast<const fvMesh>(mpp.sampleMesh()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::solidAbsorption::nbrPatchIndex() const
|
||||||
|
{
|
||||||
|
const mappedPatchBase& mpp = refCast<const mappedPatchBase>(pp_);
|
||||||
|
return (mpp.samplePolyPatch().index());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::solidAbsorption::solidAbsorption
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
wallAbsorptionEmissionModel(dict, pp)
|
||||||
|
{
|
||||||
|
if (!isA<mappedPatchBase>(pp))
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "\n patch type '" << pp.type()
|
||||||
|
<< "' not type '" << mappedPatchBase::typeName << "'"
|
||||||
|
<< "\n for patch " << pp.name()
|
||||||
|
<< abort(FatalIOError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::radiation::solidAbsorption::~solidAbsorption()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::solidAbsorption::a
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
// Since we're inside initEvaluate/evaluate there might be processor
|
||||||
|
// comms underway. Change the tag we use.
|
||||||
|
int oldTag = UPstream::msgType();
|
||||||
|
UPstream::msgType() = oldTag+1;
|
||||||
|
|
||||||
|
const fvMesh& nbrMesh = nbrRegion();
|
||||||
|
|
||||||
|
const radiation::radiationModel& radiation =
|
||||||
|
nbrMesh.lookupObject<radiation::radiationModel>
|
||||||
|
(
|
||||||
|
"radiationProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
scalarField absorptivity
|
||||||
|
(
|
||||||
|
radiation.absorptionEmission().a
|
||||||
|
(
|
||||||
|
bandI
|
||||||
|
)().boundaryField()
|
||||||
|
[
|
||||||
|
nbrPatchIndex()
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
const mappedPatchBase& mpp = refCast<const mappedPatchBase>(pp_);
|
||||||
|
|
||||||
|
mpp.distribute(absorptivity);
|
||||||
|
|
||||||
|
// Restore tag
|
||||||
|
UPstream::msgType() = oldTag;
|
||||||
|
|
||||||
|
return tmp<scalarField>::New(std::move(absorptivity));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::solidAbsorption::a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return a(bandI, nullptr, nullptr)()[faceI];
|
||||||
|
}
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::radiation::solidAbsorption::e
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
// Since we're inside initEvaluate/evaluate there might be processor
|
||||||
|
// comms underway. Change the tag we use.
|
||||||
|
int oldTag = UPstream::msgType();
|
||||||
|
UPstream::msgType() = oldTag+1;
|
||||||
|
|
||||||
|
const fvMesh& nbrMesh = nbrRegion();
|
||||||
|
|
||||||
|
const radiation::radiationModel& radiation =
|
||||||
|
nbrMesh.lookupObject<radiation::radiationModel>
|
||||||
|
(
|
||||||
|
"radiationProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
scalarField emissivity
|
||||||
|
(
|
||||||
|
radiation.absorptionEmission().e
|
||||||
|
(
|
||||||
|
bandI
|
||||||
|
)().boundaryField()
|
||||||
|
[
|
||||||
|
nbrPatchIndex()
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
const mappedPatchBase& mpp = refCast<const mappedPatchBase>(pp_);
|
||||||
|
|
||||||
|
mpp.distribute(emissivity);
|
||||||
|
|
||||||
|
// Restore tag
|
||||||
|
UPstream::msgType() = oldTag;
|
||||||
|
|
||||||
|
return tmp<scalarField>::New(std::move(emissivity));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::solidAbsorption::e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return e(bandI, nullptr, nullptr)()[faceI];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::radiation::solidAbsorption::nBands() const
|
||||||
|
{
|
||||||
|
const fvMesh& nbrMesh = nbrRegion();
|
||||||
|
|
||||||
|
const radiation::radiationModel& radiation =
|
||||||
|
nbrMesh.lookupObject<radiation::radiationModel>
|
||||||
|
(
|
||||||
|
"radiationProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
return (radiation.absorptionEmission().nBands());
|
||||||
|
}
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,151 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015-2018 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::radiation::solidAbsorption
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
Radiation absorptivity-emissivity model to be used on walls on
|
||||||
|
inter-regions patches when the solid opaque radiation model is used
|
||||||
|
in the solid and the wall emissivity and absorptivity are taken from
|
||||||
|
the solid radiation properties
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\verbatim
|
||||||
|
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type solidAbsorption;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
solidAbsorption.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef radiation_solidAbsorption_H
|
||||||
|
#define radiation_solidAbsorption_H
|
||||||
|
|
||||||
|
#include "wallAbsorptionEmissionModel.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class solidAbsorption Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class solidAbsorption
|
||||||
|
:
|
||||||
|
public wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
|
||||||
|
// Private members
|
||||||
|
|
||||||
|
//- Nbr region
|
||||||
|
const fvMesh& nbrRegion() const;
|
||||||
|
|
||||||
|
//- Nbr index patch
|
||||||
|
label nbrPatchIndex() const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("solidAbsorption");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
solidAbsorption(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~solidAbsorption();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- absorptivity coefficient
|
||||||
|
tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return emission coefficient
|
||||||
|
tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return emission coefficient
|
||||||
|
scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
inline bool isGrey() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
inline label nBands() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace radiation
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -23,8 +23,8 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "noTransmissivity.H"
|
#include "error.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "wallAbsorptionEmissionModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -32,60 +32,28 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
namespace radiation
|
namespace radiation
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(noTransmissivity, 0);
|
defineTypeNameAndDebug(wallAbsorptionEmissionModel, 0);
|
||||||
addToRunTimeSelectionTable
|
defineRunTimeSelectionTable(wallAbsorptionEmissionModel, dictionary);
|
||||||
(
|
|
||||||
transmissivityModel,
|
|
||||||
noTransmissivity,
|
|
||||||
dictionary
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::noTransmissivity::noTransmissivity
|
Foam::radiation::wallAbsorptionEmissionModel::wallAbsorptionEmissionModel
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary&,
|
||||||
const fvMesh& mesh
|
const polyPatch& pp
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
transmissivityModel(dict, mesh)
|
pp_(pp)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::noTransmissivity::~noTransmissivity()
|
Foam::radiation::wallAbsorptionEmissionModel::~wallAbsorptionEmissionModel()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::tmp<Foam::volScalarField> Foam::radiation::noTransmissivity::tauEff
|
|
||||||
(
|
|
||||||
const label bandI
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
return tmp<volScalarField>
|
|
||||||
(
|
|
||||||
new volScalarField
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"tau",
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar(dimless, Zero)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,160 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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::radiation::wallAbsorptionEmissionModel
|
||||||
|
|
||||||
|
Description
|
||||||
|
Based class for wall absorption emission models
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef wallAbsorptionEmissionModel_H
|
||||||
|
#define wallAbsorptionEmissionModel_H
|
||||||
|
|
||||||
|
#include "dictionary.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "polyPatch.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace radiation
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class wallAbsorptionEmissionModel Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Reference to the polyPatch
|
||||||
|
const polyPatch& pp_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("wallAbsorptionEmissionModel");
|
||||||
|
|
||||||
|
// Declare runtime constructor selection table
|
||||||
|
|
||||||
|
declareRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
autoPtr,
|
||||||
|
wallAbsorptionEmissionModel,
|
||||||
|
dictionary,
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
),
|
||||||
|
(dict, pp)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
(
|
||||||
|
const dictionary& dict, const polyPatch& pp
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Selector
|
||||||
|
|
||||||
|
static autoPtr<wallAbsorptionEmissionModel> New
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~wallAbsorptionEmissionModel();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return emissivity on patch
|
||||||
|
virtual tmp<scalarField> e
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return emissivity on face
|
||||||
|
virtual scalar e
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on patch
|
||||||
|
virtual tmp<scalarField> a
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return absorptivity on face
|
||||||
|
virtual scalar a
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
//- Is Grey
|
||||||
|
virtual bool isGrey() const = 0;
|
||||||
|
|
||||||
|
//- Number of bands
|
||||||
|
virtual label nBands() const = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace radiation
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -24,34 +24,32 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "error.H"
|
#include "error.H"
|
||||||
#include "transmissivityModel.H"
|
#include "wallAbsorptionEmissionModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::autoPtr<Foam::radiation::transmissivityModel> Foam::radiation::
|
Foam::autoPtr<Foam::radiation::wallAbsorptionEmissionModel> Foam::radiation::
|
||||||
transmissivityModel::New
|
wallAbsorptionEmissionModel::New
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const fvMesh& mesh
|
const polyPatch& pp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const word modelType(dict.get<word>("transmissivityModel"));
|
const word modelType(dict.get<word>("type"));
|
||||||
|
|
||||||
Info<< "Selecting transmissivityModel " << modelType << endl;
|
auto cstrIter = dictionaryConstructorTablePtr_->find(modelType);
|
||||||
|
|
||||||
auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType);
|
|
||||||
|
|
||||||
if (!cstrIter.found())
|
if (!cstrIter.found())
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "Unknown transmissivityModel type "
|
<< "Unknown wallAbsorptionEmissionModel type "
|
||||||
<< modelType << nl << nl
|
<< modelType << nl << nl
|
||||||
<< "Valid transmissivityModel types :" << nl
|
<< "Valid wallAbsorptionEmissionModel types :" << nl
|
||||||
<< dictionaryConstructorTablePtr_->sortedToc()
|
<< dictionaryConstructorTablePtr_->sortedToc()
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
return autoPtr<transmissivityModel>(cstrIter()(dict, mesh));
|
return autoPtr<wallAbsorptionEmissionModel>(cstrIter()(dict, pp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -36,7 +36,7 @@ namespace Foam
|
|||||||
|
|
||||||
addToRunTimeSelectionTable
|
addToRunTimeSelectionTable
|
||||||
(
|
(
|
||||||
transmissivityModel,
|
wallTransmissivityModel,
|
||||||
constantTransmissivity,
|
constantTransmissivity,
|
||||||
dictionary
|
dictionary
|
||||||
);
|
);
|
||||||
@ -49,11 +49,11 @@ namespace Foam
|
|||||||
Foam::radiation::constantTransmissivity::constantTransmissivity
|
Foam::radiation::constantTransmissivity::constantTransmissivity
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const fvMesh& mesh
|
const polyPatch& pp
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
transmissivityModel(dict, mesh),
|
wallTransmissivityModel(dict, pp),
|
||||||
coeffsDict_(dict.subDict(typeName + "Coeffs")),
|
coeffsDict_(dict),
|
||||||
tau_(coeffsDict_.get<scalar>("transmissivity"))
|
tau_(coeffsDict_.get<scalar>("transmissivity"))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -66,29 +66,27 @@ Foam::radiation::constantTransmissivity::~constantTransmissivity()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::tmp<Foam::volScalarField>
|
Foam::tmp<Foam::scalarField>
|
||||||
Foam::radiation::constantTransmissivity::tauEff(const label bandI) const
|
Foam::radiation::constantTransmissivity::t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
tmp<volScalarField> tt
|
return tmp<scalarField>(new scalarField(pp_.size(), tau_));
|
||||||
(
|
|
||||||
new volScalarField
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"tau",
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar("tau", dimless/dimLength, tau_)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
return tt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::constantTransmissivity::t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tau_;
|
||||||
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -38,7 +38,7 @@ SourceFiles
|
|||||||
#ifndef radiation_constantTransmissivity_H
|
#ifndef radiation_constantTransmissivity_H
|
||||||
#define radiation_constantTransmissivity_H
|
#define radiation_constantTransmissivity_H
|
||||||
|
|
||||||
#include "transmissivityModel.H"
|
#include "wallTransmissivityModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ namespace radiation
|
|||||||
|
|
||||||
class constantTransmissivity
|
class constantTransmissivity
|
||||||
:
|
:
|
||||||
public transmissivityModel
|
public wallTransmissivityModel
|
||||||
{
|
{
|
||||||
|
|
||||||
// Private data
|
// Private data
|
||||||
@ -61,7 +61,7 @@ class constantTransmissivity
|
|||||||
//- Coefficients dictionary
|
//- Coefficients dictionary
|
||||||
dictionary coeffsDict_;
|
dictionary coeffsDict_;
|
||||||
|
|
||||||
//- Transmissivity coefficient / []
|
//- Transmissivity coefficient
|
||||||
scalar tau_;
|
scalar tau_;
|
||||||
|
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
constantTransmissivity(const dictionary& dict, const fvMesh& mesh);
|
constantTransmissivity(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -83,8 +83,23 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return scatter coefficient
|
//- Return transmissivity coefficient
|
||||||
tmp<volScalarField> tauEff(const label bandI = 0) const;
|
tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return tranmissivity on facw
|
||||||
|
scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
//- Is Grey
|
//- Is Grey
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -23,7 +23,7 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "multiBandSolidTransmissivity.H"
|
#include "multiBandTransmissivity.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
@ -32,12 +32,12 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
namespace radiation
|
namespace radiation
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(multiBandSolidTransmissivity, 0);
|
defineTypeNameAndDebug(multiBandTransmissivity, 0);
|
||||||
|
|
||||||
addToRunTimeSelectionTable
|
addToRunTimeSelectionTable
|
||||||
(
|
(
|
||||||
transmissivityModel,
|
wallTransmissivityModel,
|
||||||
multiBandSolidTransmissivity,
|
multiBandTransmissivity,
|
||||||
dictionary
|
dictionary
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -46,14 +46,14 @@ namespace Foam
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::multiBandSolidTransmissivity::multiBandSolidTransmissivity
|
Foam::radiation::multiBandTransmissivity::multiBandTransmissivity
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const fvMesh& mesh
|
const polyPatch& pp
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
transmissivityModel(dict, mesh),
|
wallTransmissivityModel(dict, pp),
|
||||||
coeffsDict_(dict.subDict(typeName + "Coeffs")),
|
coeffsDict_(dict),
|
||||||
tauCoeffs_(),
|
tauCoeffs_(),
|
||||||
nBands_(0)
|
nBands_(0)
|
||||||
{
|
{
|
||||||
@ -64,33 +64,35 @@ Foam::radiation::multiBandSolidTransmissivity::multiBandSolidTransmissivity
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::multiBandSolidTransmissivity::~multiBandSolidTransmissivity()
|
Foam::radiation::multiBandTransmissivity::~multiBandTransmissivity()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::tmp<Foam::volScalarField>
|
Foam::tmp<Foam::scalarField>
|
||||||
Foam::radiation::multiBandSolidTransmissivity::tauEff(const label bandI) const
|
Foam::radiation::multiBandTransmissivity::t
|
||||||
|
(
|
||||||
|
const label bandI,
|
||||||
|
vectorField* incomingDirection,
|
||||||
|
scalarField* T
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
tmp<volScalarField> tt
|
return tmp<scalarField>(new scalarField(pp_.size(), tauCoeffs_[bandI]));
|
||||||
(
|
|
||||||
new volScalarField
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"t",
|
|
||||||
mesh_.time().timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar("t", dimless/dimLength, tauCoeffs_[bandI])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
return tt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::radiation::multiBandTransmissivity::t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI,
|
||||||
|
const vector dir,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tauCoeffs_[bandI];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,23 +22,34 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::radiation::multiBandSolidTransmissivity
|
Foam::radiation::multiBandTransmissivity
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpRadiationTransmissivitySubModels
|
grpwallTransmissivityModel
|
||||||
|
|
||||||
Description
|
Description
|
||||||
multiBandSolidTransmissivity radiation transmissivity for solids.
|
multiBandTransmissivity radiation transmissivity for solids.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\verbatim
|
||||||
|
|
||||||
|
wallTransmissivityModel
|
||||||
|
{
|
||||||
|
type multiBandTransmissivity;
|
||||||
|
transmissivity (0.3 0.7);
|
||||||
|
};
|
||||||
|
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
multiBandSolidTransmissivity.C
|
multiBandTransmissivity.C
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef multiBandSolidTransmissivity_H
|
#ifndef multiBandTransmissivity_H
|
||||||
#define multiBandSolidTransmissivity_H
|
#define multiBandTransmissivity_H
|
||||||
|
|
||||||
#include "transmissivityModel.H"
|
#include "wallTransmissivityModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -48,12 +59,12 @@ namespace radiation
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class multiBandSolidTransmissivity Declaration
|
Class multiBandTransmissivity Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class multiBandSolidTransmissivity
|
class multiBandTransmissivity
|
||||||
:
|
:
|
||||||
public transmissivityModel
|
public wallTransmissivityModel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -80,29 +91,44 @@ private:
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
TypeName("multiBandSolidTransmissivity");
|
TypeName("multiBandTransmissivity");
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
multiBandSolidTransmissivity
|
multiBandTransmissivity
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const fvMesh& mesh
|
const polyPatch& p
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~multiBandSolidTransmissivity();
|
virtual ~multiBandTransmissivity();
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Transmissivity coefficient
|
//- Return tranmissivity
|
||||||
tmp<volScalarField> tauEff(const label bandI) const;
|
tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return tranmissivity on face
|
||||||
|
scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
//- Is Grey
|
//- Is Grey
|
||||||
@ -111,7 +137,6 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Number of bands
|
//- Number of bands
|
||||||
inline label nBands() const
|
inline label nBands() const
|
||||||
{
|
{
|
||||||
@ -24,7 +24,7 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "error.H"
|
#include "error.H"
|
||||||
#include "transmissivityModel.H"
|
#include "wallTransmissivityModel.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -32,27 +32,27 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
namespace radiation
|
namespace radiation
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(transmissivityModel, 0);
|
defineTypeNameAndDebug(wallTransmissivityModel, 0);
|
||||||
defineRunTimeSelectionTable(transmissivityModel, dictionary);
|
defineRunTimeSelectionTable(wallTransmissivityModel, dictionary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::transmissivityModel::transmissivityModel
|
Foam::radiation::wallTransmissivityModel::wallTransmissivityModel
|
||||||
(
|
(
|
||||||
const dictionary&,
|
const dictionary&,
|
||||||
const fvMesh& mesh
|
const polyPatch& pp
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
mesh_(mesh)
|
pp_(pp)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::radiation::transmissivityModel::~transmissivityModel()
|
Foam::radiation::wallTransmissivityModel::~wallTransmissivityModel()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,20 +22,20 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::radiation::transmissivityModel
|
Foam::radiation::wallTransmissivityModel
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Base class for radiation scattering
|
Base class for wall transmissivity models
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef transmissivityModel_H
|
#ifndef wallTransmissivityModel_H
|
||||||
#define transmissivityModel_H
|
#define wallTransmissivityModel_H
|
||||||
|
|
||||||
#include "IOdictionary.H"
|
#include "dictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
#include "volFields.H"
|
#include "polyPatch.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -45,62 +45,78 @@ namespace radiation
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class transmissivityModel Declaration
|
Class wallTransmissivityModel Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class transmissivityModel
|
class wallTransmissivityModel
|
||||||
{
|
{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// Protected data
|
// Protected data
|
||||||
|
|
||||||
//- Reference to the fvMesh
|
//- Reference to the polyPatch
|
||||||
const fvMesh& mesh_;
|
const polyPatch& pp_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
TypeName("transmissivityModel");
|
TypeName("wallTransmissivityModel");
|
||||||
|
|
||||||
// Declare runtime constructor selection table
|
// Declare runtime constructor selection table
|
||||||
|
|
||||||
declareRunTimeSelectionTable
|
declareRunTimeSelectionTable
|
||||||
(
|
(
|
||||||
autoPtr,
|
autoPtr,
|
||||||
transmissivityModel,
|
wallTransmissivityModel,
|
||||||
dictionary,
|
dictionary,
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const fvMesh& mesh
|
const polyPatch& pp
|
||||||
),
|
),
|
||||||
(dict, mesh)
|
(dict, pp)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
transmissivityModel(const dictionary& dict, const fvMesh& mesh);
|
wallTransmissivityModel(const dictionary& dict, const polyPatch& pp);
|
||||||
|
|
||||||
|
|
||||||
// Selector
|
// Selector
|
||||||
|
|
||||||
static autoPtr<transmissivityModel> New
|
static autoPtr<wallTransmissivityModel> New
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const fvMesh& mesh
|
const polyPatch& pp
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~transmissivityModel();
|
virtual ~wallTransmissivityModel();
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return scatter coefficient
|
//- Return tranmissivity
|
||||||
virtual tmp<volScalarField> tauEff(const label bandI = 0) const = 0;
|
virtual tmp<scalarField> t
|
||||||
|
(
|
||||||
|
const label bandI = 0,
|
||||||
|
vectorField* incomingDirection = nullptr,
|
||||||
|
scalarField* T = nullptr
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//- Return tranmissivity on face
|
||||||
|
virtual scalar t
|
||||||
|
(
|
||||||
|
const label faceI,
|
||||||
|
const label bandI = 0,
|
||||||
|
const vector dir = Zero,
|
||||||
|
const scalar T = 0
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
|
||||||
//- Is Grey
|
//- Is Grey
|
||||||
virtual bool isGrey() const = 0;
|
virtual bool isGrey() const = 0;
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 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 "error.H"
|
||||||
|
#include "wallTransmissivityModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::autoPtr<Foam::radiation::wallTransmissivityModel> Foam::radiation::
|
||||||
|
wallTransmissivityModel::New
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyPatch& pp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const word modelType(dict.get<word>("wallTransmissivityModel"));
|
||||||
|
|
||||||
|
auto cstrIter = dictionaryConstructorTablePtr_->find(modelType);
|
||||||
|
|
||||||
|
if (!cstrIter.found())
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Unknown wallTransmissivityModel type "
|
||||||
|
<< modelType << nl << nl
|
||||||
|
<< "Valid wallTransmissivityModel types :" << nl
|
||||||
|
<< dictionaryConstructorTablePtr_->sortedToc()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return autoPtr<wallTransmissivityModel>(cstrIter()(dict, pp));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
55
tutorials/basic/potentialFoam/cylinder/0/U
Normal file
55
tutorials/basic/potentialFoam/cylinder/0/U
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1806 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volVectorField;
|
||||||
|
object U;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform (0 0 0);
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
down
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
|
||||||
|
right
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
up
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
|
||||||
|
left
|
||||||
|
{
|
||||||
|
type uniformFixedValue;
|
||||||
|
uniformValue constant (1 0 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinder
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultFaces
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
55
tutorials/basic/potentialFoam/cylinder/0/p
Normal file
55
tutorials/basic/potentialFoam/cylinder/0/p
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1806 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object p;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
down
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
|
||||||
|
right
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
up
|
||||||
|
{
|
||||||
|
type symmetryPlane;
|
||||||
|
}
|
||||||
|
|
||||||
|
left
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinder
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultFaces
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -17,16 +17,16 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 0.8;
|
emissivity 0.8;
|
||||||
absorptivity 0.0;
|
absorptivity 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
inlet
|
inlet
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 0.9;
|
emissivity 0.9;
|
||||||
absorptivity 0.0;
|
absorptivity 0.9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,8 +22,6 @@ radiationModel opaqueSolid;
|
|||||||
|
|
||||||
absorptionEmissionModel none;
|
absorptionEmissionModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
scatterModel none;
|
scatterModel none;
|
||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|||||||
@ -187,6 +187,4 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -18,12 +18,16 @@ FoamFile
|
|||||||
|
|
||||||
region0_to_pyrolysisRegion_coupledWall
|
region0_to_pyrolysisRegion_coupledWall
|
||||||
{
|
{
|
||||||
mode solidRadiation;
|
type opaqueDiffusive;
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type solidAbsorption;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
absorptivity 1.0;
|
absorptivity 1.0;
|
||||||
transmissivity 0.0;
|
transmissivity 0.0;
|
||||||
|
|||||||
@ -37,6 +37,5 @@ greyMeanSolidAbsorptionEmissionCoeffs
|
|||||||
|
|
||||||
scatterModel none;
|
scatterModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -52,7 +52,5 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -18,15 +18,17 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type boundaryRadiation;
|
type lookup;
|
||||||
mode lookup;
|
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
"(region0_to.*)"
|
"(region0_to.*)"
|
||||||
{
|
{
|
||||||
type boundaryRadiation;
|
type opaqueDiffusive;
|
||||||
mode solidRadiation;
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type solidAbsorption;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -39,6 +39,4 @@ greyMeanSolidAbsorptionEmissionCoeffs
|
|||||||
|
|
||||||
scatterModel none;
|
scatterModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -189,6 +189,4 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,7 +17,7 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,5 @@ greyMeanSolidAbsorptionEmissionCoeffs
|
|||||||
}
|
}
|
||||||
|
|
||||||
scatterModel none;
|
scatterModel none;
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -30,6 +30,5 @@ P1Coeffs
|
|||||||
|
|
||||||
scatterModel none;
|
scatterModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,25 +17,25 @@ FoamFile
|
|||||||
|
|
||||||
base
|
base
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
outlet
|
outlet
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sides
|
sides
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inlet
|
inlet
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -194,7 +194,5 @@ mixtureFractionSootCoeffs
|
|||||||
Wsoot 12;
|
Wsoot 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,9 +17,8 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
absorptivity 0.0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -188,7 +188,5 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,7 +17,7 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
absorptivity 1.0;
|
absorptivity 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,6 +43,4 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,7 +17,7 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
absorptivity 1.0;
|
absorptivity 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,6 +35,4 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,7 +17,7 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
absorptivity 1.0;
|
absorptivity 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,6 +43,5 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -54,8 +54,7 @@ boundaryField
|
|||||||
air_to_floor
|
air_to_floor
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
value uniform 300;
|
value uniform 350;
|
||||||
inletValue uniform 300;
|
|
||||||
Tnbr T;
|
Tnbr T;
|
||||||
kappaMethod fluidThermo;
|
kappaMethod fluidThermo;
|
||||||
qrNbr none;
|
qrNbr none;
|
||||||
@ -65,8 +64,7 @@ boundaryField
|
|||||||
air_to_solid
|
air_to_solid
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
value uniform 300;
|
value uniform 350;
|
||||||
inletValue uniform 300;
|
|
||||||
Tnbr T;
|
Tnbr T;
|
||||||
kappaMethod fluidThermo;
|
kappaMethod fluidThermo;
|
||||||
qrNbr none;
|
qrNbr none;
|
||||||
|
|||||||
@ -48,12 +48,14 @@ boundaryField
|
|||||||
}
|
}
|
||||||
air_to_floor
|
air_to_floor
|
||||||
{
|
{
|
||||||
type calculated;
|
type greyDiffusiveRadiationViewFactor;
|
||||||
|
qro uniform 0;
|
||||||
value uniform 0;
|
value uniform 0;
|
||||||
}
|
}
|
||||||
air_to_solid
|
air_to_solid
|
||||||
{
|
{
|
||||||
type calculated;
|
type greyDiffusiveRadiationViewFactor;
|
||||||
|
qro uniform 0;
|
||||||
value uniform 0;
|
value uniform 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,7 +17,7 @@ FoamFile
|
|||||||
|
|
||||||
dimensions [ 0 0 0 1 0 0 0 ];
|
dimensions [ 0 0 0 1 0 0 0 ];
|
||||||
|
|
||||||
internalField uniform 300;
|
internalField uniform 350;
|
||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
@ -29,7 +29,7 @@ boundaryField
|
|||||||
solid_to_air
|
solid_to_air
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
value uniform 300;
|
value uniform 350;
|
||||||
Tnbr T;
|
Tnbr T;
|
||||||
kappaMethod solidThermo;
|
kappaMethod solidThermo;
|
||||||
qrNbr qr;
|
qrNbr qr;
|
||||||
|
|||||||
@ -15,4 +15,6 @@ rm -f constant/air/globalFaceFaces
|
|||||||
rm -f constant/air/mapDist
|
rm -f constant/air/mapDist
|
||||||
rm -f constant/air/visibleFaceFaces
|
rm -f constant/air/visibleFaceFaces
|
||||||
|
|
||||||
|
rm -rf constant/triSurface
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -17,20 +17,41 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type transparent;
|
||||||
emissivity 1.0;
|
|
||||||
absorptivity 0.0;
|
wallAbsorptionEmissionModel
|
||||||
transmissivity 1.0;
|
{
|
||||||
|
type multiBandAbsorption;
|
||||||
|
emissivity (1 1);
|
||||||
|
absorptivity (0 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
air_to_solid
|
air_to_solid
|
||||||
{
|
{
|
||||||
mode solidRadiation;
|
type opaqueReflective;
|
||||||
|
|
||||||
|
// Fraction of the reflected is diffussive
|
||||||
|
fd 0.0; // 0: all specular 1: all diffusive
|
||||||
|
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type solidAbsorption;
|
||||||
|
//multiBandAbsorption;
|
||||||
|
//absorptivity (0.1 0.1);
|
||||||
|
//emissivity (0.1 0.1);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
air_to_floor
|
air_to_floor
|
||||||
{
|
{
|
||||||
mode solidRadiation;
|
type opaqueDiffusive;
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type multiBandAbsorption;
|
||||||
|
absorptivity (0.3 0.7);
|
||||||
|
emissivity (0.3 0.7);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,21 +17,19 @@ FoamFile
|
|||||||
|
|
||||||
radiation on;
|
radiation on;
|
||||||
|
|
||||||
radiationModel solarLoad;
|
radiationModel viewFactor;//solarLoad;
|
||||||
|
|
||||||
solarLoadCoeffs
|
solarLoadCoeffs
|
||||||
{
|
{
|
||||||
// Calculate reflected/secondary heat fluxes
|
|
||||||
useVFbeamToDiffuse true;
|
|
||||||
|
|
||||||
// Sun direction ray model. Give the sunDirection or calculated using the
|
// Sun direction ray model. Give the sunDirection or calculated using the
|
||||||
// (solar calculator)
|
// (solar calculator)
|
||||||
sunDirectionModel sunDirTracking;//sunDirConstant;
|
sunDirectionModel sunDirTracking; //sunDirConstant
|
||||||
|
|
||||||
// Time interval to update Sun position (sec)
|
// Time interval to update Sun position (sec)
|
||||||
sunTrackingUpdateInterval 800;
|
sunTrackingUpdateInterval 800;
|
||||||
|
|
||||||
//sunDirection (-1 1 -1);
|
//sunDirection (1 0 -1);
|
||||||
|
|
||||||
localStandardMeridian 9; // GMT offset (hours)
|
localStandardMeridian 9; // GMT offset (hours)
|
||||||
startDay 204; // day of the year
|
startDay 204; // day of the year
|
||||||
@ -39,12 +37,13 @@ solarLoadCoeffs
|
|||||||
longitude 139.74; // longitude (degrees)
|
longitude 139.74; // longitude (degrees)
|
||||||
latitude 35.658; // latitude (degrees)
|
latitude 35.658; // latitude (degrees)
|
||||||
|
|
||||||
|
|
||||||
// Grid orientation
|
// Grid orientation
|
||||||
gridUp (0 0 1);
|
gridUp (0 0 1);
|
||||||
gridEast (1 0 0);
|
gridEast (1 0 0);
|
||||||
|
|
||||||
// Energy spectrum
|
// Energy spectrum
|
||||||
spectralDistribution (1 1);
|
spectralDistribution (2 1);
|
||||||
|
|
||||||
// Solar model:
|
// Solar model:
|
||||||
|
|
||||||
@ -52,14 +51,14 @@ solarLoadCoeffs
|
|||||||
sunLoadModel sunLoadFairWeatherConditions;
|
sunLoadModel sunLoadFairWeatherConditions;
|
||||||
|
|
||||||
// Sun load constant model
|
// Sun load constant model
|
||||||
directSolarRad 500; // [w/m2]
|
//directSolarRad 500; // [w/m2]
|
||||||
diffuseSolarRad 40; // [w/m2]
|
//diffuseSolarRad 40; // [w/m2]
|
||||||
|
|
||||||
// Fair Weather Conditions Model Constants.
|
// Fair Weather Conditions Model Constants.
|
||||||
// Calculate beta from the Solar calculator or input
|
// Calculate beta from the Solar calculator or input
|
||||||
A 300; // Apparent solar irradiation at air mass m = 0
|
A 500; // Apparent solar irradiation at air mass m = 0
|
||||||
B 0.142; // Atmospheric extinction coefficient
|
B 0.142; // Atmospheric extinction coefficient
|
||||||
//beta 45; // Solar altitude (in degrees) above the horizontal
|
//beta 45; // Solar altitude (in degrees) above the horizontal
|
||||||
|
|
||||||
// Theoretical maximum model constants
|
// Theoretical maximum model constants
|
||||||
Setrn 10;
|
Setrn 10;
|
||||||
@ -74,6 +73,19 @@ solarLoadCoeffs
|
|||||||
// Radiative flux coupling flags
|
// Radiative flux coupling flags
|
||||||
solidCoupled true; //Couple through qr the solid regions (default true)
|
solidCoupled true; //Couple through qr the solid regions (default true)
|
||||||
wallCoupled false; //Couple through qr wall patches (default false)
|
wallCoupled false; //Couple through qr wall patches (default false)
|
||||||
|
|
||||||
|
// Reflecting rays
|
||||||
|
useReflectedRays true;
|
||||||
|
reflecting
|
||||||
|
{
|
||||||
|
nPhi 10;
|
||||||
|
nTheta 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
absorptionEmissionModel none;
|
||||||
|
scatterModel none;
|
||||||
|
sootModel none;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -82,6 +94,10 @@ viewFactorCoeffs
|
|||||||
smoothing true; //Smooth view factor matrix (use when in a close surface
|
smoothing true; //Smooth view factor matrix (use when in a close surface
|
||||||
//to force Sum(Fij = 1)
|
//to force Sum(Fij = 1)
|
||||||
constantEmissivity true; //constant emissivity on surfaces.
|
constantEmissivity true; //constant emissivity on surfaces.
|
||||||
|
|
||||||
|
nBands 2;
|
||||||
|
|
||||||
|
useSolarLoad true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Number of flow iterations per radiation iteration
|
// Number of flow iterations per radiation iteration
|
||||||
@ -93,6 +109,4 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -24,15 +24,8 @@ absorptionEmissionModel multiBandSolidAbsorptionEmission;
|
|||||||
|
|
||||||
multiBandSolidAbsorptionEmissionCoeffs
|
multiBandSolidAbsorptionEmissionCoeffs
|
||||||
{
|
{
|
||||||
absorptivity (0.7 0.7);
|
absorptivity (0.3 0.7);
|
||||||
emissivity (0.7 0.7);
|
emissivity (0.3 0.7);
|
||||||
}
|
|
||||||
|
|
||||||
transmissivityModel multiBandSolidTransmissivity;
|
|
||||||
|
|
||||||
multiBandSolidTransmissivityCoeffs
|
|
||||||
{
|
|
||||||
transmissivity (0 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
scatterModel none;
|
scatterModel none;
|
||||||
|
|||||||
@ -24,15 +24,8 @@ absorptionEmissionModel multiBandSolidAbsorptionEmission;
|
|||||||
|
|
||||||
multiBandSolidAbsorptionEmissionCoeffs
|
multiBandSolidAbsorptionEmissionCoeffs
|
||||||
{
|
{
|
||||||
absorptivity (0.7 0.7);
|
absorptivity (0.1 0.1);
|
||||||
emissivity (0.7 0.7);
|
emissivity (0.1 0.1);
|
||||||
}
|
|
||||||
|
|
||||||
transmissivityModel multiBandSolidTransmissivity;
|
|
||||||
|
|
||||||
multiBandSolidTransmissivityCoeffs
|
|
||||||
{
|
|
||||||
transmissivity (0 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
scatterModel none;
|
scatterModel none;
|
||||||
|
|||||||
@ -18,15 +18,18 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
absorptivity 1.0;
|
absorptivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
"bottomAir_to_.*"
|
"bottomAir_to_.*"
|
||||||
{
|
{
|
||||||
type boundaryRadiation;
|
type opaqueDiffusive;
|
||||||
mode solidRadiation;
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type solidAbsorption;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,4 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -33,5 +33,5 @@ scatterModel none;
|
|||||||
|
|
||||||
sootModel none;
|
sootModel none;
|
||||||
|
|
||||||
transmissivityModel none;
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -17,13 +17,17 @@ FoamFile
|
|||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
mode lookup;
|
type lookup;
|
||||||
emissivity 1.0;
|
emissivity 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
"topAir_to_.*"
|
"topAir_to_.*"
|
||||||
{
|
{
|
||||||
mode solidRadiation;
|
type opaqueDiffusive;
|
||||||
|
wallAbsorptionEmissionModel
|
||||||
|
{
|
||||||
|
type solidAbsorption;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
Reference in New Issue
Block a user