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 #ifndef _Moments_H_
00028 #define _Moments_H_
00029
00031 class edgeMo
00032 {
00033 private:
00034 RealVect m_Lo;
00035 RealVect m_Hi;
00036 Real m_edgeLength;
00037 RealVect m_edgeCentroid;
00038 bool m_covered;
00039 int m_varOfInt;
00040
00041 public:
00042 void define (const RealVect& a_loPt,
00043 const RealVect& a_hiPt,
00044 const int& a_direction,
00045 const bool& a_covered);
00046
00047 edgeMo(){};
00048
00049
00050 RealVect getLo();
00051 RealVect getHi();
00052 Real getEdgeLength();
00053 RealVect getEdgeCentroid();
00054 bool isCovered();
00055 int direction();
00056
00057
00058 Real moment(const IntVect& monomial);
00059
00060 };
00062 class faceMo
00063 {
00064 private:
00065 edgeMo m_edges[4];
00066 Real m_normalVec[2];
00067 bool m_regular;
00068 bool m_covered;
00069 bool m_dontKnow;
00070 RealVect m_centroid;
00071 Real m_areaFrac;
00072 int m_faceNormal;
00073 Real m_bdLength;
00074
00075 public:
00076 void setFaceArea(const Real& area);
00077 Real getFaceArea();
00078 void setFaceCentroid(const RealVect& centroid);
00079 RealVect getFaceCentroid();
00080 bool m_normalConstructed;
00081 bool isRegular()const;
00082 bool isCovered()const;
00083 bool dontKnow() const;
00084 void define(edgeMo a_edges[4],
00085 int& faceNormal,
00086 bool& covered,
00087 bool& regular,
00088 bool& dontKnow);
00089 faceMo(){};
00090 void getNormal(Real normal[2])const;
00091 Real getBdLength()const;
00092 void makeNormal();
00093 void getEdges(edgeMo Edges[4])const;
00094 bool normalConstructed()const;
00095 int getFaceNormal()const;
00096 void normalize(Real normalVec[2]);
00097
00098 private:
00099
00100 void operator=(const faceMo& a_input)
00101 {
00102 MayDay::Error("invalid operator");
00103 };
00104
00105
00106 faceMo(const faceMo& a_input)
00107 {
00108 MayDay::Error("invalid operator");
00109 };
00110 };
00111
00113 class vofMo
00114 {
00115 private:
00116 faceMo m_faces[6];
00117 Real m_normalVec[3];
00118 Real m_bdArea;
00119
00120 public:
00121 void define(faceMo a_faces[6]);
00122 vofMo(){};
00123 void makeNormal();
00124 void getNormal(Real normalVec[3])const;
00125 void getFaces(faceMo faces[6])const;
00126
00127 void setNormal(Real normalVec[3]);
00128 void normalize(Real normalVec[3]);
00129 Real getBdArea();
00130 };
00131
00133 class Moments
00134 {
00135 public:
00136
00137 Moments();
00138
00139 Vector<Real> momentCalc3D(const int& a_order,
00140 vofMo& a_vof);
00141
00142 Vector<Real> momentCalc2D(const int& a_order,
00143 const faceMo& a_face);
00144
00145 void listOfMoments(const int& a_order,
00146 Vector<IntVect>& a_exponents);
00147
00148 void makeMatrix(const Vector<IntVect>& a_list,
00149 const Vector<IntVect>& a_listPlus,
00150 const Vector<Real>& a_normalVec,
00151 Real** a_A,
00152 const int& a_faceNormal=999
00153 );
00154 };
00155
00156
00157
00158 #endif