Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 #ifndef referredCell_H
00036 #define referredCell_H
00037 
00038 #include <OpenFOAM/vector.H>
00039 #include <OpenFOAM/vectorList.H>
00040 #include <OpenFOAM/tensor.H>
00041 #include <OpenFOAM/transform.H>
00042 #include <OpenFOAM/DynamicList.H>
00043 #include <OpenFOAM/labelList.H>
00044 #include <OpenFOAM/edgeList.H>
00045 #include <OpenFOAM/polyMesh.H>
00046 
00047 #include <molecule/referredMolecule.H>
00048 
00049 
00050 
00051 namespace Foam
00052 {
00053 
00054 
00055 
00056 
00057 
00058 class referredCell
00059 :
00060     public DynamicList<referredMolecule>
00061 {
00062     
00063 
00064         label sourceProc_;
00065 
00066         label sourceCell_;
00067 
00068         
00069         vectorList vertexPositions_;
00070 
00071         edgeList edges_;
00072 
00073         labelListList faces_;
00074 
00075         vectorList faceCentres_;
00076 
00077         vectorList faceAreas_;
00078 
00079         labelList realCellsForInteraction_;
00080 
00081         vector offset_;
00082 
00083         tensor rotation_;
00084 
00085 
00086     
00087 
00088         void setConstructionData
00089         (
00090             const polyMesh& mesh,
00091             const label sourceCell
00092         );
00093 
00094         void locallyMapEdgeList
00095         (
00096             const labelList& points,
00097             const edgeList& sourceCellEdges
00098         );
00099 
00100         void locallyMapFaceList
00101         (
00102             const labelList& points,
00103             const labelListList& sourceCellFaces
00104         );
00105 
00106         vector referPosition(const vector& positionToRefer);
00107 
00108         vectorList referPositions(const vectorList& positionsToRefer);
00109 
00110         vector rotateVector(const vector& vectorToRotate);
00111 
00112         vectorList rotateVectors(const vectorList& vectorsToRotate);
00113 
00114 
00115 public:
00116 
00117     
00118 
00119         
00120 
00121         referredCell();
00122 
00123         
00124         referredCell
00125         (
00126             const polyMesh& mesh,
00127             const label sourceProc,
00128             const label sourceCell,
00129             const vector& offset,
00130             const tensor& rotation
00131         );
00132 
00133         
00134         referredCell
00135         (
00136             const label sourceProc,
00137             const label sourceCell,
00138             const vectorList& vertexPositions,
00139             const edgeList& localEdges,
00140             const labelListList& localFaces,
00141             const vectorList& faceCentres,
00142             const vectorList& faceAreas,
00143             const vector& offset,
00144             const tensor& rotation
00145         );
00146 
00147         
00148         
00149         
00150         
00151         
00152 
00153         referredCell
00154         (
00155             const polyMesh& mesh,
00156             const label sourceProc,
00157             const label sourceCell,
00158             const vector& cS,
00159             const vector& cD,
00160             const vector& nS,
00161             const vector& nD
00162         );
00163 
00164 
00165     
00166 
00167         virtual ~referredCell();
00168 
00169 
00170     
00171 
00172         
00173         
00174         referredCell reRefer
00175         (
00176             const vector& cS,
00177             const vector& cD,
00178             const vector& nS,
00179             const vector& nD
00180         );
00181 
00182         
00183         
00184         vector referPosition(const vector& positionToRefer) const;
00185 
00186         
00187         
00188         vectorList referPosition(const vectorList& positionsToRefer) const;
00189 
00190         
00191         vector rotateVector(const vector& vectorToRotate) const;
00192 
00193         
00194         
00195         vectorList rotateVectors(const vectorList& vectorsToRotate) const;
00196 
00197         
00198         
00199         
00200         void referInMols(const List<referredMolecule>& incomingMols);
00201 
00202         
00203         
00204         
00205         
00206         
00207         
00208         
00209         
00210         
00211         
00212         bool duplicate(const referredCell& refCellDupl) const;
00213 
00214         bool duplicate(const label procNo, const label nCells) const;
00215 
00216 
00217         
00218 
00219             inline label sourceProc() const;
00220 
00221             inline label sourceCell() const;
00222 
00223             inline const vector& offset() const;
00224 
00225             inline const tensor& rotation() const;
00226 
00227             inline const vectorList& vertexPositions() const;
00228 
00229             inline const edgeList& edges() const;
00230 
00231             inline const labelListList& faces() const;
00232 
00233             inline const vectorList& faceCentres() const;
00234 
00235             inline const vectorList& faceAreas() const;
00236 
00237             inline labelList& realCells();
00238 
00239             inline const labelList& realCellsForInteraction() const;
00240 
00241 
00242     
00243 
00244         inline friend bool operator==
00245         (
00246             const referredCell& a,
00247             const referredCell& b
00248         );
00249 
00250         inline friend bool operator!=
00251         (
00252             const referredCell& a,
00253             const referredCell& b
00254         );
00255 
00256 
00257     
00258 
00259         friend Istream& operator>>(Istream&, referredCell&);
00260         friend Ostream& operator<<(Ostream&, const referredCell&);
00261 };
00262 
00263 
00264 
00265 
00266 } 
00267 
00268 
00269 
00270 #include <molecule/referredCellI.H>
00271 
00272 
00273 
00274 #endif
00275 
00276