00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _MINIMALCCCM_H_
00012 #define _MINIMALCCCM_H_
00013
00014 #include <map>
00015 using std::map;
00016
00017 #include "Vector.H"
00018 #include "REAL.H"
00019 #include "IndexTM.H"
00020
00021 #include "Notation.H"
00022 #include "LSquares.H"
00023 #include "IFData.H"
00024 #include "CutCellMoments.H"
00025 #include "RefinementCriterion.H"
00026
00027 #include "NamespaceHeader.H"
00028
00029 template <int dim> class LSProblem;
00030
00031 template <int dim> class MinimalCCCM
00032 {
00033 public:
00034 typedef IndexTM<int,dim> IvDim;
00035 typedef IndexTM<Real,dim> RvDim;
00036
00037 typedef map<IvDim,Real > PthMoment;
00038
00039 typedef map<IndexTM<int,dim-1>,Real > PthMomentLesserDimension;
00040
00041 typedef map<IndexTM<int,1>,Real > OneDMoments;
00042 typedef map<int,IvDim> LocPthMoment;
00043 typedef map<IvDim,int > PthMomentLoc;
00044
00045 typedef map<Iv2,CutCellMoments<dim-1> > BdCutCellMoments;
00046
00047
00048 MinimalCCCM();
00049 MinimalCCCM(const MinimalCCCM<dim>& a_MinimalCCCM);
00050
00051
00052 MinimalCCCM(const IFData<dim>& a_info);
00053
00054
00055 ~MinimalCCCM();
00056
00057 void computeMoments(const int & a_orderPmax,
00058 const int & a_degreePmax);
00059
00060 void computeMomentsRecursively(const int & a_orderPmax,
00061 const int & a_degreePmax);
00062
00063 Vector<Real> computeRhs(LSProblem<dim> & a_lsp,
00064 const int & a_order);
00065
00066
00067
00068 void print(ostream& out) const;
00069
00070 void dump() const;
00071
00072
00073 void operator=(const MinimalCCCM<dim>& a_MinimalCCCM);
00074
00075 Real factorial(const IvDim & a_multiIndex) const;
00076
00077
00078 CutCellMoments<dim> m_cutCellMoments;
00079
00080
00081 bool m_boundaryMomentsComputed;
00082 };
00083
00084
00085 template <> class MinimalCCCM<1>
00086 {
00087 public:
00088 typedef map<IndexTM<int,1>,Real> OneDMoments;
00089
00090
00091 MinimalCCCM();
00092 MinimalCCCM(const MinimalCCCM<1> & a_MinimalCCCM);
00093 MinimalCCCM(const IFData<1>& a_info);
00094
00095
00096 ~MinimalCCCM();
00097
00098 void computeMoments(const int & a_orderPmax,
00099 const int & a_degreePmax);
00100
00101
00102 void simpleComputeMoments(const Real & a_loPt,
00103 const Real & a_hiPt,
00104 const int & a_degreePmax);
00105
00106 void computeMomentsUsingBinomial(const Real & a_loPt,
00107 const Real & a_hiPt,
00108 const int & a_loSign,
00109 const int & a_hiSign,
00110 const int & a_degreePmax);
00111
00112
00113 void print(ostream& out) const;
00114
00115 void dump() const;
00116
00117
00118 void operator=(const MinimalCCCM<1>& a_MinimalCCCM);
00119
00120
00121 CutCellMoments<1> m_cutCellMoments;
00122 };
00123
00124
00125 #include "NamespaceFooter.H"
00126
00127 #include "MinimalCCCMImplem.H"
00128
00129 #endif