Chombo + EB  3.0
slowEBCO.H
Go to the documentation of this file.
1 #ifdef CH_LANG_CC
2 /*
3  * _______ __
4  * / ___/ / ___ __ _ / / ___
5  * / /__/ _ \/ _ \/ V \/ _ \/ _ \
6  * \___/_//_/\___/_/_/_/_.__/\___/
7  * Please refer to Copyright.txt, in Chombo's root directory.
8  */
9 #endif
10 
11 #ifndef _SLOWEBCO_H_
12 #define _SLOWEBCO_H_
13 
14 #include "REAL.H"
15 #include "Box.H"
16 #include "FArrayBox.H"
17 #include "Vector.H"
18 #include <map>
19 #include "RefCountedPtr.H"
20 
21 #include "AMRMultiGrid.H"
22 
23 #include "EBIndexSpace.H"
24 #include "EBCellFAB.H"
25 #include "EBCellFactory.H"
26 #include "EBStencil.H"
27 
28 #include "EBLevelDataOps.H"
29 #include "BaseEBBC.H"
30 #include "BaseDomainBC.H"
31 #include "CFIVS.H"
32 #include "EBFluxRegister.H"
33 #include "EBFastFR.H"
34 #include "EBMGAverage.H"
35 #include "EBMGInterp.H"
36 #include "PolyGeom.H"
37 #include "EBQuadCFInterp.H"
38 #include "EBLevelGrid.H"
39 #include "AMRTGA.H"
40 #include "AMRPoissonOp.H"
41 #include "CFRegion.H"
42 #include "NamespaceHeader.H"
43 
44 
45 ///
46 /**
47  Operator to solve (alpha a + beta div (b grad) )phi = rhs. This follows the AMRLevelOp interface.
48 */
49 class slowEBCO: public LevelTGAHelmOp<LevelData<EBCellFAB>, EBFluxFAB >
50 {
51 public:
52 
53  Real getSafety();
54 
55  //for tga to reset stuff
56  virtual void setAlphaAndBeta(const Real& a_alpha,
57  const Real& a_beta);
58 
59  //another tgaism
60  virtual void diagonalScale(LevelData<EBCellFAB> & a_rhs,
61  bool a_kappaWeighted);
62  virtual void divideByIdentityCoef(LevelData<EBCellFAB> & a_rhs);
63 
64  ///a leveltgaism
65  virtual void fillGrad(const LevelData<EBCellFAB>& a_phi)
66  {;}
67 
68  ///a leveltgaism
69  virtual void getFlux(EBFluxFAB& a_flux,
70  const LevelData<EBCellFAB>& a_data,
71  const Box& a_grid,
72  const DataIndex& a_dit,
73  Real a_scale);
74 
75  void getFlux(EBFaceFAB& a_fluxCentroid,
76  const EBCellFAB& a_phi,
77  const Box& a_ghostedBox,
78  const Box& a_fabBox,
79  const ProblemDomain& a_domain,
80  const EBISBox& a_ebisBox,
81  const Real& a_dx,
82  const DataIndex& a_datInd,
83  const int& a_idir);
84 
85  ///
86  virtual ~slowEBCO()
87  {;}
88 
89  ///
91  {;}
92 
93  ///
94  /** a_residual = a_rhs - L(a_phiFine, a_phi) no coaser AMR level*/
95  void AMRResidualNC(LevelData<EBCellFAB>& a_residual,
96  const LevelData<EBCellFAB>& a_phiFine,
97  const LevelData<EBCellFAB>& a_phi,
98  const LevelData<EBCellFAB>& a_rhs,
99  bool a_homogeneousBC,
100  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
101 
102 
103  ///
104  /** apply AMR operator no coaser AMR level*/
105  void AMROperatorNC(LevelData<EBCellFAB>& a_LofPhi,
106  const LevelData<EBCellFAB>& a_phiFine,
107  const LevelData<EBCellFAB>& a_phi,
108  bool a_homogeneousBC,
109  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
110 
111  ///
112  /**
113  If you are approaching this operator from this interface, consider backing away and using
114  slowEBCOFactory to generate these objects. Really.
115  a_eblgFine, : grid at finer level \\
116  a_eblg, : grid at this level \\
117  a_eblgCoar, : grid at coarser level \\
118  a_eblgCoarMG, : grid at intermediate multigrid level \\
119  a_domainBC, : domain boundary conditions at this level \\
120  a_ebBC: eb boundary conditions at this level \\
121  a_dx: grid spacing at this level \\
122  a_origin: offset to lowest corner of the domain \\
123  a_refToFine: refinement ratio to finer level \\
124  a_refToCoar: refinement ratio to coarser level \\
125  a_hasFiner: true if there is a finer AMR level, false otherwise. \\
126  a_hasCoarser: true if there is a coarser AMR level. \\
127  a_hasCoarserMG: true if there is a coarser MultiGrid level. \\
128  a_preCondIters: number of iterations to do for pre-conditioning \\
129  a_relaxType: 0 means point Jacobi, 1 is Gauss-Seidel. \\
130  a_acoef: coefficent of identity \\
131  a_bcoef: coefficient of gradient.\\
132  a_ghostCellsPhi: Number of ghost cells in phi, correction\\
133  a_ghostCellsRhs: Number of ghost cells in RHS, residual, lphi\\
134  Ghost cell arguments are there for caching reasons. Once you set them, an error is thrown if
135  you send in data that does not match.
136  */
137  slowEBCO(const EBLevelGrid & a_eblgFine,
138  const EBLevelGrid & a_eblg,
139  const EBLevelGrid & a_eblgCoar,
140  const EBLevelGrid & a_eblgCoarMG,
141  const RefCountedPtr<EBQuadCFInterp>& a_quadCFI,
142  const RefCountedPtr<ConductivityBaseDomainBC>& a_domainBC,
144  const Real & a_dx,
145  const Real & a_dxCoar,
146  const int& a_refToFine,
147  const int& a_refToCoar,
148  const bool& a_hasFine,
149  const bool& a_hasCoar,
150  const bool& a_hasMGObjects,
151  const bool& a_layoutChanged,
152  const Real& a_alpha,
153  const Real& a_beta,
154  const RefCountedPtr<LevelData<EBCellFAB> >& a_acoef,
155  const RefCountedPtr<LevelData<EBFluxFAB> >& a_bcoef,
156  const RefCountedPtr<LevelData<BaseIVFAB<Real> > >& a_bcoIrreg,
157  const IntVect& a_ghostCellsPhi,
158  const IntVect& a_ghostCellsRHS,
159  const int& a_relaxType);
160 
161  //MGOp operations. no finer or coarser
162 
163  ///
164  /**
165  */
166  virtual void residual(LevelData<EBCellFAB>& a_residual,
167  const LevelData<EBCellFAB>& a_phi,
168  const LevelData<EBCellFAB>& a_rhs,
169  bool a_homogeneousPhysBC=false);
170 
171  ///
172  /**
173  */
174  virtual void preCond(LevelData<EBCellFAB>& a_opPhi,
175  const LevelData<EBCellFAB>& a_phi);
176 
177  ///
178  /**
179  This function assumes that coarse-fine boundary condtions have
180  been dealt with.
181  */
182  virtual void applyOp(LevelData<EBCellFAB>& a_opPhi,
183  const LevelData<EBCellFAB>& a_phi,
184  const LevelData<EBCellFAB>* const a_phiCoarse,
185  const bool& a_homogeneousPhysBC,
186  const bool& a_homogeneousCFBC);
187 
188  /// virtual function called by LevelTGA
189  virtual void applyOpNoBoundary(LevelData<EBCellFAB>& a_opPhi,
190  const LevelData<EBCellFAB>& a_phi);
191 
192  ///
193  /**
194  this is the linearop function. CFBC is set to homogeneous. phic is null
195  */
196  virtual void applyOp(LevelData<EBCellFAB>& a_opPhi,
197  const LevelData<EBCellFAB>& a_phi,
198  bool a_homogeneousPhysBC);
199 
200  ///
201  /**
202  */
203  virtual void create(LevelData<EBCellFAB>& a_lhs,
204  const LevelData<EBCellFAB>& a_rhs);
205 
206  ///
207  virtual void createCoarsened(LevelData<EBCellFAB>& a_lhs,
208  const LevelData<EBCellFAB>& a_rhs,
209  const int& a_refRat);
210 
211  Real
212  AMRNorm(const LevelData<EBCellFAB>& a_coarResid,
213  const LevelData<EBCellFAB>& a_fineResid,
214  const int& a_refRat,
215  const int& a_ord);
216 
217  ///
218  /**
219  */
220  virtual void assign(LevelData<EBCellFAB>& a_lhs,
221  const LevelData<EBCellFAB>& a_rhs);
222 
223  ///
224  /**
225  */
226  virtual Real dotProduct(const LevelData<EBCellFAB>& a_1,
227  const LevelData<EBCellFAB>& a_2);
228 
229  ///
230  /**
231  */
232  virtual void incr(LevelData<EBCellFAB>& a_lhs,
233  const LevelData<EBCellFAB>& a_x,
234  Real a_scale);
235 
236  ///
237  /**
238  */
239  virtual void axby(LevelData<EBCellFAB>& a_lhs,
240  const LevelData<EBCellFAB>& a_x,
241  const LevelData<EBCellFAB>& a_y,
242  Real a_a,
243  Real a_b);
244 
245  ///
246  /**
247  */
248  virtual void scale(LevelData<EBCellFAB>& a_lhs,
249  const Real& a_scale);
250 
251  ///
252  /**
253  */
254  virtual Real norm(const LevelData<EBCellFAB>& a_rhs,
255  int a_ord);
256 
257  ///
258  /**
259  */
260  virtual void setToZero(LevelData<EBCellFAB>& a_lhs);
261 
262  ///
263  /**
264  */
265  virtual void setVal(LevelData<EBCellFAB>& a_lhs, const Real& a_value);
266 
267  ///
268  /**
269  */
270  virtual void createCoarser(LevelData<EBCellFAB>& a_coarse,
271  const LevelData<EBCellFAB>& a_fine,
272  bool a_ghosted);
273 
274  ///
275  /**
276  */
277  virtual void relax(LevelData<EBCellFAB>& a_e,
278  const LevelData<EBCellFAB>& a_residual,
279  int a_iterations);
280 
281 
282  virtual void relaxGauSai(LevelData<EBCellFAB>& a_e,
283  const LevelData<EBCellFAB>& a_residual,
284  int a_iterations);
285 
286  virtual void relaxPoiJac(LevelData<EBCellFAB>& a_e,
287  const LevelData<EBCellFAB>& a_residual,
288  int a_iterations);
289 
290  ///
291  /**
292  Calculate restricted residual:
293  a_resCoarse[2h] = I[h->2h] (a_rhsFine[h] - L[h](a_phiFine[h]))
294  */
295  virtual void restrictResidual(LevelData<EBCellFAB>& a_resCoarse,
296  LevelData<EBCellFAB>& a_phiFine,
297  const LevelData<EBCellFAB>& a_rhsFine);
298 
299  ///
300  /**
301  Correct the fine solution based on coarse correction:
302  a_phiThisLevel += I[2h->h] (a_correctCoarse)
303  */
304  virtual void prolongIncrement(LevelData<EBCellFAB>& a_phiThisLevel,
305  const LevelData<EBCellFAB>& a_correctCoarse);
306 
307  ///
308  /** Refinement ratio between this level and coarser level.
309  Returns 1 when there are no coarser AMRLevelOp objects */
310  virtual int refToCoarser();
311 
312  ///
313  /** Refinement ratio between this level and coarser level.
314  Returns 1 when there are no coarser AMRLevelOp objects */
315  virtual int refToFiner();
316 
317  ///
318  /** a_residual = a_rhs - L(a_phi, a_phiFine, a_phiCoarse) */
319  virtual void AMRResidual(LevelData<EBCellFAB>& a_residual,
320  const LevelData<EBCellFAB>& a_phiFine,
321  const LevelData<EBCellFAB>& a_phi,
322  const LevelData<EBCellFAB>& a_phiCoarse,
323  const LevelData<EBCellFAB>& a_rhs,
324  bool a_homogeneousBC,
325  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
326 
327  ///
328  /** a_residual = a_rhs - L(a_phi, a_phiCoarse) */
329  virtual void AMRResidualNF(LevelData<EBCellFAB>& a_residual,
330  const LevelData<EBCellFAB>& a_phi,
331  const LevelData<EBCellFAB>& a_phiCoarse,
332  const LevelData<EBCellFAB>& a_rhs,
333  bool a_homogeneousBC);
334 
335 
336  ///
337  /** a_residual = a_rhs - L(a_phi, a_phiFine, a_phiCoarse) */
338  virtual void AMROperator(LevelData<EBCellFAB>& a_LofPhi,
339  const LevelData<EBCellFAB>& a_phiFine,
340  const LevelData<EBCellFAB>& a_phi,
341  const LevelData<EBCellFAB>& a_phiCoarse,
342  bool a_homogeneousBC,
343  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
344 
345  ///
346  /** a_residual = a_rhs - L(a_phi, a_phiCoarse) */
347  virtual void AMROperatorNF(LevelData<EBCellFAB>& a_LofPhi,
348  const LevelData<EBCellFAB>& a_phi,
349  const LevelData<EBCellFAB>& a_phiCoarse,
350  bool a_homogeneousBC);
351 
352  ///
353  /** a_resCoarse = I[h-2h] (a_residual - L(a_correction, a_coarseCorrection)) */
354  virtual void AMRRestrict(LevelData<EBCellFAB>& a_resCoarse,
355  const LevelData<EBCellFAB>& a_residual,
356  const LevelData<EBCellFAB>& a_correction,
357  const LevelData<EBCellFAB>& a_coarseCorrection);
358 
359  ///
360  /** a_correction += I[2h->h](a_coarseCorrection) */
361  virtual void AMRProlong(LevelData<EBCellFAB>& a_correction,
362  const LevelData<EBCellFAB>& a_coarseCorrection);
363 
364  ///
365  /** a_residual = a_residual - L(a_correction, a_coarseCorrection) */
366  virtual void AMRUpdateResidual(LevelData<EBCellFAB>& a_residual,
367  const LevelData<EBCellFAB>& a_correction,
368  const LevelData<EBCellFAB>& a_coarseCorrection);
369 
370  void reflux(LevelData<EBCellFAB>& a_residual,
371  const LevelData<EBCellFAB>& a_phiFine,
372  const LevelData<EBCellFAB>& a_phi,
373  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
374 
375  void gsrbColor(LevelData<EBCellFAB>& a_phi,
376  const LevelData<EBCellFAB>& a_lph,
377  const LevelData<EBCellFAB>& a_rhs,
378  const IntVect& a_color);
379 
380  void getDivFStencil(VoFStencil& a_vofStencil,
381  const VolIndex& a_vof,
382  const DataIndex& a_dit);
383 
384  void getFluxStencil(VoFStencil& a_fluxStencil,
385  const FaceIndex& a_face,
386  const DataIndex& a_dit);
387 
388  void getFaceCenteredFluxStencil(VoFStencil& a_fluxStencil,
389  const FaceIndex& a_face,
390  const DataIndex& a_dit);
391 
392  void incrOpRegularDir(EBCellFAB& a_lhs,
393  const EBCellFAB& a_phi,
394  const bool& a_homogeneous,
395  const int& a_dir,
396  const DataIndex& a_datInd);
397  void applyOpIrregular(EBCellFAB& a_lhs,
398  const EBCellFAB& a_phi,
399  const bool& a_homogeneous,
400  const DataIndex& a_datInd);
401 protected:
402 
403  static bool s_turnOffBCs;
404  void defineStencils();
408 
410 
416 
419 
426 
429  //weights that get multiplied by alpha
431  //weights that get multiplied by beta
435  bool m_hasFine;
437  bool m_hasCoar;
438 
439  //restriction object
441  //prolongation object
443 
444  //stencils for operator evaluation
446  //stencils for operator evaluation on gauss-seidel colors
448 
449  //cache the vofiterators
450  //for irregular cell iteration (includes buffer around multivalued cells)
453  //for domain boundary conditions at ir regular cells
456 
458 
459  // Coarse-fine stencils for homogeneous CFInterp
462 
463  //flux register with finer level
465 
466  //special mg objects for when we do not have
467  //a coarser level or when the refinement to coarse
468  //is greater than two
469  //flag for when we need special MG objects
472  //stuff below is only defined if m_hasMGObjects==true
478 
480 
481 private:
482 
483  void incrementFRCoar(EBFastFR& a_fluxReg,
484  const LevelData<EBCellFAB>& a_phiFine,
485  const LevelData<EBCellFAB>& a_phi);
486 
487  void incrementFRFine(EBFastFR& a_fluxReg,
488  const LevelData<EBCellFAB>& a_phiFine,
489  const LevelData<EBCellFAB>& a_phi,
490  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
491 
492  void getFlux(FArrayBox& a_flux,
493  const FArrayBox& a_phi,
494  const Box& a_faceBox,
495  const int& a_idir,
496  const Real& a_dx,
497  const DataIndex& a_datInd);
498 
499 
500 
501  void applyCFBCs(LevelData<EBCellFAB>& a_phi,
502  const LevelData<EBCellFAB>* const a_phiCoarse,
503  bool a_homogeneousCFBC);
504 
505  void getOpVoFStencil(VoFStencil& a_stencil,
506  const EBISBox& a_ebisbox,
507  const VolIndex& a_vof);
508 
509  void getOpVoFStencil(VoFStencil& a_stencil,
510  const int& a_dir,
511  const Vector<VolIndex>& a_allMonotoneVoFs,
512  const EBISBox& a_ebisbox,
513  const VolIndex& a_vof,
514  const bool& a_lowOrder);
515 
516 
517  void getOpFaceStencil(VoFStencil& a_stencil,
518  const Vector<VolIndex>& a_allMonotoneVofs,
519  const EBISBox& a_ebisbox,
520  const VolIndex& a_vof,
521  int a_dir,
522  const Side::LoHiSide& a_side,
523  const FaceIndex& a_face,
524  const bool& a_lowOrder);
525 
526  void levelJacobi(LevelData<EBCellFAB>& a_phi,
527  const LevelData<EBCellFAB>& a_rhs);
528 
530 
531  void applyHomogeneousCFBCs(EBCellFAB& a_phi,
532  const DataIndex& a_datInd,
533  int a_idir,
534  Side::LoHiSide a_hiorlo);
535 private:
536  //copy constructor and operator= disallowed for all the usual reasons
537  slowEBCO(const slowEBCO& a_opin)
538  {
539  MayDay::Error("invalid operator");
540  }
541 
542  void operator=(const slowEBCO& a_opin)
543  {
544  MayDay::Error("invalid operator");
545  }
546 };
547 
548 
549 #include "NamespaceFooter.H"
550 #endif
LayoutData< BaseIVFAB< Real > > m_betaDiagWeight
Definition: slowEBCO.H:432
Real m_beta
Definition: slowEBCO.H:428
virtual void setAlphaAndBeta(const Real &a_alpha, const Real &a_beta)
RefCountedPtr< ConductivityBaseDomainBC > m_domainBC
Definition: slowEBCO.H:417
LayoutData< VoFIterator > m_vofIterDomLo[CH_SPACEDIM]
Definition: slowEBCO.H:454
virtual void relaxGauSai(LevelData< EBCellFAB > &a_e, const LevelData< EBCellFAB > &a_residual, int a_iterations)
EBLevelGrid m_eblgCoarMG
Definition: slowEBCO.H:414
EBLevelGrid m_eblgFine
Definition: slowEBCO.H:412
virtual void prolongIncrement(LevelData< EBCellFAB > &a_phiThisLevel, const LevelData< EBCellFAB > &a_correctCoarse)
void reflux(LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp)
EBFastFR-A class to encapsulate a levels worth of flux registers.
Definition: EBFastFR.H:39
void incrementFRCoar(EBFastFR &a_fluxReg, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi)
LayoutData< RefCountedPtr< EBStencil > > m_opEBStencil
Definition: slowEBCO.H:445
bool m_hasCoar
Definition: slowEBCO.H:437
int m_refToFine
Definition: slowEBCO.H:433
#define CH_SPACEDIM
Definition: SPACE.H:52
void levelJacobi(LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_rhs)
Definition: slowEBCO.H:49
LayoutData< VoFIterator > m_vofIterDomHi[CH_SPACEDIM]
Definition: slowEBCO.H:455
A class to facilitate interaction with physical boundary conditions.
Definition: ProblemDomain.H:130
EBISLayout m_ebislCoarMG
Definition: slowEBCO.H:476
Definition: FaceIndex.H:28
RefCountedPtr< EBQuadCFInterp > m_quadCFIWithCoar
Definition: slowEBCO.H:409
Data that maintains a one-to-one mapping of T to the boxes in a BoxLayout.
Definition: LayoutData.H:46
EBLevelGrid m_eblgCoar
Definition: slowEBCO.H:413
virtual void AMRUpdateResidual(LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_coarseCorrection)
Definition: EBISBox.H:46
virtual Real norm(const LevelData< EBCellFAB > &a_rhs, int a_ord)
EBMGInterp m_ebInterp
Definition: slowEBCO.H:442
Definition: EBLevelGrid.H:30
slowEBCO(const slowEBCO &a_opin)
Definition: slowEBCO.H:537
virtual void AMROperatorNF(LevelData< EBCellFAB > &a_LofPhi, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoarse, bool a_homogeneousBC)
virtual void incr(LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_x, Real a_scale)
Real m_dxFine
Definition: slowEBCO.H:420
Real m_alpha
Definition: slowEBCO.H:427
virtual void AMRProlong(LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_coarseCorrection)
void getOpVoFStencil(VoFStencil &a_stencil, const EBISBox &a_ebisbox, const VolIndex &a_vof)
virtual void createCoarsened(LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs, const int &a_refRat)
virtual void setVal(LevelData< EBCellFAB > &a_lhs, const Real &a_value)
EBMGAverage m_ebAverage
Definition: slowEBCO.H:440
Definition: EBFaceFAB.H:28
virtual void AMRRestrict(LevelData< EBCellFAB > &a_resCoarse, const LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_coarseCorrection)
void gsrbColor(LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_lph, const LevelData< EBCellFAB > &a_rhs, const IntVect &a_color)
virtual void fillGrad(const LevelData< EBCellFAB > &a_phi)
a leveltgaism
Definition: slowEBCO.H:65
Piecewise constant interpolation.
Definition: EBMGInterp.H:33
virtual void axby(LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_x, const LevelData< EBCellFAB > &a_y, Real a_a, Real a_b)
virtual void applyOpNoBoundary(LevelData< EBCellFAB > &a_opPhi, const LevelData< EBCellFAB > &a_phi)
virtual function called by LevelTGA
void applyOpIrregular(EBCellFAB &a_lhs, const EBCellFAB &a_phi, const bool &a_homogeneous, const DataIndex &a_datInd)
const int SpaceDim
Definition: SPACE.H:39
Definition: AMRMultiGrid.H:35
virtual void getFlux(EBFluxFAB &a_flux, const LevelData< EBCellFAB > &a_data, const Box &a_grid, const DataIndex &a_dit, Real a_scale)
a leveltgaism
int m_relaxType
Definition: slowEBCO.H:405
void AMROperatorNC(LevelData< EBCellFAB > &a_LofPhi, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, bool a_homogeneousBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp)
Real m_dx
Definition: slowEBCO.H:421
VoF-centered stencil.
Definition: Stencils.H:59
Vector< IntVect > m_colors
Definition: slowEBCO.H:479
const IntVect m_ghostCellsRHS
Definition: slowEBCO.H:407
void getFaceCenteredFluxStencil(VoFStencil &a_fluxStencil, const FaceIndex &a_face, const DataIndex &a_dit)
const IntVect m_ghostCellsPhi
Definition: slowEBCO.H:406
virtual int refToCoarser()
void AMRResidualNC(LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_rhs, bool a_homogeneousBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp)
A EBFaceFAB-like container for edge-centered fluxes.
Definition: EBFluxFAB.H:25
void applyHomogeneousCFBCs(LevelData< EBCellFAB > &a_phi)
void incrOpRegularDir(EBCellFAB &a_lhs, const EBCellFAB &a_phi, const bool &a_homogeneous, const int &a_dir, const DataIndex &a_datInd)
Definition: EBCellFAB.H:29
virtual void setToZero(LevelData< EBCellFAB > &a_lhs)
LayoutData< VoFIterator > m_vofIterMulti
Definition: slowEBCO.H:452
double Real
Definition: REAL.H:33
EBLevelGrid m_eblg
Definition: slowEBCO.H:411
Real AMRNorm(const LevelData< EBCellFAB > &a_coarResid, const LevelData< EBCellFAB > &a_fineResid, const int &a_refRat, const int &a_ord)
Real getSafety()
virtual void preCond(LevelData< EBCellFAB > &a_opPhi, const LevelData< EBCellFAB > &a_phi)
virtual ~slowEBCO()
Definition: slowEBCO.H:86
A BoxLayout that has a concept of disjointedness.
Definition: DisjointBoxLayout.H:31
Real m_dxCoar
Definition: slowEBCO.H:422
virtual void scale(LevelData< EBCellFAB > &a_lhs, const Real &a_scale)
RefCountedPtr< LevelData< EBFluxFAB > > m_bcoef
Definition: slowEBCO.H:424
LoHiSide
Definition: LoHiSide.H:27
bool m_hasInterpAve
Definition: slowEBCO.H:436
int m_refToCoar
Definition: slowEBCO.H:434
LayoutData< BaseIVFAB< Real > > m_alphaDiagWeight
Definition: slowEBCO.H:430
void getDivFStencil(VoFStencil &a_vofStencil, const VolIndex &a_vof, const DataIndex &a_dit)
EBLevelGrid m_eblgCoarsenedFine
Definition: slowEBCO.H:415
static void Error(const char *const a_msg=m_nullString, int m_exitCode=CH_DEFAULT_ERROR_CODE)
Print out message to cerr and exit with the specified exit code.
virtual void restrictResidual(LevelData< EBCellFAB > &a_resCoarse, LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_rhsFine)
void operator=(const slowEBCO &a_opin)
Definition: slowEBCO.H:542
DisjointBoxLayout m_dblCoarMG
Definition: slowEBCO.H:475
bool m_hasMGObjects
Definition: slowEBCO.H:470
virtual void AMRResidual(LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoarse, const LevelData< EBCellFAB > &a_rhs, bool a_homogeneousBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp)
virtual void createCoarser(LevelData< EBCellFAB > &a_coarse, const LevelData< EBCellFAB > &a_fine, bool a_ghosted)
virtual void diagonalScale(LevelData< EBCellFAB > &a_rhs, bool a_kappaWeighted)
void getOpFaceStencil(VoFStencil &a_stencil, const Vector< VolIndex > &a_allMonotoneVofs, const EBISBox &a_ebisbox, const VolIndex &a_vof, int a_dir, const Side::LoHiSide &a_side, const FaceIndex &a_face, const bool &a_lowOrder)
A Rectangular Domain on an Integer Lattice.
Definition: Box.H:465
void calculateRelaxationCoefficient()
virtual void relax(LevelData< EBCellFAB > &a_e, const LevelData< EBCellFAB > &a_residual, int a_iterations)
LayoutData< VoFIterator > m_vofIterIrreg
Definition: slowEBCO.H:451
Definition: DataIndex.H:112
static bool s_turnOffBCs
Definition: slowEBCO.H:403
void getFluxStencil(VoFStencil &a_fluxStencil, const FaceIndex &a_face, const DataIndex &a_dit)
LevelData< EBCellFAB > m_relCoef
Definition: slowEBCO.H:447
ProblemDomain m_domainCoarMG
Definition: slowEBCO.H:477
Piecewise constant interpolation.
Definition: EBMGAverage.H:31
virtual Real dotProduct(const LevelData< EBCellFAB > &a_1, const LevelData< EBCellFAB > &a_2)
LayoutData< CFIVS > m_hiCFIVS[SpaceDim]
Definition: slowEBCO.H:461
An integer Vector in SpaceDim-dimensional space.
Definition: CHArray.H:42
Definition: FArrayBox.H:44
Definition: AMRTGA.H:159
RefCountedPtr< LevelData< BaseIVFAB< Real > > > m_bcoIrreg
Definition: slowEBCO.H:425
virtual void create(LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs)
void defineStencils()
virtual void divideByIdentityCoef(LevelData< EBCellFAB > &a_rhs)
slowEBCO()
Definition: slowEBCO.H:90
Volume of Fluid Index.
Definition: VolIndex.H:31
bool m_layoutChanged
Definition: slowEBCO.H:471
virtual void residual(LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_rhs, bool a_homogeneousPhysBC=false)
void applyCFBCs(LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > *const a_phiCoarse, bool a_homogeneousCFBC)
EBMGInterp m_ebInterpMG
Definition: slowEBCO.H:474
virtual void assign(LevelData< EBCellFAB > &a_lhs, const LevelData< EBCellFAB > &a_rhs)
virtual void applyOp(LevelData< EBCellFAB > &a_opPhi, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > *const a_phiCoarse, const bool &a_homogeneousPhysBC, const bool &a_homogeneousCFBC)
Definition: EBISLayout.H:39
void incrementFRFine(EBFastFR &a_fluxReg, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp)
virtual void relaxPoiJac(LevelData< EBCellFAB > &a_e, const LevelData< EBCellFAB > &a_residual, int a_iterations)
virtual void AMROperator(LevelData< EBCellFAB > &a_LofPhi, const LevelData< EBCellFAB > &a_phiFine, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoarse, bool a_homogeneousBC, AMRLevelOp< LevelData< EBCellFAB > > *a_finerOp)
EBMGAverage m_ebAverageMG
Definition: slowEBCO.H:473
RefCountedPtr< ConductivityBaseEBBC > m_ebBC
Definition: slowEBCO.H:418
virtual void AMRResidualNF(LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_phiCoarse, const LevelData< EBCellFAB > &a_rhs, bool a_homogeneousBC)
EBFastFR m_fastFR
Definition: slowEBCO.H:464
virtual int refToFiner()
LayoutData< CFIVS > m_loCFIVS[SpaceDim]
Definition: slowEBCO.H:460
bool m_hasFine
Definition: slowEBCO.H:435
RefCountedPtr< LevelData< EBCellFAB > > m_acoef
Definition: slowEBCO.H:423