ENH: add face area support into PrimitivePatch (issue #266)

This commit is contained in:
Mark Olesen
2016-10-20 08:32:05 +02:00
parent 40252e99aa
commit caba74dcfa
4 changed files with 167 additions and 7 deletions

View File

@ -58,6 +58,8 @@ PrimitivePatch
localPointsPtr_(nullptr),
localPointOrderPtr_(nullptr),
faceCentresPtr_(nullptr),
faceAreasPtr_(nullptr),
magFaceAreasPtr_(nullptr),
faceNormalsPtr_(nullptr),
pointNormalsPtr_(nullptr)
{}
@ -94,6 +96,8 @@ PrimitivePatch
localPointsPtr_(nullptr),
localPointOrderPtr_(nullptr),
faceCentresPtr_(nullptr),
faceAreasPtr_(nullptr),
magFaceAreasPtr_(nullptr),
faceNormalsPtr_(nullptr),
pointNormalsPtr_(nullptr)
{}
@ -131,6 +135,8 @@ PrimitivePatch
localPointsPtr_(nullptr),
localPointOrderPtr_(nullptr),
faceCentresPtr_(nullptr),
faceAreasPtr_(nullptr),
magFaceAreasPtr_(nullptr),
faceNormalsPtr_(nullptr),
pointNormalsPtr_(nullptr)
{}
@ -167,6 +173,8 @@ PrimitivePatch
localPointsPtr_(nullptr),
localPointOrderPtr_(nullptr),
faceCentresPtr_(nullptr),
faceAreasPtr_(nullptr),
magFaceAreasPtr_(nullptr),
faceNormalsPtr_(nullptr),
pointNormalsPtr_(nullptr)
{}
@ -524,6 +532,46 @@ faceCentres() const
}
template
<
class Face,
template<class> class FaceList,
class PointField,
class PointType
>
const Foam::Field<PointType>&
Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::
faceAreas() const
{
if (!faceAreasPtr_)
{
calcFaceAreas();
}
return *faceAreasPtr_;
}
template
<
class Face,
template<class> class FaceList,
class PointField,
class PointType
>
const Foam::Field<Foam::scalar>&
Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::
magFaceAreas() const
{
if (!magFaceAreasPtr_)
{
calcMagFaceAreas();
}
return *magFaceAreasPtr_;
}
template
<
class Face,

View File

@ -168,6 +168,12 @@ private:
//- Face centres
mutable Field<PointType>* faceCentresPtr_;
//- Face area vectors
mutable Field<PointType>* faceAreasPtr_;
//- Mag face area
mutable Field<scalar>* magFaceAreasPtr_;
//- Face unit normals
mutable Field<PointType>* faceNormalsPtr_;
@ -210,6 +216,12 @@ private:
//- Calculate face centres
void calcFaceCentres() const;
//- Calculate face area vectors
void calcFaceAreas() const;
//- Calculate face area magnitudes
void calcMagFaceAreas() const;
//- Calculate unit face normals
void calcFaceNormals() const;
@ -381,7 +393,13 @@ public:
//- Return face centres for patch
const Field<PointType>& faceCentres() const;
//- Return face normals for patch
//- Return face area vectors for patch
const Field<PointType>& faceAreas() const;
//- Return face area magnitudes for patch
const Field<scalar>& magFaceAreas() const;
//- Return face unit normals for patch
const Field<PointType>& faceNormals() const;
//- Return point normals for patch

View File

@ -47,6 +47,8 @@ clearGeom()
deleteDemandDrivenData(localPointsPtr_);
deleteDemandDrivenData(faceCentresPtr_);
deleteDemandDrivenData(faceAreasPtr_);
deleteDemandDrivenData(magFaceAreasPtr_);
deleteDemandDrivenData(faceNormalsPtr_);
deleteDemandDrivenData(pointNormalsPtr_);
}

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -52,7 +52,7 @@ calcMeshData() const
if (meshPointsPtr_ || localFacesPtr_)
{
FatalErrorInFunction
<< "meshPointsPtr_ or localFacesPtr_already allocated"
<< "meshPointsPtr_ or localFacesPtr_ already allocated"
<< abort(FatalError);
}
@ -210,7 +210,7 @@ calcLocalPoints() const
if (localPointsPtr_)
{
FatalErrorInFunction
<< "localPointsPtr_already allocated"
<< "localPointsPtr_ already allocated"
<< abort(FatalError);
}
@ -259,7 +259,7 @@ calcPointNormals() const
if (pointNormalsPtr_)
{
FatalErrorInFunction
<< "pointNormalsPtr_already allocated"
<< "pointNormalsPtr_ already allocated"
<< abort(FatalError);
}
@ -323,7 +323,7 @@ calcFaceCentres() const
if (faceCentresPtr_)
{
FatalErrorInFunction
<< "faceCentresPtr_already allocated"
<< "faceCentresPtr_ already allocated"
<< abort(FatalError);
}
@ -346,6 +346,98 @@ calcFaceCentres() const
}
template
<
class Face,
template<class> class FaceList,
class PointField,
class PointType
>
void
Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::
calcMagFaceAreas() const
{
if (debug)
{
Pout<< "PrimitivePatch<Face, FaceList, PointField, PointType>::"
"calcMagFaceAreas() : "
"calculating magFaceAreas in PrimitivePatch"
<< endl;
}
// It is an error to calculate these more than once.
if (magFaceAreasPtr_)
{
FatalErrorInFunction
<< "magFaceAreasPtr_ already allocated"
<< abort(FatalError);
}
magFaceAreasPtr_ = new Field<scalar>(this->size());
Field<scalar>& a = *magFaceAreasPtr_;
forAll(a, facei)
{
a[facei] = this->operator[](facei).mag(points_);
}
if (debug)
{
Pout<< "PrimitivePatch<Face, FaceList, PointField, PointType>::"
"calcMagFaceAreas() : "
"finished calculating magFaceAreas in PrimitivePatch"
<< endl;
}
}
template
<
class Face,
template<class> class FaceList,
class PointField,
class PointType
>
void
Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::
calcFaceAreas() const
{
if (debug)
{
Pout<< "PrimitivePatch<Face, FaceList, PointField, PointType>::"
"calcFaceAreas() : "
"calculating faceAreas in PrimitivePatch"
<< endl;
}
// It is considered an error to attempt to recalculate faceNormals
// if they have already been calculated.
if (faceAreasPtr_)
{
FatalErrorInFunction
<< "faceAreasPtr_ already allocated"
<< abort(FatalError);
}
faceAreasPtr_ = new Field<PointType>(this->size());
Field<PointType>& n = *faceAreasPtr_;
forAll(n, facei)
{
n[facei] = this->operator[](facei).normal(points_);
}
if (debug)
{
Pout<< "PrimitivePatch<Face, FaceList, PointField, PointType>::"
"calcFaceAreas() : "
"finished calculating faceAreas in PrimitivePatch"
<< endl;
}
}
template
<
class Face,
@ -370,7 +462,7 @@ calcFaceNormals() const
if (faceNormalsPtr_)
{
FatalErrorInFunction
<< "faceNormalsPtr_already allocated"
<< "faceNormalsPtr_ already allocated"
<< abort(FatalError);
}