Chombo + EB  3.2
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"
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  bool a_skip_res = false );
359 
360  ///
361  /** a_correction += I[2h->h](a_coarseCorrection) */
362  virtual void AMRProlong(LevelData<EBCellFAB>& a_correction,
363  const LevelData<EBCellFAB>& a_coarseCorrection);
364 
365  ///
366  /** a_residual = a_residual - L(a_correction, a_coarseCorrection) */
367  virtual void AMRUpdateResidual(LevelData<EBCellFAB>& a_residual,
368  const LevelData<EBCellFAB>& a_correction,
369  const LevelData<EBCellFAB>& a_coarseCorrection);
370 
371  void reflux(LevelData<EBCellFAB>& a_residual,
372  const LevelData<EBCellFAB>& a_phiFine,
373  const LevelData<EBCellFAB>& a_phi,
374  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
375 
376  void gsrbColor(LevelData<EBCellFAB>& a_phi,
377  const LevelData<EBCellFAB>& a_lph,
378  const LevelData<EBCellFAB>& a_rhs,
379  const IntVect& a_color);
380 
381  void getDivFStencil(VoFStencil& a_vofStencil,
382  const VolIndex& a_vof,
383  const DataIndex& a_dit);
384 
385  void getFluxStencil(VoFStencil& a_fluxStencil,
386  const FaceIndex& a_face,
387  const DataIndex& a_dit);
388 
389  void getFaceCenteredFluxStencil(VoFStencil& a_fluxStencil,
390  const FaceIndex& a_face,
391  const DataIndex& a_dit);
392 
393  void incrOpRegularDir(EBCellFAB& a_lhs,
394  const EBCellFAB& a_phi,
395  const bool& a_homogeneous,
396  const int& a_dir,
397  const DataIndex& a_datInd);
398  void applyOpIrregular(EBCellFAB& a_lhs,
399  const EBCellFAB& a_phi,
400  const bool& a_homogeneous,
401  const DataIndex& a_datInd);
402 protected:
403 
404  static bool s_turnOffBCs;
405  void defineStencils();
409 
411 
417 
420 
427 
430  //weights that get multiplied by alpha
432  //weights that get multiplied by beta
436  bool m_hasFine;
438  bool m_hasCoar;
439 
440  //restriction object
442  //prolongation object
444 
445  //stencils for operator evaluation
446  //LayoutData<RefCountedPtr<EBStencil> > m_opEBStencil;
448  //stencils for operator evaluation on gauss-seidel colors
450 
451  //cache the vofiterators
452  //for irregular cell iteration (includes buffer around multivalued cells)
455  //for domain boundary conditions at ir regular cells
458 
460 
461  // Coarse-fine stencils for homogeneous CFInterp
464 
465  //flux register with finer level
467 
468  //special mg objects for when we do not have
469  //a coarser level or when the refinement to coarse
470  //is greater than two
471  //flag for when we need special MG objects
474  //stuff below is only defined if m_hasMGObjects==true
480 
482 
483 private:
484 
485  void incrementFRCoar(EBFastFR& a_fluxReg,
486  const LevelData<EBCellFAB>& a_phiFine,
487  const LevelData<EBCellFAB>& a_phi);
488 
489  void incrementFRFine(EBFastFR& a_fluxReg,
490  const LevelData<EBCellFAB>& a_phiFine,
491  const LevelData<EBCellFAB>& a_phi,
492  AMRLevelOp<LevelData<EBCellFAB> >* a_finerOp);
493 
494  void getFlux(FArrayBox& a_flux,
495  const FArrayBox& a_phi,
496  const Box& a_faceBox,
497  const int& a_idir,
498  const Real& a_dx,
499  const DataIndex& a_datInd);
500 
501 
502 
503  void applyCFBCs(LevelData<EBCellFAB>& a_phi,
504  const LevelData<EBCellFAB>* const a_phiCoarse,
505  bool a_homogeneousCFBC);
506 
507  void getOpVoFStencil(VoFStencil& a_stencil,
508  const EBISBox& a_ebisbox,
509  const VolIndex& a_vof);
510 
511  void getOpVoFStencil(VoFStencil& a_stencil,
512  const int& a_dir,
513  const Vector<VolIndex>& a_allMonotoneVoFs,
514  const EBISBox& a_ebisbox,
515  const VolIndex& a_vof,
516  const bool& a_lowOrder);
517 
518 
519  void getOpFaceStencil(VoFStencil& a_stencil,
520  const Vector<VolIndex>& a_allMonotoneVofs,
521  const EBISBox& a_ebisbox,
522  const VolIndex& a_vof,
523  int a_dir,
524  const Side::LoHiSide& a_side,
525  const FaceIndex& a_face,
526  const bool& a_lowOrder);
527 
528  void levelJacobi(LevelData<EBCellFAB>& a_phi,
529  const LevelData<EBCellFAB>& a_rhs);
530 
532 
533  void applyHomogeneousCFBCs(EBCellFAB& a_phi,
534  const DataIndex& a_datInd,
535  int a_idir,
536  Side::LoHiSide a_hiorlo);
537 private:
538  //copy constructor and operator= disallowed for all the usual reasons
539  slowEBCO(const slowEBCO& a_opin)
540  {
541  MayDay::Error("invalid operator");
542  }
543 
544  void operator=(const slowEBCO& a_opin)
545  {
546  MayDay::Error("invalid operator");
547  }
548 };
549 
550 
551 #include "NamespaceFooter.H"
552 #endif
LayoutData< BaseIVFAB< Real > > m_betaDiagWeight
Definition: slowEBCO.H:433
Real m_beta
Definition: slowEBCO.H:429
virtual void setAlphaAndBeta(const Real &a_alpha, const Real &a_beta)
RefCountedPtr< ConductivityBaseDomainBC > m_domainBC
Definition: slowEBCO.H:418
LayoutData< VoFIterator > m_vofIterDomLo[CH_SPACEDIM]
Definition: slowEBCO.H:456
virtual void relaxGauSai(LevelData< EBCellFAB > &a_e, const LevelData< EBCellFAB > &a_residual, int a_iterations)
EBLevelGrid m_eblgCoarMG
Definition: slowEBCO.H:415
EBLevelGrid m_eblgFine
Definition: slowEBCO.H:413
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)
bool m_hasCoar
Definition: slowEBCO.H:438
int m_refToFine
Definition: slowEBCO.H:434
#define CH_SPACEDIM
Definition: SPACE.H:51
void levelJacobi(LevelData< EBCellFAB > &a_phi, const LevelData< EBCellFAB > &a_rhs)
Definition: slowEBCO.H:49
LayoutData< VoFIterator > m_vofIterDomHi[CH_SPACEDIM]
Definition: slowEBCO.H:457
A class to facilitate interaction with physical boundary conditions.
Definition: ProblemDomain.H:141
EBISLayout m_ebislCoarMG
Definition: slowEBCO.H:478
Definition: FaceIndex.H:28
RefCountedPtr< EBQuadCFInterp > m_quadCFIWithCoar
Definition: slowEBCO.H:410
Data that maintains a one-to-one mapping of T to the boxes in a BoxLayout.
Definition: BoxLayout.H:26
EBLevelGrid m_eblgCoar
Definition: slowEBCO.H:414
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:443
Definition: EBLevelGrid.H:30
slowEBCO(const slowEBCO &a_opin)
Definition: slowEBCO.H:539
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:421
Real m_alpha
Definition: slowEBCO.H:428
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:441
Definition: EBFaceFAB.H:28
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:38
Definition: AMRMultiGrid.H:39
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:406
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:422
VoF-centered stencil.
Definition: Stencils.H:60
Vector< IntVect > m_colors
Definition: slowEBCO.H:481
const IntVect m_ghostCellsRHS
Definition: slowEBCO.H:408
void getFaceCenteredFluxStencil(VoFStencil &a_fluxStencil, const FaceIndex &a_face, const DataIndex &a_dit)
const IntVect m_ghostCellsPhi
Definition: slowEBCO.H:407
virtual int refToCoarser()
virtual void AMRRestrict(LevelData< EBCellFAB > &a_resCoarse, const LevelData< EBCellFAB > &a_residual, const LevelData< EBCellFAB > &a_correction, const LevelData< EBCellFAB > &a_coarseCorrection, bool a_skip_res=false)
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:454
double Real
Definition: REAL.H:33
EBLevelGrid m_eblg
Definition: slowEBCO.H:412
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:30
Real m_dxCoar
Definition: slowEBCO.H:423
virtual void scale(LevelData< EBCellFAB > &a_lhs, const Real &a_scale)
RefCountedPtr< LevelData< EBFluxFAB > > m_bcoef
Definition: slowEBCO.H:425
LoHiSide
Definition: LoHiSide.H:27
bool m_hasInterpAve
Definition: slowEBCO.H:437
int m_refToCoar
Definition: slowEBCO.H:435
LayoutData< BaseIVFAB< Real > > m_alphaDiagWeight
Definition: slowEBCO.H:431
void getDivFStencil(VoFStencil &a_vofStencil, const VolIndex &a_vof, const DataIndex &a_dit)
EBLevelGrid m_eblgCoarsenedFine
Definition: slowEBCO.H:416
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:544
DisjointBoxLayout m_dblCoarMG
Definition: slowEBCO.H:477
bool m_hasMGObjects
Definition: slowEBCO.H:472
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:453
Definition: DataIndex.H:112
LayoutData< BaseIVFAB< VoFStencil > > m_opStencil
Definition: slowEBCO.H:447
static bool s_turnOffBCs
Definition: slowEBCO.H:404
void getFluxStencil(VoFStencil &a_fluxStencil, const FaceIndex &a_face, const DataIndex &a_dit)
LevelData< EBCellFAB > m_relCoef
Definition: slowEBCO.H:449
ProblemDomain m_domainCoarMG
Definition: slowEBCO.H:479
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:463
An integer Vector in SpaceDim-dimensional space.
Definition: CHArray.H:42
Definition: FArrayBox.H:45
Definition: AMRTGA.H:159
RefCountedPtr< LevelData< BaseIVFAB< Real > > > m_bcoIrreg
Definition: slowEBCO.H:426
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:473
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:476
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:475
RefCountedPtr< ConductivityBaseEBBC > m_ebBC
Definition: slowEBCO.H:419
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:466
virtual int refToFiner()
LayoutData< CFIVS > m_loCFIVS[SpaceDim]
Definition: slowEBCO.H:462
bool m_hasFine
Definition: slowEBCO.H:436
RefCountedPtr< LevelData< EBCellFAB > > m_acoef
Definition: slowEBCO.H:424