00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBMGINTERP_H_
00014 #define _EBMGINTERP_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 "EBIndexSpace.H"
00024 #include "EBStencil.H"
00025 #include "EBLevelGrid.H"
00026 #include "EBConstantCFInterp.H"
00027 #include "NamespaceHeader.H"
00028
00029
00030
00031
00032
00033 class EBMGInterp
00034 {
00035 public:
00036
00037
00038
00039
00040 EBMGInterp();
00041
00042
00043 ~EBMGInterp();
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 EBMGInterp(const DisjointBoxLayout& dblFine,
00060 const DisjointBoxLayout& dblCoar,
00061 const EBISLayout& ebislFine,
00062 const EBISLayout& ebislCoar,
00063 const ProblemDomain& domainCoar,
00064 const int& nref,
00065 const int& nvar,
00066 const EBIndexSpace* ebisPtr,
00067 const IntVect& ghostCellsPhi,
00068 const bool& layoutChanged = true,
00069 const bool& doLinear = false);
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 void define(const DisjointBoxLayout& dblFine,
00086 const DisjointBoxLayout& dblCoar,
00087 const EBISLayout& ebislFine,
00088 const EBISLayout& ebislCoar,
00089 const ProblemDomain& domainCoar,
00090 const int& nref,
00091 const int& nvar,
00092 const EBIndexSpace* ebisPtr,
00093 const IntVect& ghostCellsPhi,
00094 const bool& layoutChanged = true,
00095 const bool& doLinear = false);
00096
00097
00098
00099
00100
00101
00102 bool isDefined() const;
00103
00104
00105
00106
00107
00108
00109 void
00110 pwcInterp(LevelData<EBCellFAB>& a_fineData,
00111 const LevelData<EBCellFAB>& a_coarseData,
00112 const Interval& a_variables);
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 void
00123 pwlInterp(LevelData<EBCellFAB>& a_fineData,
00124 const LevelData<EBCellFAB>& a_coarseData,
00125 const Interval& a_variables);
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 void
00136 pwlInterpMG(LevelData<EBCellFAB>& a_fineData,
00137 const LevelData<EBCellFAB>& a_coarseData,
00138 const Interval& a_variables);
00139
00140
00141
00142
00143
00144
00145
00146 void
00147 pwcInterpMG(LevelData<EBCellFAB>& a_fineData,
00148 const LevelData<EBCellFAB>& a_coarseData,
00149 const Interval& a_variables);
00150
00151
00152 protected:
00153 void
00154 defineLinearStencil(const DataIndex & a_dit,
00155 const Vector<VolIndex>& a_allFineVoFs,
00156 const EBISLayout & a_ebislStenFine,
00157 const EBISLayout & a_ebislStenCoar,
00158 const Box & a_boxFine,
00159 const Box & a_boxCoar);
00160
00161 void
00162 defineConstantStencil(const DataIndex & a_dit,
00163 const Vector<VolIndex>& a_allFineVoFs,
00164 const EBISLayout & a_ebislStenFine,
00165 const EBISLayout & a_ebislStenCoar,
00166 const Box & a_boxFine,
00167 const Box & a_boxCoar);
00168
00169 void fillGhostCellsPWC(LevelData<EBCellFAB>& a_data,
00170 const EBISLayout& a_ebisl,
00171 const ProblemDomain& a_dom);
00172 void
00173 pwcInterpFAB(EBCellFAB& a_refCoar,
00174 const Box& a_coarBox,
00175 const EBCellFAB& a_fine,
00176 const DataIndex& a_datInd,
00177 const Interval& a_variables) const;
00178
00179
00180 void
00181 pwlInterpFAB(EBCellFAB& a_refCoar,
00182 const Box& a_coarBox,
00183 const EBCellFAB& a_fine,
00184 const DataIndex& a_datInd,
00185 const Interval& a_variables) const;
00186
00187 void setDefaultValues();
00188
00189 void defineStencils();
00190
00191 bool m_isDefined;
00192 IntVect m_ghost;
00193 DisjointBoxLayout m_coarGrids;
00194 DisjointBoxLayout m_fineGrids;
00195 ProblemDomain m_coarDomain;
00196 ProblemDomain m_fineDomain;
00197 EBISLayout m_coarEBISL;
00198 EBISLayout m_fineEBISL;
00199 LevelData<EBCellFAB> m_buffer;
00200 int m_refRat;
00201 int m_nComp;
00202
00203 bool m_doLinear;
00204 bool m_layoutChanged;
00205 bool m_coarsenable;
00206
00207
00208
00209
00210
00211
00212 DisjointBoxLayout m_buffGrids;
00213 EBISLayout m_buffEBISL;
00214
00215
00216 Copier m_copierFtoRC;
00217 Copier m_copierRCtoF;
00218
00219
00220
00221 LayoutData<RefCountedPtr<EBStencil> > m_interpEBStencil;
00222
00223
00224 LayoutData<RefCountedPtr<EBStencil> > m_linearEBStencil;
00225
00226 private:
00227
00228 EBMGInterp(const EBMGInterp& ebcin)
00229 {
00230 MayDay::Error("ebmgi 2 invalid operator");
00231 }
00232 void operator=(const EBMGInterp& fabin)
00233 {
00234 MayDay::Error("ebmgi 3 invalid operator");
00235 }
00236
00237 };
00238
00239 #include "NamespaceFooter.H"
00240 #endif