00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBCOARSEAVERAGE_H_
00014 #define _EBCOARSEAVERAGE_H_
00015
00016 #include "REAL.H"
00017 #include "FArrayBox.H"
00018 #include "LevelData.H"
00019 #include "DisjointBoxLayout.H"
00020 #include "EBISLayout.H"
00021 #include "EBLevelGrid.H"
00022 #include "EBCellFAB.H"
00023 #include "EBFluxFAB.H"
00024 #include "BaseIVFAB.H"
00025 #include "BaseIVFactory.H"
00026 #include "EBFaceFAB.H"
00027 #include "Interval.H"
00028 #include "NamespaceHeader.H"
00029 class EBIndexSpace;
00030
00032
00038 class EBCoarseAverage
00039 {
00040 public:
00042
00045 EBCoarseAverage();
00046
00048 ~EBCoarseAverage();
00049
00051
00064 EBCoarseAverage(const DisjointBoxLayout& dblFine,
00065 const DisjointBoxLayout& dblCoar,
00066 const EBISLayout& ebislFine,
00067 const EBISLayout& ebislCoar,
00068 const ProblemDomain& domainCoar,
00069 const int& nref,
00070 const int& nvar,
00071 const EBIndexSpace* ebisPtr);
00072
00074
00085 EBCoarseAverage(const EBLevelGrid& a_eblgFine,
00086 const EBLevelGrid& a_eblgCoar,
00087 const EBLevelGrid& a_eblgCoarsenedFine,
00088 const int& nref,
00089 const int& nvar);
00091
00103 void define(const DisjointBoxLayout& dblFine,
00104 const DisjointBoxLayout& dblCoar,
00105 const EBISLayout& ebislFine,
00106 const EBISLayout& ebislCoar,
00107 const ProblemDomain& domainCoar,
00108 const int& nref,
00109 const int& nvar,
00110 const EBIndexSpace* ebisPtr);
00111
00113
00123 void define(const EBLevelGrid& a_eblgFine,
00124 const EBLevelGrid& a_eblgCoar,
00125 const EBLevelGrid& a_eblgCoarsenedFine,
00126 const int& nref,
00127 const int& nvar);
00129
00133 bool isDefined() const;
00134
00136
00156 void
00157 average(LevelData<EBCellFAB>& a_coarData,
00158 const LevelData<EBCellFAB>& a_fineData,
00159 const Interval& a_variables);
00160
00161 void
00162 average(LevelData<EBFluxFAB>& a_coarData,
00163 const LevelData<EBFluxFAB>& a_fineData,
00164 const Interval& a_variables);
00165
00166
00167 void
00168 average(LevelData<BaseIVFAB<Real> >& a_coarData,
00169 const LevelData<BaseIVFAB<Real> >& a_fineData,
00170 const Interval& a_variables);
00171
00173 void
00174 averaRZ(LevelData<EBCellFAB>& a_coarData,
00175 const LevelData<EBCellFAB>& a_fineData,
00176 const Interval& a_variables,
00177 const Real& a_dxFine);
00178
00179 protected:
00180 void
00181 averageFAB(EBCellFAB& a_coar,
00182 const EBCellFAB& a_fine,
00183 const DataIndex& a_datInd,
00184 const Interval& a_variables) const;
00185
00186 void
00187 averageFAB(EBFaceFAB& a_coar,
00188 const EBFaceFAB& a_fine,
00189 const DataIndex& a_datInd,
00190 const Interval& a_variables,
00191 const int& a_dir) const;
00192
00193 void
00194 averageFAB(BaseIVFAB<Real>& a_coar,
00195 const BaseIVFAB<Real>& a_fine,
00196 const DataIndex& a_datInd,
00197 const Interval& a_variables) const;
00198
00199 void
00200 averageFRZ(EBCellFAB& a_coar,
00201 const EBCellFAB& a_fine,
00202 const DataIndex& a_datInd,
00203 const Interval& a_variables,
00204 const Real& a_dx) const;
00205
00206 void
00207 setDefaultValues();
00208
00209 bool m_isDefined;
00210
00211 EBLevelGrid m_coarEBLG;
00212 EBLevelGrid m_fineEBLG;
00213 EBLevelGrid m_coarsenedFineEBLG;
00214
00215 int m_refRat;
00216 int m_nComp;
00217 LevelData<EBCellFAB> m_coarsenedFineData;
00218 LevelData<EBFluxFAB> m_coarsenedFineFluxData;
00219 LevelData<BaseIVFAB<Real> > m_coarsenedFineBIVFData;
00220
00221 private:
00222
00223 EBCoarseAverage(const EBCoarseAverage& ebcin)
00224 {
00225 MayDay::Error("ebca 2 invalid operator");
00226 }
00227 void operator=(const EBCoarseAverage& fabin)
00228 {
00229 MayDay::Error("ebca 3 invalid operator");
00230 }
00231
00232 };
00233
00234 #include "NamespaceFooter.H"
00235 #endif