00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _FOURTHORDERFILLPATCH_H_
00012 #define _FOURTHORDERFILLPATCH_H_
00013
00014 #include "FArrayBox.H"
00015 #include "DisjointBoxLayout.H"
00016 #include "LevelData.H"
00017 #include "ProblemDomain.H"
00018 #include "TimeInterpolatorRK4.H"
00019 #include "FourthOrderFineInterp.H"
00020
00021 #include "NamespaceHeader.H"
00022
00023
00024
00025
00026
00027 class FourthOrderFillPatch
00028 {
00029 public:
00030
00031
00032
00033
00034 FourthOrderFillPatch();
00035
00036
00037 FourthOrderFillPatch(
00038 const DisjointBoxLayout& a_thisDisjointBoxLayout,
00039
00040 const DisjointBoxLayout& a_coarserDisjointBoxLayout,
00041
00042 const int& a_numStates,
00043
00044 const ProblemDomain& a_coarseDomain,
00045
00046 const int& a_refineCoarse,
00047
00048 const int& a_interpRadius,
00049
00050 bool a_fixedTime = false,
00051
00052 Interval a_fixedDims = Interval() )
00053 {
00054 define(a_thisDisjointBoxLayout, a_coarserDisjointBoxLayout,
00055 a_numStates, a_coarseDomain, a_refineCoarse, a_interpRadius,
00056 a_fixedTime, a_fixedDims);
00057 }
00058
00059
00060
00061
00062
00063
00064 ~FourthOrderFillPatch();
00065
00066
00067
00068
00069
00070 void define(
00071 const DisjointBoxLayout& a_thisDisjointBoxLayout,
00072
00073 const DisjointBoxLayout& a_coarserDisjointBoxLayout,
00074
00075 const int& a_numStates,
00076
00077 const ProblemDomain& a_coarseDomain,
00078
00079 const int& a_refineCoarse,
00080
00081 const int& a_interpRadius,
00082
00083 bool a_fixedTime = false,
00084
00085 Interval a_fixedDims = Interval() );
00086
00087
00088
00089
00090
00091
00092
00093 void fillInterp(
00094 LevelData<FArrayBox>& a_fineData,
00095
00096 Real a_timeInterpCoeff,
00097
00098 int a_srcComp,
00099
00100 int a_dstComp,
00101
00102 int a_numComp);
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 void fillRK4Intermediate(
00113 LevelData<FArrayBox>& a_fineData,
00114
00115 Real a_timeInterpCoeff,
00116
00117 int a_stage,
00118
00119 int a_srcComp,
00120
00121 int a_dstComp,
00122
00123 int a_numComp);
00124
00125
00126
00127
00128
00129
00130
00131 void fillInterp(
00132 LevelData<FArrayBox>& a_fineData,
00133
00134 const LevelData<FArrayBox>& a_coarseData,
00135
00136 int a_srcComp,
00137
00138 int a_dstComp,
00139
00140 int a_numComp);
00141
00142
00143
00144
00145
00146
00147 TimeInterpolatorRK4& getTimeInterpolator();
00148
00149 protected:
00150
00151
00152 bool m_defined;
00153
00154
00155 bool m_timeInterpDefined;
00156
00157
00158 DisjointBoxLayout m_layout;
00159
00160
00161 DisjointBoxLayout m_layoutCoarsened;
00162
00163
00164 DisjointBoxLayout m_coarseLayout;
00165
00166
00167 int m_interpRadius;
00168
00169
00170 ProblemDomain m_coarseDomain;
00171
00172
00173 int m_refineCoarse;
00174
00175
00176 Interval m_fixedDims;
00177
00178
00179 IntVect m_refineVect;
00180
00181
00182 int m_numStates;
00183
00184
00185 LevelData<FArrayBox> m_coarsenedFineData;
00186
00187
00188 LayoutData<IntVectSet> m_coarsenedGhosts;
00189
00190
00191 TimeInterpolatorRK4 m_timeInterpolator;
00192
00193
00194 FourthOrderFineInterp m_spaceInterpolator;
00195
00196
00197
00198
00199
00200
00201 void fillInterpSpaceFromCoarsened(
00202 LevelData<FArrayBox>& a_fineData,
00203
00204 int a_srcComp,
00205
00206 int a_dstComp,
00207
00208 int a_numComp);
00209
00210 private:
00211
00212
00213 void operator=(const FourthOrderFillPatch&);
00214 FourthOrderFillPatch(const FourthOrderFillPatch&);
00215 };
00216
00217 #include "NamespaceFooter.H"
00218 #endif