Chombo + EB + MF  3.2
MultiBlockFaceRegister.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 _MULTIBLOCKFACEREGISTER_H_
12 #define _MULTIBLOCKFACEREGISTER_H_
13 
14 #include "LevelFluxRegister.H"
15 #include "MultiBlockCoordSys.H"
16 #include "RemoteCopier.H"
17 #include "NamespaceHeader.H"
18 
19 //! \class MultiBlockFaceRegister
20 //! This subclass of LevelFluxRegister handles multi-block AMR refluxing.
22 {
23 private:
24 
25  public:
26 
27  //! Creates a face register that handles multi-block refluxing.
28  //! This capability requires a multi-block coordinate system, which
29  //! handles block connectivity as well as coordinate mappings.
30  MultiBlockFaceRegister(const MultiBlockCoordSys *const a_coordSys);
31 
32  //! Destructor.
34 
35  /// Define everything (overrides base)
36  void define(const DisjointBoxLayout& a_FnGrid,
37  const DisjointBoxLayout& a_CrGrid,
38  const ProblemDomain& a_FnProbDom,
39  int a_nRefine,
40  int a_nComp,
41  bool a_scaleFineFaces = true);
42 
43  /// Define everything (overrides base)
44  void define(const DisjointBoxLayout& a_FnGrid,
45  const DisjointBoxLayout& a_CrGrid,
46  const ProblemDomain& a_FnProbDom,
47  IntVect a_ivRefine,
48  int a_nComp,
49  bool a_scaleFineFaces = true);
50 
51 
52  /// Define the fine register
53  void defineFine(const DisjointBoxLayout& a_FnGrid,
54  const ProblemDomain& a_FnProbDom,
55  int a_nRefine,
56  int a_nComp,
57  bool a_scaleFineFaces = true);
58 
59  /// Define the fine register
60  void defineFine(const DisjointBoxLayout& a_FnGrid,
61  const ProblemDomain& a_FnProbDom,
62  IntVect a_ivRefine,
63  int a_nComp,
64  bool a_scaleFineFaces = true);
65 
66 
67  /// Define the coarse register and copiers
68  void defineCoarse(const DisjointBoxLayout& a_CrGrid);
69 
70  // New reface method (analagous to reflux)
71  void reface(LevelData<FluxBox>& a_uCoarse,
72  const Interval& a_coarse_interval,
73  const Interval& a_face_interval,
74  const Real a_scale,
75  const bool a_directional = true);
76 
77  private:
78 
79  //! Multi-block coordinate system.
81  ///< Coordinate system from the coarse
82  ///< level
83 
84  //! Copier for moving values from fine faces on other blocks to
85  //! blocks where the corresponding coarse faces are defined.
86  //! One copier per dimension.
88 };
89 #include "NamespaceFooter.H"
90 #endif
Definition: RemoteCopier.H:18
A class to facilitate interaction with physical boundary conditions.
Definition: ProblemDomain.H:141
void define(const DisjointBoxLayout &a_FnGrid, const DisjointBoxLayout &a_CrGrid, const ProblemDomain &a_FnProbDom, int a_nRefine, int a_nComp, bool a_scaleFineFaces=true)
Define everything (overrides base)
Definition: MultiBlockFaceRegister.H:21
~MultiBlockFaceRegister()
Destructor.
const MultiBlockCoordSys *const m_coordSys
Multi-block coordinate system.
Definition: MultiBlockFaceRegister.H:80
RemoteCopier m_remoteCopiers[SpaceDim][2]
Definition: MultiBlockFaceRegister.H:87
const int SpaceDim
Definition: SPACE.H:38
void defineFine(const DisjointBoxLayout &a_FnGrid, const ProblemDomain &a_FnProbDom, int a_nRefine, int a_nComp, bool a_scaleFineFaces=true)
Define the fine register.
Structure for passing component ranges in code.
Definition: Interval.H:23
double Real
Definition: REAL.H:33
MultiBlockFaceRegister(const MultiBlockCoordSys *const a_coordSys)
A BoxLayout that has a concept of disjointedness.
Definition: DisjointBoxLayout.H:30
virtual interface class encapsulating multi-block mapping API
Definition: MultiBlockCoordSys.H:34
LevelFluxRegister-A class to encapsulate a levels worth of flux registers.
Definition: LevelFluxRegister.H:29
void defineCoarse(const DisjointBoxLayout &a_CrGrid)
Define the coarse register and copiers.
An integer Vector in SpaceDim-dimensional space.
Definition: CHArray.H:42
void reface(LevelData< FluxBox > &a_uCoarse, const Interval &a_coarse_interval, const Interval &a_face_interval, const Real a_scale, const bool a_directional=true)