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 #ifndef _QuadCFInterp_H_
00029 #define _QuadCFInterp_H_
00030
00031 #include <iostream>
00032 #include <math.h>
00033 #include <assert.h>
00034 #include <stdlib.h>
00035 #include "REAL.H"
00036 #include "IntVect.H"
00037 #include "Box.H"
00038 #include "BaseFab.H"
00039 #include "DisjointBoxLayout.H"
00040 #include "LevelData.H"
00041 #include "FArrayBox.H"
00042 #include "QuadCFStencil.H"
00043 #include "ProblemDomain.H"
00044
00046
00050 class QuadCFInterp
00051 {
00052 public:
00053
00055
00057
00062 QuadCFInterp(
00063 const DisjointBoxLayout& a_fineBoxes,
00064 const DisjointBoxLayout* a_coarBoxes,
00065 Real a_dxFine,
00066 int a_refRatio,
00067 int a_nComp,
00068 const Box& a_domf);
00069
00071
00076 QuadCFInterp(
00077 const DisjointBoxLayout& a_fineBoxes,
00078 const DisjointBoxLayout* a_coarBoxes,
00079 Real a_dxFine,
00080 int a_refRatio,
00081 int a_nComp,
00082 const ProblemDomain& a_domf);
00083
00085
00089 void define(
00090 const DisjointBoxLayout& a_fineBoxes,
00091 const DisjointBoxLayout* a_coarBoxes,
00092 Real a_dxFine,
00093 int a_refRatio,
00094 int a_nComp,
00095 const Box& a_domf);
00096
00098
00102 void define(
00103 const DisjointBoxLayout& a_fineBoxes,
00104 const DisjointBoxLayout* a_coarBoxes,
00105 Real a_dxFine,
00106 int a_refRatio,
00107 int a_nComp,
00108 const ProblemDomain& a_domf);
00109
00110
00112
00115 QuadCFInterp();
00116
00118 ~QuadCFInterp();
00119
00121
00124 void clear();
00125
00127
00130 void coarseFineInterp(
00131 LevelData<FArrayBox>& a_phif,
00132 const LevelData<FArrayBox>& a_phic
00133 );
00134
00136
00139 bool isDefined() const;
00140
00141
00142 protected:
00143
00144 BoxLayout m_loCoarBoxes[SpaceDim];
00145 BoxLayout m_hiCoarBoxes[SpaceDim];
00146
00147
00148 int m_level;
00149
00150
00151 int m_nComp;
00152
00153
00154 int m_refRatio;
00155
00156
00157 Real m_dxFine;
00158
00159
00160
00161 LayoutData<QuadCFStencil> m_loQCFS[SpaceDim];
00162
00163
00164
00165 LayoutData<QuadCFStencil> m_hiQCFS[SpaceDim];
00166
00167
00168 BoxLayoutData<FArrayBox> m_hiCoarBuffer[SpaceDim];
00169
00170
00171 Copier m_hiCoarCopiers[SpaceDim];
00172
00173
00174 BoxLayoutData<FArrayBox> m_loCoarBuffer[SpaceDim];
00175
00176
00177 Copier m_loCoarCopiers[SpaceDim];
00178
00179 DisjointBoxLayout m_inputFineLayout;
00180 DisjointBoxLayout m_inputCoarLayout;
00182 bool m_isDefined;
00183
00184 protected:
00185
00186
00187
00188
00189
00190 void coarseFineInterp(BaseFab<Real> & a_phif,
00191 const BaseFab<Real> & a_phic,
00192 const QuadCFStencil& a_qcfs,
00193 const Side::LoHiSide a_hiorlo,
00194 const int a_idir,
00195 const Interval& a_variables) const;
00196
00197
00198 void getPhiStar(BaseFab<Real> & a_phistar,
00199 const BaseFab<Real> & a_phic,
00200 const QuadCFStencil& a_qcfs,
00201 const Side::LoHiSide a_hiorlo,
00202 const int a_idir,
00203 const Interval& a_variables) const;
00204
00205
00206 void interpOnIVS(BaseFab<Real> & a_phif,
00207 const BaseFab<Real> & a_phiStar,
00208 const QuadCFStencil& a_qcfs,
00209 const Side::LoHiSide a_hiorlo,
00210 const int a_idir,
00211 const Interval& a_variables) const;
00212 };
00213
00214 #endif