00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBLEVELREDIST_H_
00014 #define _EBLEVELREDIST_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 "Stencils.H"
00024 #include "BaseIVFAB.H"
00025 #include "RedistStencil.H"
00026 #include "NamespaceHeader.H"
00027
00029
00031 class EBLevelRedist
00032 {
00033 public:
00035
00038 EBLevelRedist();
00039
00041 ~EBLevelRedist();
00042
00044
00051 EBLevelRedist(const DisjointBoxLayout& a_dbl,
00052 const EBISLayout& a_ebisl,
00053 const ProblemDomain& a_domain,
00054 const int& a_ncomp,
00055 int redistRad = 1);
00056
00058
00062 void define(const DisjointBoxLayout& a_dbl,
00063 const EBISLayout& a_ebisl,
00064 const ProblemDomain& a_domain,
00065 const int& a_ncomp,
00066 int redistRad = 1);
00067
00069
00075 void resetWeights(const LevelData<EBCellFAB>& modifier,
00076 const int& ivar);
00077
00079
00084 void increment(const BaseIVFAB<Real>& massDiff,
00085 const DataIndex& datInd,
00086 const Interval& variables);
00087
00089
00093 void redistribute(LevelData<EBCellFAB>& solution,
00094 const Interval& variables);
00095
00097
00103 void redistribute(LevelData<EBCellFAB>& a_solution,
00104 const Interval& a_srcVar,
00105 const Interval& a_dstVar);
00106
00108
00115 void fixExplicitLap(const LevelData<EBCellFAB>& a_kappaLap,
00116 LevelData<EBCellFAB>& a_solution,
00117 const Interval& variables);
00118
00120
00124 bool isDefined() const;
00125
00127
00130 void setToZero();
00131
00132 protected:
00133 int redistRad;
00134 RedistStencil m_stencil;
00135 int m_ncomp;
00136 int m_redistRad;
00137 DisjointBoxLayout m_grids;
00138 ProblemDomain m_domain;
00139 EBISLayout m_ebisl;
00140 bool m_isDefined;
00141 LevelData<BaseIVFAB<Real> > m_buffer;
00142 LayoutData<IntVectSet> m_sets;
00143 private:
00144
00145
00146 void operator=(const EBLevelRedist& a_stenin)
00147 {
00148 MayDay::Error("Invalid operator");
00149 }
00150
00151 EBLevelRedist(const EBLevelRedist& a_stenin)
00152 {
00153 MayDay::Error("Invalid operator");
00154 }
00155 };
00156
00157 #include "NamespaceFooter.H"
00158 #endif