00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _MOMENTS_H_
00012 #define _MOMENTS_H_
00013
00014 #include "Vector.H"
00015 #include "REAL.H"
00016 #include "RealVect.H"
00017 #include "NamespaceHeader.H"
00018
00019
00020
00021
00022
00023
00024 class edgeMo
00025 {
00026 public:
00027 edgeMo()
00028 {
00029 }
00030
00031 void define (const RealVect& a_loPt,
00032 const RealVect& a_hiPt,
00033 const bool& a_intersectLo,
00034 const int& a_direction,
00035 const bool& a_covered,
00036 const bool& a_regular,
00037 const bool& a_dontKnow);
00038
00039
00040 RealVect getLo() const;
00041 RealVect getHi() const;
00042 bool getIntersectLo() const;
00043
00044 Real getEdgeLength() const;
00045 RealVect getEdgeCentroid() const;
00046
00047 bool isCovered() const;
00048 bool isRegular() const;
00049 bool dontKnow() const;
00050
00051 int direction() const;
00052
00053
00054 Real moment(const IntVect& a_exponent) const;
00055
00056 private:
00057 RealVect m_Lo;
00058 RealVect m_Hi;
00059
00060 bool m_intersectLo;
00061
00062 Real m_edgeLength;
00063 RealVect m_edgeCentroid;
00064
00065 bool m_covered;
00066 bool m_regular;
00067 bool m_dontKnow;
00068
00069 int m_varOfInt;
00070 };
00071
00072
00073 class faceMo
00074 {
00075 public:
00076 faceMo()
00077 {
00078 }
00079
00080 void define(const edgeMo a_edges[4],
00081 const int& a_faceNormal,
00082 const bool& a_covered,
00083 const bool& a_regular,
00084 const bool& a_dontKnow);
00085
00086 void setFaceArea(const Real& a_area);
00087 Real getFaceArea() const;
00088
00089 void setFaceCentroid(const RealVect& a_centroid);
00090 RealVect getFaceCentroid() const;
00091
00092 bool isRegular() const;
00093 bool isCovered() const;
00094 bool dontKnow() const;
00095
00096 Real getBdLength() const;
00097 void getNormal(Real a_normal[2]) const;
00098 void getEdges(edgeMo a_Edges[4]) const;
00099 edgeMo retrieveEdge(int& a_iEdge) const;
00100
00101 int getFaceNormal()const;
00102 void makeNormal();
00103 void normalize(Real a_normalVec[2]);
00104
00105 private:
00106 edgeMo m_edges[4];
00107
00108 Real m_normalVec[2];
00109
00110 bool m_covered;
00111 bool m_regular;
00112 bool m_dontKnow;
00113
00114 RealVect m_centroid;
00115 Real m_areaFrac;
00116 int m_faceNormal;
00117 Real m_bdLength;
00118
00119
00120 void operator=(const faceMo& a_input)
00121 {
00122 MayDay::Abort("invalid operator");
00123 };
00124
00125
00126 faceMo(const faceMo& a_input)
00127 {
00128 MayDay::Abort("invalid operator");
00129 };
00130 };
00131
00132
00133 class vofMo
00134 {
00135 public:
00136 vofMo()
00137 {
00138 }
00139
00140 void define(const faceMo a_faces[6]);
00141
00142 void makeNormal();
00143 void setNormal(Real a_normalVec[3]);
00144 void getNormal(Real a_normalVec[3]) const;
00145 void normalize(Real a_normalVec[3]);
00146
00147 void getFaces(faceMo a_faces[6]) const;
00148
00149 Real getBdArea() const;
00150
00151 private:
00152 faceMo m_faces[6];
00153
00154 Real m_normalVec[3];
00155 Real m_bdArea;
00156 };
00157
00158
00159 class Moments
00160 {
00161 public:
00162 Moments();
00163
00164 Vector<Real> momentCalc3D(const int& a_order,
00165 vofMo& a_vof);
00166
00167 Vector<Real> momentCalc2D(const int& a_order,
00168 const faceMo& a_face);
00169
00170 void listOfMoments(const int& a_order,
00171 Vector<IntVect>& a_exponents);
00172
00173 void makeMatrix(const Vector<IntVect>& a_list,
00174 const Vector<IntVect>& a_listPlus,
00175 const Vector<Real>& a_normalVec,
00176 Real** a_A,
00177 const int& a_faceNormal=999
00178 );
00179 };
00180
00181 #include "NamespaceFooter.H"
00182 #endif