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
00036
00037
00038
00039 #ifndef diagonalEdge_H
00040 #define diagonalEdge_H
00041
00042 #include "label.H"
00043 #include "primitiveMesh.H"
00044
00045
00046
00047 namespace Foam
00048 {
00049
00050
00051
00052
00053
00054 class diagonalEdge
00055 {
00056
00057
00058
00059 label faceLabel_;
00060
00061
00062 label faceIndex0_;
00063
00064
00065 label faceIndex1_;
00066
00067 public:
00068
00069
00070
00071
00072 class diagonalEdgeHash
00073 {
00074
00075 public:
00076
00077 diagonalEdgeHash()
00078 {}
00079
00080
00081
00082 label operator()(const diagonalEdge& de, const label tableSize)
00083 const
00084 {
00085
00086
00087 return
00088 mag
00089 (
00090 de.faceLabel()
00091 + (de.faceLabel()*de.faceLabel())
00092 + de.faceIndex0() * de.faceIndex1()
00093 + (de.faceIndex0() + de.faceIndex1())
00094 )
00095 % tableSize;
00096 }
00097 };
00098
00099
00100
00101
00102
00103 inline diagonalEdge()
00104 :
00105 faceLabel_(-1),
00106 faceIndex0_(-1),
00107 faceIndex1_(-1)
00108 {}
00109
00110
00111 inline diagonalEdge
00112 (
00113 const label faceLabel,
00114 const label faceIndex0,
00115 const label faceIndex1
00116 )
00117 :
00118 faceLabel_(faceLabel),
00119 faceIndex0_(faceIndex0),
00120 faceIndex1_(faceIndex1)
00121 {}
00122
00123
00124
00125 label faceLabel() const
00126 {
00127 return faceLabel_;
00128 }
00129
00130 label faceIndex0() const
00131 {
00132 return faceIndex0_;
00133 }
00134
00135 label faceIndex1() const
00136 {
00137 return faceIndex1_;
00138 }
00139
00140 template <class T>
00141 T interpolate
00142 (
00143 const primitiveMesh& mesh,
00144 const Field<T>& vertField,
00145 const scalar weight
00146 ) const
00147 {
00148 const face& f = mesh.faces()[faceLabel_];
00149
00150 return
00151 (1-weight)*vertField[f[faceIndex0_]]
00152 + weight*vertField[f[faceIndex1_]];
00153 }
00154
00155 point coord(const primitiveMesh& mesh, const scalar weight) const
00156 {
00157 return interpolate(mesh, mesh.points(), weight);
00158 }
00159
00160
00161
00162
00163 bool operator==(const diagonalEdge& de) const
00164 {
00165 return
00166 (faceLabel() == de.faceLabel())
00167 && (faceIndex0() == de.faceIndex0())
00168 && (faceIndex1() == de.faceIndex1());
00169 }
00170
00171
00172
00173
00174 inline friend Ostream& operator<<(Ostream& os, const diagonalEdge& de)
00175 {
00176 os << token::BEGIN_LIST
00177 << de.faceLabel_ << token::SPACE
00178 << de.faceIndex0_ << token::SPACE
00179 << de.faceIndex1_
00180 << token::END_LIST;
00181
00182
00183 os.check("Ostream& operator<<(Ostream&, const diagonalEdge&)");
00184
00185 return os;
00186 }
00187 };
00188
00189
00190
00191
00192 }
00193
00194
00195
00196 #endif
00197
00198