00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _EBFLUXREGISTER_H_
00012 #define _EBFLUXREGISTER_H_
00013
00014 #include "REAL.H"
00015 #include "Vector.H"
00016 #include "EBCellFAB.H"
00017 #include "EBFaceFAB.H"
00018 #include "EBISLayout.H"
00019 #include "EBISBox.H"
00020 #include "IntVectSet.H"
00021 #include "CFStencil.H"
00022 #include "LoHiSide.H"
00023 #include "LevelData.H"
00024 #include "LayoutData.H"
00025 #include "EBFastFR.H"
00026 #include "NamespaceHeader.H"
00027 class EBIndexSpace;
00028
00029 class EBCoarToFineRedist;
00030 class EBCoarToCoarRedist;
00031
00032
00033
00034
00035
00036
00037 class EBFluxRegister: public EBFastFR
00038 {
00039 public:
00040
00041
00042
00043
00044
00045 EBFluxRegister()
00046 {;}
00047
00048
00049
00050
00051
00052
00053 EBFluxRegister(const DisjointBoxLayout& a_dblFine,
00054 const DisjointBoxLayout& a_dblCoar,
00055 const EBISLayout& a_ebislFine,
00056 const EBISLayout& a_ebislCoar,
00057 const Box& a_domainCoar,
00058 const int& a_nref,
00059 const int& a_nvar,
00060 const EBIndexSpace* ebisPtr,
00061 bool a_forceNoEBCF = false);
00062
00063
00064 virtual ~EBFluxRegister();
00065
00066
00067
00068
00069
00070 void
00071 define(const DisjointBoxLayout& a_dblFine,
00072 const DisjointBoxLayout& a_dblCoar,
00073 const EBISLayout& a_ebislFine,
00074 const EBISLayout& a_ebislCoar,
00075 const ProblemDomain& a_domainCoar,
00076 const int& a_nref,
00077 const int& a_nvar,
00078 const EBIndexSpace* ebisPtr,
00079 bool a_forceNoEBCF = false);
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 void
00093 incrementCoarseRegular(const EBFaceFAB& a_coarseFlux,
00094 const Real& a_scale,
00095 const DataIndex& a_coarseDataIndex,
00096 const Interval& a_variables,
00097 const int& a_dir)
00098 {
00099 for (SideIterator sit; sit.ok(); ++sit)
00100 {
00101 incrementCoarRegul(a_coarseFlux,
00102 a_scale,
00103 a_coarseDataIndex,
00104 a_variables,
00105 a_dir, sit());
00106 }
00107 }
00108
00109
00110 void incrementCoarse(const EBFaceFAB& a_coarseFlux,
00111 const Real& a_scale,
00112 const DataIndex& a_coarseDataIndex,
00113 const Interval& a_varSrc,
00114 const Interval& a_varDst,
00115 const int& a_dir)
00116 {
00117 CH_assert(a_varSrc==a_varDst);
00118 for (SideIterator sit; sit.ok(); ++sit)
00119 {
00120 incrementCoarseBoth(a_coarseFlux, a_scale, a_coarseDataIndex, a_varSrc, a_dir, sit());
00121 }
00122 }
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 void
00135 incrementCoarseIrregular(const BaseIFFAB<Real>& a_coarseFlux,
00136 const Real& a_scale,
00137 const DataIndex& a_coarseDataIndex,
00138 const Interval& a_variables,
00139 const int& a_dir);
00140
00141
00142
00143
00144
00145 void incrementCoarseIrregular(const EBFaceFAB& a_coarFlux,
00146 const Real& a_scale,
00147 const DataIndex& a_coarDatInd,
00148 const Interval& a_variables,
00149 const int& a_dir)
00150 {
00151 for (SideIterator sit; sit.ok(); ++sit)
00152 {
00153 incrementCoarIrreg(a_coarFlux,
00154 a_scale,
00155 a_coarDatInd,
00156 a_variables,
00157 a_dir,
00158 sit());
00159 }
00160
00161 }
00162
00163
00164
00165
00166
00167
00168
00169
00170 void
00171 incrementFineRegular(const EBFaceFAB& a_fineFlux,
00172 const Real& a_scale,
00173 const DataIndex& a_fineDataIndex,
00174 const Interval& a_variables,
00175 const int& a_dir,
00176 const Side::LoHiSide& a_sd)
00177 {
00178 incrementFineRegul(a_fineFlux,
00179 a_scale,
00180 a_fineDataIndex,
00181 a_variables,
00182 a_dir,
00183 a_sd);
00184 }
00185
00186
00187 void
00188 incrementFine(const EBFaceFAB& a_fineFlux,
00189 const Real& a_scale,
00190 const DataIndex& a_fineDataIndex,
00191 const Interval& a_varSrc,
00192 const Interval& a_varDst,
00193 const int& a_dir)
00194 {
00195 CH_assert(a_varSrc == a_varDst);
00196 for (SideIterator sit; sit.ok(); ++sit)
00197 {
00198 incrementFineBoth(a_fineFlux, a_scale, a_fineDataIndex, a_varSrc, a_dir, sit());
00199 }
00200 }
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213 void
00214 incrementFineIrregular(const BaseIFFAB<Real>& a_fineFlux,
00215 const Real& a_scale,
00216 const DataIndex& a_fineDataIndex,
00217 const Interval& a_variables,
00218 const int& a_dir,
00219 const Side::LoHiSide& a_sd);
00220
00221
00222
00223
00224
00225 void
00226 incrementFineIrregular(const EBFaceFAB& a_fineFlux,
00227 const Real& a_scale,
00228 const DataIndex& a_fineDataIndex,
00229 const Interval& a_variables,
00230 const int& a_dir,
00231 const Side::LoHiSide& a_sd)
00232 {
00233 incrementFineIrreg(a_fineFlux,
00234 a_scale,
00235 a_fineDataIndex,
00236 a_variables,
00237 a_dir,
00238 a_sd);
00239 }
00240
00241
00242
00243
00244
00245
00246
00247
00248 void incrementRedistRegister(EBCoarToFineRedist& a_register,
00249 const Interval& a_variables,
00250 const Real& a_scale);
00251
00252
00253
00254
00255
00256
00257 void incrementRedistRegister(EBCoarToCoarRedist& a_register,
00258 const Interval& a_variables,
00259 const Real& a_scale);
00260
00261
00262
00263 bool isDefined() const;
00264
00265 protected:
00266
00267
00268 private:
00269
00270 bool
00271 copyBIFFToEBFF(EBFaceFAB& a_dst,
00272 const BaseIFFAB<Real>& a_src,
00273 const Box & a_box,
00274 const EBISBox& a_ebisBox);
00275
00276
00277
00278
00279
00280 void operator= (const EBFluxRegister&)
00281 {
00282 MayDay::Error("invalid operator");
00283 }
00284 EBFluxRegister(const EBFluxRegister&)
00285 {
00286 MayDay::Error("invalid operator");
00287 }
00288 };
00289 #include "NamespaceFooter.H"
00290 #endif