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