FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

polyAddFace.H

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------------*\
00002   =========                 |
00003   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
00004    \\    /   O peration     |
00005     \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
00006      \\/     M anipulation  |
00007 -------------------------------------------------------------------------------
00008 License
00009     This file is part of OpenFOAM.
00010 
00011     OpenFOAM is free software: you can redistribute it and/or modify it
00012     under the terms of the GNU General Public License as published by
00013     the Free Software Foundation, either version 3 of the License, or
00014     (at your option) any later version.
00015 
00016     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
00017     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00018     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00019     for more details.
00020 
00021     You should have received a copy of the GNU General Public License
00022     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
00023 
00024 Class
00025     Foam::polyAddFace
00026 
00027 Description
00028     A face addition data class. A face can be inflated either from a
00029     point or from another face and can either be in internal or a
00030     boundary face.
00031 
00032 \*---------------------------------------------------------------------------*/
00033 
00034 #ifndef polyAddFace_H
00035 #define polyAddFace_H
00036 
00037 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00038 
00039 #include <OpenFOAM/label.H>
00040 #include <OpenFOAM/face.H>
00041 #include <dynamicMesh/topoAction.H>
00042 
00043 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00044 
00045 namespace Foam
00046 {
00047 
00048 /*---------------------------------------------------------------------------*\
00049                            Class polyAddFace Declaration
00050 \*---------------------------------------------------------------------------*/
00051 
00052 class polyAddFace
00053 :
00054     public topoAction
00055 {
00056     // Private data
00057 
00058         //- Face identifier
00059         face face_;
00060 
00061         //- Face owner
00062         label owner_;
00063 
00064         //- Face neighbour
00065         label neighbour_;
00066 
00067         //- Master point ID for faces blown up from points
00068         label masterPointID_;
00069 
00070         //- Master edge ID for faces blown up from edges
00071         label masterEdgeID_;
00072 
00073         //- Master face ID for faces blown up from faces
00074         label masterFaceID_;
00075 
00076         //- Does the face flux need to be flipped
00077         bool flipFaceFlux_;
00078 
00079         //- Boundary patch ID
00080         label patchID_;
00081 
00082         //- Face zone ID
00083         label zoneID_;
00084 
00085         //- Face zone flip
00086         bool zoneFlip_;
00087 
00088 
00089 public:
00090 
00091     // Static data members
00092 
00093         //- Runtime type information
00094         TypeName("addFace");
00095 
00096 
00097     // Constructors
00098 
00099         //- Construct null.  Used for constructing lists
00100         polyAddFace()
00101         :
00102             face_(0),
00103             owner_(-1),
00104             neighbour_(-1),
00105             masterPointID_(-1),
00106             masterEdgeID_(-1),
00107             masterFaceID_(-1),
00108             flipFaceFlux_(false),
00109             patchID_(-1),
00110             zoneID_(-1),
00111             zoneFlip_(false)
00112         {}
00113 
00114 
00115         //- Construct from components
00116         polyAddFace
00117         (
00118             const face& f,
00119             const label owner,
00120             const label neighbour,
00121             const label masterPointID,
00122             const label masterEdgeID,
00123             const label masterFaceID,
00124             const bool flipFaceFlux,
00125             const label patchID,
00126             const label zoneID,
00127             const bool zoneFlip
00128         )
00129         :
00130             face_(f),
00131             owner_(owner),
00132             neighbour_(neighbour),
00133             masterPointID_(masterPointID),
00134             masterEdgeID_(masterEdgeID),
00135             masterFaceID_(masterFaceID),
00136             flipFaceFlux_(flipFaceFlux),
00137             patchID_(patchID),
00138             zoneID_(zoneID),
00139             zoneFlip_(zoneFlip)
00140         {
00141             if (face_.size() < 3)
00142             {
00143                 FatalErrorIn
00144                 (
00145                     "polyAddFace\n"
00146                     "(\n"
00147                     "    const face& f,\n"
00148                     "    const label owner,"
00149                     "    const label neighbour,\n"
00150                     "    const label masterPointID,\n"
00151                     "    const label masterEdgeID,\n"
00152                     "    const label masterFaceID,\n"
00153                     "    const bool flipFaceFlux,\n"
00154                     "    const label patchID,\n"
00155                     "    const label zoneID,\n"
00156                     "    const bool zoneFlip\n"
00157                     ")"
00158                 )   << "Invalid face: less than 3 points.  "
00159                     << "This is not allowed.\n"
00160                     << "Face: " << face_
00161                     << " masterPointID:" << masterPointID_
00162                     << " masterEdgeID:" << masterEdgeID_
00163                     << " masterFaceID:" << masterFaceID_
00164                     << " patchID:" << patchID_
00165                     << " owner:" << owner_
00166                     << " neighbour:" << neighbour_
00167                     << abort(FatalError);
00168             }
00169 
00170             if (min(face_) < 0)
00171             {
00172                 FatalErrorIn
00173                 (
00174                     "polyAddFace\n"
00175                     "(\n"
00176                     "    const face& f,\n"
00177                     "    const label owner,"
00178                     "    const label neighbour,\n"
00179                     "    const label masterPointID,\n"
00180                     "    const label masterEdgeID,\n"
00181                     "    const label masterFaceID,\n"
00182                     "    const bool flipFaceFlux,\n"
00183                     "    const label patchID,\n"
00184                     "    const label zoneID,\n"
00185                     "    const bool zoneFlip\n"
00186                     ")"
00187                 )   << "Face contains invalid vertex ID: " << face_ << ".  "
00188                     << "This is not allowed.\n"
00189                     << "Face: " << face_
00190                     << " masterPointID:" << masterPointID_
00191                     << " masterEdgeID:" << masterEdgeID_
00192                     << " masterFaceID:" << masterFaceID_
00193                     << " patchID:" << patchID_
00194                     << " owner:" << owner_
00195                     << " neighbour:" << neighbour_
00196                     << abort(FatalError);
00197             }
00198 
00199             if (min(owner_, neighbour_) >= 0 && owner_ == neighbour_)
00200             {
00201                 FatalErrorIn
00202                 (
00203                     "polyAddFace\n"
00204                     "(\n"
00205                     "    const face& f,\n"
00206                     "    const label owner,"
00207                     "    const label neighbour,\n"
00208                     "    const label masterPointID,\n"
00209                     "    const label masterEdgeID,\n"
00210                     "    const label masterFaceID,\n"
00211                     "    const bool flipFaceFlux,\n"
00212                     "    const label patchID,\n"
00213                     "    const label zoneID,\n"
00214                     "    const bool zoneFlip\n"
00215                     ")"
00216                 )   << "Face owner and neighbour are identical.  "
00217                     << "This is not allowed.\n"
00218                     << "Face: " << face_
00219                     << " masterPointID:" << masterPointID_
00220                     << " masterEdgeID:" << masterEdgeID_
00221                     << " masterFaceID:" << masterFaceID_
00222                     << " patchID:" << patchID_
00223                     << " owner:" << owner_
00224                     << " neighbour:" << neighbour_
00225                     << abort(FatalError);
00226             }
00227 
00228             if (neighbour_ >= 0 && patchID >= 0)
00229             {
00230                 FatalErrorIn
00231                 (
00232                     "polyAddFace\n"
00233                     "(\n"
00234                     "    const face& f,\n"
00235                     "    const label owner,"
00236                     "    const label neighbour,\n"
00237                     "    const label masterPointID,\n"
00238                     "    const label masterEdgeID,\n"
00239                     "    const label masterFaceID,\n"
00240                     "    const bool flipFaceFlux,\n"
00241                     "    const label patchID,\n"
00242                     "    const label zoneID,\n"
00243                     "    const bool zoneFlip\n"
00244                     ")"
00245                 )   << "Patch face has got a neighbour.  Patch ID: " << patchID
00246                     << ".  This is not allowed.\n"
00247                     << "Face: " << face_
00248                     << " masterPointID:" << masterPointID_
00249                     << " masterEdgeID:" << masterEdgeID_
00250                     << " masterFaceID:" << masterFaceID_
00251                     << " patchID:" << patchID_
00252                     << " owner:" << owner_
00253                     << " neighbour:" << neighbour_
00254                     << abort(FatalError);
00255             }
00256 
00257             if (owner_ < 0 && zoneID < 0)
00258             {
00259                 FatalErrorIn
00260                 (
00261                     "polyAddFace\n"
00262                     "(\n"
00263                     "    const face& f,\n"
00264                     "    const label owner,"
00265                     "    const label neighbour,\n"
00266                     "    const label patchID,\n"
00267                     "    const label zoneID"
00268                     ")"
00269                 )   << "Face has no owner and is not in a zone.  "
00270                     << "This is not allowed.\n"
00271                     << "Face: " << face_
00272                     << "Face: " << face_
00273                     << " masterPointID:" << masterPointID_
00274                     << " masterEdgeID:" << masterEdgeID_
00275                     << " masterFaceID:" << masterFaceID_
00276                     << " patchID:" << patchID_
00277                     << " owner:" << owner_
00278                     << " neighbour:" << neighbour_
00279                     << abort(FatalError);
00280             }
00281 
00282             if (zoneID_ == -1 && zoneFlip)
00283             {
00284                 FatalErrorIn
00285                 (
00286                     "polyAddFace\n"
00287                     "(\n"
00288                     "    const face& f,\n"
00289                     "    const label owner,"
00290                     "    const label neighbour,\n"
00291                     "    const label masterPointID,\n"
00292                     "    const label masterEdgeID,\n"
00293                     "    const label masterFaceID,\n"
00294                     "    const label patchID,\n"
00295                     "    const label zoneID,\n"
00296                     "    const bool zoneFlip\n"
00297                     ")"
00298                 )   << "Specified zone flip for a face that does not  "
00299                     << "belong to zone.  This is not allowed.\n"
00300                     << "Face: " << face_
00301                     << " masterPointID:" << masterPointID_
00302                     << " masterEdgeID:" << masterEdgeID_
00303                     << " masterFaceID:" << masterFaceID_
00304                     << " patchID:" << patchID_
00305                     << " owner:" << owner_
00306                     << " neighbour:" << neighbour_
00307                     << abort(FatalError);
00308             }
00309         }
00310 
00311         //- Construct and return a clone
00312         virtual autoPtr<topoAction> clone() const
00313         {
00314             return autoPtr<topoAction>(new polyAddFace(*this));
00315         }
00316 
00317 
00318     // Default Destructor
00319 
00320     // Member Functions
00321 
00322         //- Return face
00323         const face& newFace() const
00324         {
00325             return face_;
00326         }
00327 
00328         //- Return owner cell
00329         label owner() const
00330         {
00331             return owner_;
00332         }
00333 
00334         //- Return neighour cell
00335         label neighbour() const
00336         {
00337             return neighbour_;
00338         }
00339 
00340         //- Is the face mastered by a point
00341         bool isPointMaster() const
00342         {
00343             return masterPointID_ >= 0;
00344         }
00345 
00346         //- Is the face mastered by an edge
00347         bool isEdgeMaster() const
00348         {
00349             return masterEdgeID_ >= 0;
00350         }
00351 
00352         //- Is the face mastered by another face
00353         bool isFaceMaster() const
00354         {
00355             return masterFaceID_ >= 0;
00356         }
00357 
00358         //- Is the face appended with no master
00359         bool appended() const
00360         {
00361             return !isPointMaster() && !isEdgeMaster() && !isFaceMaster();
00362         }
00363 
00364         //- Return master point ID
00365         label masterPointID() const
00366         {
00367             return masterPointID_;
00368         }
00369 
00370         //- Return master edge ID
00371         label masterEdgeID() const
00372         {
00373             return masterEdgeID_;
00374         }
00375 
00376         //- Return master face ID
00377         label masterFaceID() const
00378         {
00379             return masterFaceID_;
00380         }
00381 
00382         //- Does the face flux need to be flipped
00383         bool flipFaceFlux() const
00384         {
00385             return flipFaceFlux_;
00386         }
00387 
00388         //- Does the face belong to a boundary patch?
00389         bool isInPatch() const
00390         {
00391             return patchID_ >= 0;
00392         }
00393 
00394         //- Boundary patch ID
00395         label patchID() const
00396         {
00397             return patchID_;
00398         }
00399 
00400         //- Does the face belong to a zone?
00401         bool isInZone() const
00402         {
00403             return zoneID_ >= 0;
00404         }
00405 
00406         //- Is the face only a zone face (i.e. not belonging to a cell)
00407         bool onlyInZone() const
00408         {
00409             return zoneID_ >= 0 && owner_ < 0 && neighbour_ < 0;
00410         }
00411 
00412         //- Face zone ID
00413         label zoneID() const
00414         {
00415             return zoneID_;
00416         }
00417 
00418         //- Face zone flip
00419         label zoneFlip() const
00420         {
00421             return zoneFlip_;
00422         }
00423 };
00424 
00425 
00426 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00427 
00428 } // End namespace Foam
00429 
00430 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00431 
00432 #endif
00433 
00434 // ************************ vim: set sw=4 sts=4 et: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines