00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBMGAVERAGE_H_
00014 #define _EBMGAVERAGE_H_
00015
00016 #include "REAL.H"
00017 #include "FArrayBox.H"
00018 #include "LevelData.H"
00019 #include "DisjointBoxLayout.H"
00020 #include "EBISLayout.H"
00021 #include "EBCellFAB.H"
00022 #include "Interval.H"
00023 #include "EBStencil.H"
00024 #include "NamespaceHeader.H"
00025 class EBIndexSpace;
00026
00028
00031 class EBMGAverage
00032 {
00033 public:
00035
00038 EBMGAverage();
00039
00041 ~EBMGAverage();
00042
00043 EBMGAverage(const DisjointBoxLayout& a_dblFine,
00044 const DisjointBoxLayout& a_dblCoar,
00045 const EBISLayout& a_ebislFine,
00046 const EBISLayout& a_ebislCoar,
00047 const ProblemDomain& a_domainCoar,
00048 const int& a_nref,
00049 const int& a_nvar,
00050 const EBIndexSpace* ebisPtr,
00051 const IntVect& a_ghostCellsRHS);
00052
00054
00066 void define(const DisjointBoxLayout& dblFine,
00067 const DisjointBoxLayout& dblCoar,
00068 const EBISLayout& ebislFine,
00069 const EBISLayout& ebislCoar,
00070 const ProblemDomain& domainCoar,
00071 const int& nref,
00072 const int& nvar,
00073 const EBIndexSpace* ebisPtr,
00074 const IntVect& ghostCellsRHS);
00075
00077
00081 bool isDefined() const;
00082
00084
00088 void
00089 average(LevelData<EBCellFAB>& a_coarData,
00090 const LevelData<EBCellFAB>& a_fineData,
00091 const Interval& a_variables);
00092
00094
00099 void
00100 averageMG(LevelData<EBCellFAB>& a_coarData,
00101 const LevelData<EBCellFAB>& a_fineData,
00102 const Interval& a_variables);
00103
00104 protected:
00105 void
00106 averageFAB(EBCellFAB& a_coar,
00107 const EBCellFAB& a_refCoar,
00108 const DataIndex& a_datInd,
00109 const Interval& a_variables) const;
00110
00111 void
00112 setDefaultValues();
00113
00114 bool m_isDefined;
00115 IntVect m_ghost;
00116 DisjointBoxLayout m_coarGrids;
00117 DisjointBoxLayout m_fineGrids;
00118 DisjointBoxLayout m_refinedCoarseGrids;
00119 Copier m_copier;
00120 ProblemDomain m_coarDomain;
00121 ProblemDomain m_fineDomain;
00122
00123 EBISLayout m_coarEBISL;
00124 EBISLayout m_fineEBISL;
00125
00126 EBISLayout m_refinedCoarseEBISL;
00127
00128 int m_refRat;
00129 int m_nComp;
00130 LevelData<EBCellFAB> m_refinedCoarseData;
00131
00132 LayoutData<RefCountedPtr<EBStencil> > m_averageEBStencil;
00133
00134 private:
00135
00136 EBMGAverage(const EBMGAverage& ebcin)
00137 {
00138 MayDay::Error("ebmgi 2 invalid operator");
00139 }
00140 void operator=(const EBMGAverage& fabin)
00141 {
00142 MayDay::Error("ebmgi 3 invalid operator");
00143 }
00144
00145 };
00146
00147 #include "NamespaceFooter.H"
00148 #endif