00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _EBCOARSEN_H_
00012 #define _EBCOARSEN_H_
00013
00014 #include "REAL.H"
00015 #include "FArrayBox.H"
00016 #include "LevelData.H"
00017 #include "EBLevelGrid.H"
00018 #include "EBCellFAB.H"
00019 #include "Interval.H"
00020 #include "VoFIterator.H"
00021 #include "NamespaceHeader.H"
00022 class EBIndexSpace;
00023 class VoFStencil;
00024
00026
00032 class EBCoarsen
00033 {
00034 public:
00036
00039 EBCoarsen();
00040
00042 ~EBCoarsen();
00043
00045
00056 EBCoarsen(const EBLevelGrid& eblgFine,
00057 const EBLevelGrid& eblgCoar,
00058 const int& nref,
00059 const int& nvar);
00060
00062
00072 void define(const EBLevelGrid& eblgFine,
00073 const EBLevelGrid& eblgCoar,
00074 const int& nref,
00075 const int& nvar);
00076
00078
00082 bool isDefined() const;
00083
00085
00109 void
00110 coarsenFine(LevelData<EBCellFAB>& a_coarData,
00111 const LevelData<EBCellFAB>& a_fineData,
00112 const Interval& a_variables);
00113 protected:
00114 void defineStencil(const LayoutData<IntVectSet>& a_cfivs);
00115
00116 void coarsenIrreg(EBCellFAB& a_coar,
00117 const EBCellFAB& a_fine,
00118 const DataIndex& a_dit,
00119 const Interval& a_variables);
00120
00121 void checkStencil(VoFStencil& a_stencil,
00122 const Real& a_sum) const;
00123
00124 bool getVofsSideDir(Vector<VolIndex>& a_vofList,
00125 const VolIndex& a_vof,
00126 const IntVectSet& a_cfivs,
00127 const EBISBox& a_ebisBox,
00128 const int& a_dir,
00129 const Side::LoHiSide& a_side,
00130 const int& a_stepSize) const;
00131
00132 void addWeight(VoFStencil& a_stencil,
00133 const Vector<VolIndex>& a_vofList,
00134 const Real& a_weight,
00135 const bool& a_hasVof) const;
00136
00137 void getCoarsenVoFStencil(VoFStencil& a_stencil,
00138 const EBISBox& a_ebisBoxCoar,
00139 const EBISBox& a_ebisBoxFine,
00140 const VolIndex& a_vofCoar,
00141 const DataIndex& a_datInd,
00142 const IntVectSet& a_cfivs);
00143
00144 void coarsenFAB(EBCellFAB& a_coar,
00145 const EBCellFAB& a_fine,
00146 const DataIndex& a_datInd,
00147 const Interval& a_variables);
00148
00149 void
00150 setDefaultValues();
00151
00152 bool m_isDefined;
00153
00154 DisjointBoxLayout m_gridsCoar;
00155 DisjointBoxLayout m_gridsFine;
00156 DisjointBoxLayout m_coarsenedFineGrids;
00157 ProblemDomain m_domainCoar;
00158 ProblemDomain m_domainFine;
00159
00160 EBISLayout m_ebislCoar;
00161 EBISLayout m_ebislFine;
00162
00163 EBISLayout m_coarsenedFineEBISL;
00164 RefCountedPtr<LayoutData<IntVectSet> > m_cfivsPtr;
00165
00166 int m_refRat;
00167 int m_nComp;
00168 LevelData<EBCellFAB> m_coarsenedFineData;
00169
00170 LayoutData<BaseIVFAB<VoFStencil> > m_coarsenStencil;
00171 LayoutData<VoFIterator> m_vofIt;
00172
00173 private:
00174
00175 EBCoarsen(const EBCoarsen& ebcin)
00176 {
00177 MayDay::Error("ebca 2 invalid operator");
00178 }
00179 void operator=(const EBCoarsen& fabin)
00180 {
00181 MayDay::Error("ebca 3 invalid operator");
00182 }
00183
00184 };
00185
00186 #include "NamespaceFooter.H"
00187 #endif