00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _CUTCELLMOMENTS_H_
00012 #define _CUTCELLMOMENTS_H_
00013
00014 #if defined(CH_Darwin) && defined(__GNUC__) && ( __GNUC__ == 3 )
00015
00016 #include <unistd.h>
00017 #define _GLIBCPP_USE_C99 1
00018 #endif
00019
00020 #include <map>
00021 using std::map;
00022
00023 #include "Vector.H"
00024 #include "REAL.H"
00025 #include "IndexTM.H"
00026
00027 #include "Notation.H"
00028 #include "IFData.H"
00029
00030 #include "NamespaceHeader.H"
00031
00032 template <int dim> class CutCellMoments
00033 {
00034 public:
00035 typedef IndexTM<int,dim> IvDim;
00036 typedef IndexTM<Real,dim> RvDim;
00037
00038 typedef map<IvDim,Real > PthMoment;
00039
00040 typedef map<IndexTM<int,dim-1>,Real > PthMomentLesserDimension;
00041
00042 typedef map<IndexTM<int,1>,Real > OneDMoments;
00043 typedef map<int,IvDim> LocPthMoment;
00044 typedef map<IvDim,int > PthMomentLoc;
00045
00046 typedef map<Iv2,CutCellMoments<dim-1> > BdCutCellMoments;
00047
00048
00049 CutCellMoments();
00050 CutCellMoments(const CutCellMoments<dim>& a_cutCellMoments);
00051
00052
00053 CutCellMoments(const IFData<dim>& a_info);
00054
00055
00056 ~CutCellMoments();
00057
00058
00059 const CutCellMoments<dim - 1> getBdCutCellMoments(const Iv2& a_bdId) const;
00060
00061 Real changeMomentCoordinates(PthMoment & a_refinedMomentMap,
00062 const IndexTM<int,dim> & a_monomial,
00063 const IndexTM<Real,dim> & a_refinedCenterDelta);
00064
00065 void changeMomentCoordinatesToCellCenter();
00066
00067 void changeMomentCoordinatesToParentCenter();
00068
00069 void initialize(CutCellMoments<dim> & a_refinedCutCell);
00070
00071 void initializeMap(PthMoment & a_map1,
00072 PthMoment & a_map2);
00073
00074 void initializeMap(PthMomentLesserDimension & a_map1,
00075 PthMomentLesserDimension & a_map2);
00076
00077
00078
00079
00080
00081 Real getBdMoment(const IvDim & a_mono,
00082 const IFData<dim+1> & a_IFData,
00083 const IndexTM<Real,dim> & a_refinedCenterDelta,
00084 PthMoment a_fullCellMap = PthMoment());
00085
00086 Real getBdEBMoment(const IvDim & a_mono,
00087 const IFData<dim+1> & a_IFData,
00088 const IndexTM<Real,dim> & a_refinedCenterDelta);
00089
00090 void addBdMoments(CutCellMoments<dim> & a_coarseCutCell,
00091 const IFData<dim+1> & a_IFData,
00092 const int & a_degreePmax,
00093 const bool & a_useConstraints,
00094 const IndexTM<Real,dim> & a_refinedCenterDelta,
00095 const IndexTM<int,dim> & a_localHilo);
00096
00097
00098 Real fullCellQuadrature(const IndexTM<int,dim> & a_mono,
00099 const CoordinateSystem<dim> & a_coord);
00100
00101
00102 Real getMoment(const IvDim & a_mono,
00103 const EBorVol & a_EBorVOL) const;
00104
00105
00106 Real getVol(const EBorVol & a_EBorVol) const;
00107
00108 RvDim getCentroid(const EBorVol & a_EBorVOL) const;
00109
00110 Real getResidual(const int & a_iDegree,
00111 const int & a_normJ) const;
00112
00113 void setResidual(const Real& a_value,
00114 const int & a_iDegree,
00115 const int & a_normJ);
00116
00117 Vector<Real> sliceResidual(const int & a_iDegree) const;
00118
00119 bool isCovered() const;
00120
00121 bool isRegular() const;
00122
00123
00124 void print(ostream& out) const;
00125
00126 void dump() const;
00127
00128
00129 void operator=(const CutCellMoments<dim>& a_cutCellMoments);
00130
00131
00132 PthMoment m_moments;
00133
00134
00135 PthMoment m_EBmoments;
00136
00137
00138 BdCutCellMoments m_bdCutCellMoments;
00139
00140
00141 IFData<dim> m_IFData;
00142
00143
00144 bool m_bdCCOn;
00145
00146
00147 Vector<Vector<Real> > m_residual;
00148
00149
00150 int m_numActiveBounds;
00151
00152
00153 bool m_badNormal;
00154 };
00155
00156
00157 template <> class CutCellMoments<1>
00158 {
00159 public:
00160 typedef map<IndexTM<int,1>,Real> OneDMoments;
00161
00162
00163 CutCellMoments();
00164 CutCellMoments(const CutCellMoments<1> & a_cutCellMoments);
00165
00166 CutCellMoments(const IFData<1>& a_info);
00167
00168
00169 ~CutCellMoments();
00170
00171 Real changeMomentCoordinates(OneDMoments & a_refinedMap,
00172 const IndexTM<int,1> & a_monomial,
00173 const IndexTM<Real,1> & a_refinedCenterDelta);
00174
00175 void changeMomentCoordinatesToCellCenter();
00176
00177 void changeMomentCoordinatesToParentCenter();
00178
00179 void initialize(CutCellMoments<1> & a_refinedCutCell);
00180
00181 void initializeMap(OneDMoments & a_map1,
00182 OneDMoments & a_map2);
00183
00184 Real getBdMoment(const IndexTM<int,1> & a_mono,
00185 const IFData<2> & a_IFData,
00186 const IndexTM<Real,1> & a_refinedCenterDelta,
00187 OneDMoments a_fullCellMap = OneDMoments());
00188
00189 Real getBdEBMoment(const IndexTM<int,1> & a_mono,
00190 const IFData<2> & a_IFData,
00191 const IndexTM<Real,1> & a_refinedCenterDelta);
00192
00193 void addBdMoments(CutCellMoments<1> & a_coarseCutCell,
00194 const IFData<2> & a_IFData,
00195 const int & a_degreePmax,
00196 const bool & a_useConstraints,
00197 const IndexTM<Real,1> & a_refinedCenterDelta,
00198 const IndexTM<int,1> & a_localHilo);
00199
00200
00201 Real getMoment(const IndexTM<int,1> & a_mono,
00202 const EBorVol & a_EBorVOL) const;
00203
00204 Real getMoment(const IndexTM<int,1>& a_mono) const;
00205
00206
00207 Real getVol(const EBorVol& a_EBorVol) const;
00208
00209 IndexTM<Real,1> getCentroid(const EBorVol& a_EBorVol) const;
00210
00211 bool isCovered() const;
00212
00213 bool isRegular() const;
00214
00215
00216 void print(ostream& out) const;
00217
00218 void dump() const;
00219
00220
00221 void operator=(const CutCellMoments<1>& a_cutCellMoments);
00222
00223
00224 OneDMoments m_moments;
00225 IFData<1> m_IFData;
00226 bool m_bdCCOn;
00227 int m_numActiveBounds;
00228 bool m_badNormal;
00229
00230
00231 OneDMoments m_EBmoments;
00232 };
00233
00234 #include "NamespaceFooter.H"
00235
00236 #include "CutCellMomentsImplem.H"
00237
00238 #endif