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
00027
00028
00029
00030
00031 class EBMGAverage
00032 {
00033 public:
00034
00035
00036
00037
00038 EBMGAverage();
00039
00040
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 const bool& a_layoutChanged = true);
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 void define(const DisjointBoxLayout& dblFine,
00068 const DisjointBoxLayout& dblCoar,
00069 const EBISLayout& ebislFine,
00070 const EBISLayout& ebislCoar,
00071 const ProblemDomain& domainCoar,
00072 const int& nref,
00073 const int& nvar,
00074 const EBIndexSpace* ebisPtr,
00075 const IntVect& ghostCellsRHS,
00076 const bool& a_layoutChanged = true);
00077
00078
00079
00080
00081
00082
00083 bool isDefined() const;
00084
00085
00086
00087
00088
00089
00090 void
00091 average(LevelData<EBCellFAB>& a_coarData,
00092 const LevelData<EBCellFAB>& a_fineData,
00093 const Interval& a_variables);
00094
00095
00096
00097
00098
00099
00100
00101 void
00102 averageMG(LevelData<EBCellFAB>& a_coarData,
00103 const LevelData<EBCellFAB>& a_fineData,
00104 const Interval& a_variables);
00105
00106 protected:
00107 void
00108 averageFAB(EBCellFAB& a_coar,
00109 const Box& a_box,
00110 const EBCellFAB& a_refCoar,
00111 const DataIndex& a_datInd,
00112 const Interval& a_variables) const;
00113
00114 void setDefaultValues();
00115 void defineStencils();
00116
00117 bool m_isDefined;
00118 IntVect m_ghost;
00119 DisjointBoxLayout m_coarGrids;
00120 DisjointBoxLayout m_fineGrids;
00121 DisjointBoxLayout m_refinedCoarseGrids;
00122 Copier m_copier;
00123 ProblemDomain m_coarDomain;
00124 ProblemDomain m_fineDomain;
00125
00126 EBISLayout m_coarEBISL;
00127 EBISLayout m_fineEBISL;
00128
00129 int m_refRat;
00130 int m_nComp;
00131
00132 bool m_layoutChanged;
00133 bool m_coarsenable;
00134
00135
00136
00137
00138
00139
00140 DisjointBoxLayout m_buffGrids;
00141 EBISLayout m_buffEBISL;
00142
00143 LayoutData<RefCountedPtr<EBStencil> > m_averageEBStencil;
00144 LevelData<EBCellFAB> m_buffer;
00145 private:
00146
00147 EBMGAverage(const EBMGAverage& ebcin)
00148 {
00149 MayDay::Error("ebmgi 2 invalid operator");
00150 }
00151 void operator=(const EBMGAverage& fabin)
00152 {
00153 MayDay::Error("ebmgi 3 invalid operator");
00154 }
00155
00156 };
00157
00158 #include "NamespaceFooter.H"
00159 #endif