chombo-discharge
CD_MFInterfaceFABImplem.H
Go to the documentation of this file.
1 /* chombo-discharge
2  * Copyright © 2021 SINTEF Energy Research.
3  * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4  */
5 
12 #ifndef CD_MFInterfaceFABImplem_H
13 #define CD_MFInterfaceFABImplem_H
14 
15 // Our includes
16 #include <CD_MFInterfaceFAB.H>
17 #include <CD_NamespaceHeader.H>
18 
19 template <class T>
21 {}
22 
23 template <class T>
24 MFInterfaceFAB<T>::MFInterfaceFAB(const MFLevelGrid& a_mflg, const DataIndex& a_dit)
25 {
26  this->define(a_mflg, a_dit);
27 }
28 
29 template <class T>
31 {
32  for (int i = 0; i < m_phase.size(); i++) {
33  delete m_phase[i];
34  }
35 }
36 
37 template <class T>
38 void
39 MFInterfaceFAB<T>::define(const MFLevelGrid& a_mflg, const DataIndex& a_dit)
40 {
41 
42  const DisjointBoxLayout& dbl = a_mflg.getGrids();
43  const ProblemDomain& domain = a_mflg.getDomain();
44  const RefCountedPtr<MultiFluidIndexSpace>& MultiFluidIndexSpace = a_mflg.getMfIndexSpace();
45  const int numPhases = MultiFluidIndexSpace->numPhases();
46 
47  m_ivs = a_mflg.interfaceRegion(dbl.get(a_dit), a_dit);
48  m_phase.resize(numPhases, NULL);
49 
50  for (int i = 0; i < numPhases; i++) {
51  const EBLevelGrid& eblg = a_mflg.getEBLevelGrid(i);
52  const EBISLayout& ebisl = eblg.getEBISL();
53  m_phase[i] = new BaseIVFAB<T>(m_ivs, ebisl[a_dit].getEBGraph(), 1);
54  }
55 }
56 
57 template <class T>
58 const IntVectSet&
60 {
61  return m_ivs;
62 }
63 
64 template <class T>
65 BaseIVFAB<T>&
66 MFInterfaceFAB<T>::getIVFAB(const int a_phase)
67 {
68  return *m_phase[a_phase];
69 }
70 
71 template <class T>
72 const BaseIVFAB<T>&
73 MFInterfaceFAB<T>::getIVFAB(const int a_phase) const
74 {
75  return *m_phase[a_phase];
76 }
77 
78 template <class T>
79 BaseIVFAB<T>*
81 {
82  return m_phase[a_phase];
83 }
84 
85 template <class T>
86 int
88 {
89  return m_phase.size();
90 }
91 
92 template <class T>
93 void
94 MFInterfaceFAB<T>::setVal(const T& a_value)
95 {
96  for (int i = 0; i < m_phase.size(); i++) {
97  m_phase[i]->setVal(a_value);
98  }
99 }
100 
101 #include <CD_NamespaceFooter.H>
102 
103 #endif
Declaration of a class that allocates irregular data holders over the interface between two phases.
MFInterfaceFAB()
Constructor. Must subsequently call define.
Definition: CD_MFInterfaceFABImplem.H:20
virtual int numPhases() const
Get number of phases.
Definition: CD_MFInterfaceFABImplem.H:87
virtual BaseIVFAB< T > & getIVFAB(const int a_phase)
Get BaseIVFAB for specified phase.
Definition: CD_MFInterfaceFABImplem.H:66
virtual void define(const MFLevelGrid &a_mflg, const DataIndex &a_dit)
Define function.
Definition: CD_MFInterfaceFABImplem.H:39
virtual ~MFInterfaceFAB()
Destructor.
Definition: CD_MFInterfaceFABImplem.H:30
virtual const IntVectSet & getIVS() const
Get defining region.
Definition: CD_MFInterfaceFABImplem.H:59
virtual void setVal(const T &a_value)
Set value on both fabs.
Definition: CD_MFInterfaceFABImplem.H:94
virtual BaseIVFAB< T > * getPhasePtr(int a_phase)
Get BaseIVFAB for specified phase.
Definition: CD_MFInterfaceFABImplem.H:80
Wrapper class for holding multifluid EBLevelGrids.
Definition: CD_MFLevelGrid.H:29
virtual ProblemDomain getDomain() const
Get the problem domain.
Definition: CD_MFLevelGrid.cpp:72
virtual DisjointBoxLayout getGrids() const
Get the grids.
Definition: CD_MFLevelGrid.cpp:78
virtual IntVectSet interfaceRegion(const Box &a_box, const DataIndex &a_dit, const int a_phase1=0, const int a_phase2=1) const
Get interface region between two phases.
Definition: CD_MFLevelGrid.cpp:98
virtual const RefCountedPtr< MultiFluidIndexSpace > & getMfIndexSpace() const
Get the index space.
Definition: CD_MFLevelGrid.cpp:66
virtual EBLevelGrid & getEBLevelGrid(int a_phase)
Get grids on specified phase.
Definition: CD_MFLevelGrid.cpp:84
Two-fluid index space.
Definition: CD_MultiFluidIndexSpace.H:42
int numPhases() const
Get number of phases.
Definition: CD_MultiFluidIndexSpace.cpp:89