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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #ifndef _LEVELFLUXREGISTER_H_
00053 #define _LEVELFLUXREGISTER_H_
00054
00055 #include "REAL.H"
00056 #include "Vector.H"
00057 #include "FArrayBox.H"
00058 #include "IntVectSet.H"
00059 #include "CFStencil.H"
00060 #include "LoHiSide.H"
00061 #include "LevelData.H"
00062 #include "LayoutData.H"
00063 #include "ProblemDomain.H"
00064
00066
00075 class LevelFluxRegister
00076 {
00077 public:
00078
00080
00083 LevelFluxRegister();
00084
00086
00091 LevelFluxRegister(
00092 const DisjointBoxLayout& a_dbl,
00093 const DisjointBoxLayout& a_dblCoarse,
00094 const Box& a_dProblem,
00095 int a_nRefine,
00096 int a_nComp);
00097
00099
00104 LevelFluxRegister(
00105 const DisjointBoxLayout& a_dbl,
00106 const DisjointBoxLayout& a_dblCoarse,
00107 const ProblemDomain& a_dProblem,
00108 int a_nRefine,
00109 int a_nComp);
00110
00112 ~LevelFluxRegister();
00113
00115
00120 void define(
00121 const DisjointBoxLayout& a_dbl,
00122 const DisjointBoxLayout& a_dblCoarse,
00123 const Box& a_dProblem,
00124 int a_nRefine,
00125 int a_nComp);
00126
00128
00133 void define(
00134 const DisjointBoxLayout& a_dbl,
00135 const DisjointBoxLayout& a_dblCoarse,
00136 const ProblemDomain& a_dProblem,
00137 int a_nRefine,
00138 int a_nComp);
00139
00141
00147 void
00148 undefine();
00149
00151
00154 void setToZero();
00155
00157
00166 void incrementCoarse(
00167 FArrayBox& a_coarseFlux,
00168 Real a_scale,
00169 const DataIndex& a_coarseDataIndex,
00170 const Interval& a_srcInterval,
00171 const Interval& a_dstInterval,
00172 int a_dir);
00173
00175
00178 void incrementCoarse(
00179 FArrayBox& a_coarseFlux,
00180 Real a_scale,
00181 const DataIndex& a_coarseDataIndex,
00182 const Interval& a_srcInterval,
00183 const Interval& a_dstInterval,
00184 int a_dir,
00185 Side::LoHiSide a_sd);
00186
00188
00195 void incrementFine(
00196 FArrayBox& a_fineFlux,
00197 Real a_scale,
00198 const DataIndex& a_fineDataIndex,
00199 const Interval& a_srcInterval,
00200 const Interval& a_dstInterval,
00201 int a_dir,
00202 Side::LoHiSide a_sd);
00203
00205
00215 void reflux(
00216 LevelData<FArrayBox>& a_uCoarse,
00217 Real a_scale);
00218
00220
00226 void reflux(
00227 LevelData<FArrayBox>& a_uCoarse,
00228 const Interval& a_coarse_interval,
00229 const Interval& a_flux_interval,
00230 Real a_scale);
00231
00233
00236 bool isDefined() const;
00237
00239 void poutCoarseRegisters() const;
00240
00242 void poutFineRegisters() const;
00243 protected:
00244
00245
00246
00247
00248 LevelData<FArrayBox> m_coarFlux;
00249 LevelData<FArrayBox> m_fineFlux;
00250
00251
00252 LayoutData< Vector<Box> > m_coarseLocations[CH_SPACEDIM*2];
00253
00254 ProblemDomain m_domain;
00255
00256 bool m_isDefined;
00257
00258 int m_nRefine;
00259
00260 Copier m_reverseCopier;
00261
00262 private:
00263
00265 void operator= (const LevelFluxRegister&);
00267 LevelFluxRegister(const LevelFluxRegister&);
00268 };
00269 #endif