diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C index 04c3f9e62a..fdff5f05c3 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C @@ -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 FaceList, + class PointField, + class PointType +> +const Foam::Field& +Foam::PrimitivePatch:: +faceAreas() const +{ + if (!faceAreasPtr_) + { + calcFaceAreas(); + } + + return *faceAreasPtr_; +} + + +template +< + class Face, + template class FaceList, + class PointField, + class PointType +> +const Foam::Field& +Foam::PrimitivePatch:: +magFaceAreas() const +{ + if (!magFaceAreasPtr_) + { + calcMagFaceAreas(); + } + + return *magFaceAreasPtr_; +} + + template < class Face, diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H index 5668e8f064..6e732b9fd8 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H @@ -168,6 +168,12 @@ private: //- Face centres mutable Field* faceCentresPtr_; + //- Face area vectors + mutable Field* faceAreasPtr_; + + //- Mag face area + mutable Field* magFaceAreasPtr_; + //- Face unit normals mutable Field* 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& faceCentres() const; - //- Return face normals for patch + //- Return face area vectors for patch + const Field& faceAreas() const; + + //- Return face area magnitudes for patch + const Field& magFaceAreas() const; + + //- Return face unit normals for patch const Field& faceNormals() const; //- Return point normals for patch diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C index 3ac89f2c61..3a226c385d 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C @@ -47,6 +47,8 @@ clearGeom() deleteDemandDrivenData(localPointsPtr_); deleteDemandDrivenData(faceCentresPtr_); + deleteDemandDrivenData(faceAreasPtr_); + deleteDemandDrivenData(magFaceAreasPtr_); deleteDemandDrivenData(faceNormalsPtr_); deleteDemandDrivenData(pointNormalsPtr_); } diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C index 10f758c648..50e4222be0 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C @@ -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 FaceList, + class PointField, + class PointType +> +void +Foam::PrimitivePatch:: +calcMagFaceAreas() const +{ + if (debug) + { + Pout<< "PrimitivePatch::" + "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(this->size()); + Field& a = *magFaceAreasPtr_; + + forAll(a, facei) + { + a[facei] = this->operator[](facei).mag(points_); + } + + if (debug) + { + Pout<< "PrimitivePatch::" + "calcMagFaceAreas() : " + "finished calculating magFaceAreas in PrimitivePatch" + << endl; + } +} + + +template +< + class Face, + template class FaceList, + class PointField, + class PointType +> +void +Foam::PrimitivePatch:: +calcFaceAreas() const +{ + if (debug) + { + Pout<< "PrimitivePatch::" + "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(this->size()); + + Field& n = *faceAreasPtr_; + + forAll(n, facei) + { + n[facei] = this->operator[](facei).normal(points_); + } + + if (debug) + { + Pout<< "PrimitivePatch::" + "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); }