00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _EB_PWL_FINE_INTERP_H_
00030 #define _EB_PWL_FINE_INTERP_H_
00031
00032 #include "REAL.H"
00033 #include "FArrayBox.H"
00034 #include "LevelData.H"
00035 #include "DisjointBoxLayout.H"
00036 #include "EBISLayout.H"
00037 #include "EBCellFAB.H"
00038 #include "Interval.H"
00039 #include "Stencils.H"
00040 #include "BaseIVFAB.H"
00041
00043
00045 class EBPWLFineInterp
00046 {
00047 public:
00049
00052 EBPWLFineInterp();
00053
00055 ~EBPWLFineInterp();
00056
00058
00071 EBPWLFineInterp(const DisjointBoxLayout& a_dblFine,
00072 const DisjointBoxLayout& a_dblCoar,
00073 const EBISLayout& a_ebislFine,
00074 const EBISLayout& a_ebislCoar,
00075 const Box& a_domainCoar,
00076 const int& a_nref,
00077 const int& a_nvar);
00078
00080
00092 void define(const DisjointBoxLayout& a_dblFine,
00093 const DisjointBoxLayout& a_dblCoar,
00094 const EBISLayout& a_ebislFine,
00095 const EBISLayout& a_ebislCoar,
00096 const Box& a_domainCoar,
00097 const int& a_nref,
00098 const int& a_nvar);
00099
00101
00105 bool isDefined() const;
00106
00108
00125 void
00126 interpolate(LevelData<EBCellFAB>& a_fineData,
00127 const LevelData<EBCellFAB>& a_coarseData,
00128 const Interval& a_variables);
00129
00130 protected:
00131 void
00132 interpolateFAB(EBCellFAB& a_fine,
00133 const EBCellFAB& a_coar,
00134 const DataIndex& a_datInd,
00135 const Interval& a_variables) const;
00136
00137 void makeDerivStencils();
00138
00139 void setDefaultValues();
00140
00141 bool m_isDefined;
00142
00143 DisjointBoxLayout m_coarsenedFineGrids;
00144 Box m_coarDomain;
00145 EBISLayout m_coarsenedFineEBISL;
00146
00147 int m_refRat;
00148 int m_nComp;
00149 LevelData<EBCellFAB> m_coarsenedFineData;
00150
00151
00152 LayoutData<IntVectSet> m_irregRegions;
00153
00154
00155
00156 LayoutData<BaseIVFAB<VoFStencil> > m_hiStencils[SpaceDim];
00157 LayoutData<BaseIVFAB<VoFStencil> > m_loStencils[SpaceDim];
00158
00159 private:
00160
00161 EBPWLFineInterp(const EBPWLFineInterp& ebcin)
00162 {
00163 MayDay::Error("ebpwl 2 invalid operator");
00164 }
00165 void operator=(const EBPWLFineInterp& fabin)
00166 {
00167 MayDay::Error("ebpwl 3 invalid operator");
00168 }
00169 };
00170
00171 #endif