Finite Volume Solver  prototype
A framework to build finite volume solvers for the AG Klein at the Freie Universität Berlin.
AMReX/cutcell/IntegratorContext.hpp
Go to the documentation of this file.
1 // Copyright (c) 2019 Maikel Nadolski
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
9 //
10 // The above copyright notice and this permission notice shall be included in
11 // all copies or substantial portions of the Software.
12 //
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 // SOFTWARE.
20 
21 #ifndef FUB_AMREX_CUTCELL_INTEGRATOR_CONTEXT_HPP
22 #define FUB_AMREX_CUTCELL_INTEGRATOR_CONTEXT_HPP
23 
25 #include "fub/HyperbolicMethod.hpp"
26 #include "fub/TimeStepError.hpp"
27 #include "fub/ext/outcome.hpp"
28 
29 #include <AMReX_FluxRegister.H>
30 #include <AMReX_MultiFab.H>
31 
32 #include <array>
33 #include <memory>
34 #include <vector>
35 
36 namespace fub::amrex::cutcell {
37 
38 class IntegratorContext;
39 
41 
42 /// \ingroup IntegratorContext
43 ///
44 /// \brief This class manages data and the numerical method to perform cut cell
45 /// simulations with the AMReX library.
47 public:
48  using FeedbackFn = std::function<void(IntegratorContext&, int, Duration, std::pair<int, int>)>;
49 
50  /// @{
51  /// \name Constructors, Assignment Operators and Desctructor
52 
53  IntegratorContext(std::shared_ptr<GriddingAlgorithm> gridding,
54  HyperbolicMethod method);
55 
56  IntegratorContext(std::shared_ptr<GriddingAlgorithm> gridding,
57  HyperbolicMethod method, int cell_gcw, int face_gcw);
58 
59  /// \brief Deeply copies a context and all its distributed data for all MPI
60  /// ranks.
62 
63  /// \brief Deeply copies a context and all its distributed data for all MPI
64  /// ranks.
66 
67  IntegratorContext(IntegratorContext&&) noexcept = default;
68 
69  IntegratorContext& operator=(IntegratorContext&&) noexcept = default;
70 
71  ~IntegratorContext() = default;
72  /// @}
73 
74  /// @{
75  /// \name Member Accessors
76 
77  /// \brief Returns the hyperbolic method member object.
78  [[nodiscard]] const HyperbolicMethod& GetHyperbolicMethod() const noexcept;
79 
80  /// \brief Returns a shared pointer to the underlying GriddingAlgorithm which
81  /// owns the simulation.
82  [[nodiscard]] const std::shared_ptr<GriddingAlgorithm>&
83  GetGriddingAlgorithm() const noexcept;
84 
85  /// \brief Returns a shared pointer to the counter registry.
86  [[nodiscard]] const std::shared_ptr<CounterRegistry>&
87  GetCounterRegistry() const noexcept;
88 
89  /// \brief Returns a reference to const PatchHierarchy which is a member of
90  /// the GriddingAlgorithm.
91  [[nodiscard]] const PatchHierarchy& GetPatchHierarchy() const noexcept;
92  [[nodiscard]] PatchHierarchy& GetPatchHierarchy() noexcept;
93 
94  /// \brief Returns the MPI communicator which is associated with this context.
95  [[nodiscard]] MPI_Comm GetMpiCommunicator() const noexcept;
96 
97  /// \brief Call this function upon every time integration
99  feedback_ = std::move(feedback);
100  }
101  /// @}
102 
103  /// @{
104  /// \name Access Level-specific data
105 
106  /// \brief Returns the current boundary condition for the specified level.
107  [[nodiscard]] const AnyBoundaryCondition&
110 
111  [[nodiscard]] ::amrex::EBFArrayBoxFactory& GetEmbeddedBoundary(int level);
112  [[nodiscard]] const ::amrex::EBFArrayBoxFactory&
113  GetEmbeddedBoundary(int level) const;
114 
115  /// \brief Returns the MultiFab associated with level data on the specifed
116  /// level number.
117  [[nodiscard]] ::amrex::MultiFab& GetData(int level);
118 
119  /// \brief Returns the MultiFab associated with flux data on the specifed
120  /// level number and direction.
121  [[nodiscard]] ::amrex::MultiFab& GetReferenceStates(int level);
122 
123  /// \brief Returns the MultiFab associated with level data with ghost cells on
124  /// the specifed level number and direction.
125  [[nodiscard]] ::amrex::MultiFab& GetScratch(int level);
126 
127  /// \brief Returns the MultiFab associated with flux data on the specifed
128  /// level number and direction.
129  [[nodiscard]] ::amrex::MultiCutFab& GetBoundaryFluxes(int level);
130 
131  /// \brief Returns the MultiFab associated with flux data on the specifed
132  /// level number and direction.
133  [[nodiscard]] ::amrex::MultiFab& GetFluxes(int level, Direction dir);
134 
135  /// \brief Returns the MultiFab associated with flux data on the specifed
136  /// level number and direction.
137  [[nodiscard]] ::amrex::MultiFab& GetStabilizedFluxes(int level,
138  Direction dir);
139 
140  /// \brief Returns the MultiFab associated with flux data on the specifed
141  /// level number and direction.
142  [[nodiscard]] ::amrex::MultiFab& GetShieldedFromLeftFluxes(int level,
143  Direction dir);
144 
145  /// \brief Returns the MultiFab associated with flux data on the specifed
146  /// level number and direction.
147  [[nodiscard]] ::amrex::MultiFab& GetShieldedFromRightFluxes(int level,
148  Direction dir);
149 
150  /// \brief Returns the MultiFab associated with flux data on the specifed
151  /// level number and direction.
152  [[nodiscard]] ::amrex::MultiFab& GetDoublyShieldedFluxes(int level,
153  Direction dir);
154 
155  /// \brief Returns the current time level for data at the specified refinement
156  /// level and direction.
157  [[nodiscard]] Duration GetTimePoint(int level = 0) const;
158 
159  /// \brief Returns the current number of cycles for data at the specified
160  /// refinement level and direction.
161  [[nodiscard]] std::ptrdiff_t GetCycles(int level = 0) const;
162 
163  /// \brief Returns the geometry object for the specified refinement level.
164  [[nodiscard]] const ::amrex::Geometry& GetGeometry(int level) const;
165 
166  /// @}
167 
168  /// @{
169  /// \name Observers
170  /// \brief Returns true if the data exists for the specified level number.
171  [[nodiscard]] bool LevelExists(int level) const noexcept;
172 
173  /// \brief Returns the refinement ratio in the specified direction.
174  [[nodiscard]] int GetRatioToCoarserLevel(int level, Direction dir) const
175  noexcept;
176 
177  /// \brief Returns the refinement ratio for all directions.
178  [[nodiscard]] ::amrex::IntVect GetRatioToCoarserLevel(int level) const
179  noexcept;
180 
181  [[nodiscard]] double GetDx(int level, Direction dir) const noexcept;
182 
183  [[nodiscard]] ::amrex::FabType GetFabType(int level,
184  const ::amrex::MFIter& mfi) const
185  noexcept;
186  /// @}
187 
188  /// @{
189  /// \name Modifiers
190 
191  /// \brief Replaces the underlying gridding algorithm with the specified one.
192  void ResetHierarchyConfiguration(std::shared_ptr<GriddingAlgorithm> gridding);
193 
194  /// \brief Whenever the gridding algorithm changes the data hierarchy this
195  /// function will regrid all distributed helper variables managed by the
196  /// context.
197  ///
198  /// \param[in] level The level number of the coarsest level which changed its
199  /// shape. Regrid all levels finer than level.
200  void ResetHierarchyConfiguration(int level = 0);
201 
202  /// \brief Sets the cycle count for a specific level number and direction.
203  void SetCycles(std::ptrdiff_t cycle, int level);
204 
205  /// \brief Sets the time point for a specific level number and direction.
206  void SetTimePoint(Duration t, int level);
207  /// @}
208 
209  /// @{
210  /// \name Member functions relevant for the level integrator algorithm.
211 
212  /// \brief Compute and store reference states for cut-cells over all split
213  /// cycles.
214  ///
215  /// \note This assumes that cut cells are always refined to the finest level
216  /// of the hierarchy.
219 
220  /// \brief On each first subcycle this will regrid the data if neccessary.
221  int PreAdvanceLevel(int level_num, Duration dt, std::pair<int, int> subcycle);
222 
223  /// \brief Increases the internal time stamps and cycle counters for the
224  /// specified level number and direction.
225  [[nodiscard]] Result<void, TimeStepTooLarge>
226  PostAdvanceLevel(int level_num, Duration dt, std::pair<int, int> subcycle);
227 
228  void CopyDataToScratch(int level);
229  void CopyScratchToData(int level);
230 
231  /// \brief Applies the boundary condition for the scratch space on level
232  /// `level` in direcition `dir`.
233  ///
234  /// \param level The refinement level on which the boundary condition shall
235  /// be used.
236  void ApplyBoundaryCondition(int level, Direction dir);
237  void ApplyBoundaryCondition(int level, Direction dir,
239 
240  /// \brief Fills the ghost layer of the scratch data and interpolates in the
241  /// coarse fine layer.
242  void FillGhostLayerTwoLevels(int level, AnyBoundaryCondition& fbc, int coarse,
243  AnyBoundaryCondition& cbc);
244  void FillGhostLayerTwoLevels(int level, int coarse);
245 
246  /// \brief Fills the ghost layer of the scratch data and does nothing in the
247  /// coarse fine layer.
249  void FillGhostLayerSingleLevel(int level);
250 
251  /// \brief Returns a estimate for a stable time step size which can be taken
252  /// for specified level number in direction dir.
253  [[nodiscard]] Duration ComputeStableDt(int level, Direction dir);
254 
255  /// \brief Fill the flux MultiFab with numeric fluxes based on current states
256  /// in scratch.
257  void ComputeNumericFluxes(int level, Duration dt, Direction dir);
258 
259  /// \brief Apply a conservative time update for each conservative variable on
260  /// the specified level number and direction.
261  void UpdateConservatively(int level, Duration dt, Direction dir);
262 
263  /// \brief Reconstruct complete state variables from conservative ones.
264  void CompleteFromCons(int level, Duration dt);
265 
266  /// \brief Accumulate fluxes on the coarse fine interfaces for a specified
267  /// fine level number.
268  void AccumulateCoarseFineFluxes(int level, double time_scale, Direction dir);
269 
270  /// \brief Replace the coarse fluxes by accumulated fine fluxes on the coarse
271  /// fine interfaces.
272  void ApplyFluxCorrection(int fine, int coarse, Duration dt);
273 
274  /// \brief Resets all accumulates fluxes to zero.
275  void ResetCoarseFineFluxes(int fine, int coarse);
276 
277  /// \brief Coarsen scratch data from a fine level number to a coarse level
278  /// number.
279  void CoarsenConservatively(int fine, int coarse);
280  ///@}
281 
282  std::shared_ptr<CounterRegistry> registry_;
283  bool count_per_level{false};
284 
285 private:
286  struct LevelData {
287  LevelData() = default;
288  LevelData(const LevelData& other) = delete;
289  LevelData& operator=(const LevelData& other) = delete;
290  LevelData(LevelData&&) noexcept = default;
291  LevelData& operator=(LevelData&&) noexcept;
292  ~LevelData() noexcept = default;
293 
294  /// This eb_factory is shared with the underlying patch hierarchy.
295  std::shared_ptr<::amrex::EBFArrayBoxFactory> eb_factory{};
296 
297  ///////////////////////////////////////////////////////////////////////////
298  // [cell-centered]
299 
300  /// reference states which are used to compute embedded boundary fluxes
301  std::optional<::amrex::MultiFab> reference_states{};
302 
303  /// scratch space filled with data in ghost cells
304  ::amrex::MultiFab scratch{};
305 
306  /// fluxes for the embedded boundary
307  std::unique_ptr<::amrex::MultiCutFab> boundary_fluxes{};
308 
309  ///////////////////////////////////////////////////////////////////////////
310  // [face-centered]
311 
312  /// @{
313  /// various flux types needed by the numerical scheme
314  std::array<::amrex::MultiFab, AMREX_SPACEDIM> fluxes{};
315  std::array<::amrex::MultiFab, AMREX_SPACEDIM> stabilized_fluxes{};
316  std::array<::amrex::MultiFab, AMREX_SPACEDIM> shielded_left_fluxes{};
317  std::array<::amrex::MultiFab, AMREX_SPACEDIM> shielded_right_fluxes{};
318  std::array<::amrex::MultiFab, AMREX_SPACEDIM> doubly_shielded_fluxes{};
319  /// @}
320 
321  ///////////////////////////////////////////////////////////////////////////
322  // [misc]
323 
324  /// FluxRegister accumulate fluxes on coarse fine interfaces between
325  /// refinement level. These will need to be rebuilt whenever the hierarchy
326  /// changes.
327  ::amrex::FluxRegister coarse_fine{};
328 
331  std::ptrdiff_t cycles{};
332  };
333 
336  std::shared_ptr<GriddingAlgorithm> gridding_;
337  std::vector<LevelData> data_;
340 };
341 
342 } // namespace fub::amrex::cutcell
343 
344 #endif
This is a polymorphic value type that wraps any BoundaryCondition object.
Definition: AnyBoundaryCondition.hpp:55
This class modifies and initializes a cutcell::PatchLevel in a cutcell::PatchHierarchy.
Definition: AMReX/cutcell/GriddingAlgorithm.hpp:56
This class manages data and the numerical method to perform cut cell simulations with the AMReX libra...
Definition: AMReX/cutcell/IntegratorContext.hpp:46
int scratch_ghost_cell_width_
Definition: AMReX/cutcell/IntegratorContext.hpp:334
MPI_Comm GetMpiCommunicator() const noexcept
Returns the MPI communicator which is associated with this context.
void CopyDataToScratch(int level)
Compute and store reference states for cut-cells over all split cycles.
void FillGhostLayerSingleLevel(int level)
Compute and store reference states for cut-cells over all split cycles.
::amrex::MultiFab & GetShieldedFromRightFluxes(int level, Direction dir)
Returns the MultiFab associated with flux data on the specifed level number and direction.
void ApplyBoundaryCondition(int level, Direction dir, AnyBoundaryCondition &bc)
Compute and store reference states for cut-cells over all split cycles.
void FillGhostLayerTwoLevels(int level, AnyBoundaryCondition &fbc, int coarse, AnyBoundaryCondition &cbc)
Fills the ghost layer of the scratch data and interpolates in the coarse fine layer.
int GetRatioToCoarserLevel(int level, Direction dir) const noexcept
Returns the refinement ratio in the specified direction.
void CopyScratchToData(int level)
Compute and store reference states for cut-cells over all split cycles.
void ResetHierarchyConfiguration(int level=0)
Whenever the gridding algorithm changes the data hierarchy this function will regrid all distributed ...
::amrex::MultiFab & GetScratch(int level)
Returns the MultiFab associated with level data with ghost cells on the specifed level number and dir...
IntegratorContext(std::shared_ptr< GriddingAlgorithm > gridding, HyperbolicMethod method, int cell_gcw, int face_gcw)
Deeply copies a context and all its distributed data for all MPI ranks.
int PreAdvanceLevel(int level_num, Duration dt, std::pair< int, int > subcycle)
On each first subcycle this will regrid the data if neccessary.
void ResetCoarseFineFluxes(int fine, int coarse)
Resets all accumulates fluxes to zero.
::amrex::MultiCutFab & GetBoundaryFluxes(int level)
Returns the MultiFab associated with flux data on the specifed level number and direction.
IntegratorContext(std::shared_ptr< GriddingAlgorithm > gridding, HyperbolicMethod method)
Deeply copies a context and all its distributed data for all MPI ranks.
::amrex::MultiFab & GetFluxes(int level, Direction dir)
Returns the MultiFab associated with flux data on the specifed level number and direction.
void CoarsenConservatively(int fine, int coarse)
Coarsen scratch data from a fine level number to a coarse level number.
void FillGhostLayerTwoLevels(int level, int coarse)
Compute and store reference states for cut-cells over all split cycles.
bool LevelExists(int level) const noexcept
Returns the refinement ratio in the specified direction.
Result< void, TimeStepTooLarge > PostAdvanceLevel(int level_num, Duration dt, std::pair< int, int > subcycle)
Increases the internal time stamps and cycle counters for the specified level number and direction.
AnyBoundaryCondition & GetBoundaryCondition()
Returns the current boundary condition for the specified level.
void PreAdvanceHierarchy()
Compute and store reference states for cut-cells over all split cycles.
std::shared_ptr< CounterRegistry > registry_
Definition: AMReX/cutcell/IntegratorContext.hpp:282
const std::shared_ptr< CounterRegistry > & GetCounterRegistry() const noexcept
Returns a shared pointer to the counter registry.
void SetCycles(std::ptrdiff_t cycle, int level)
Sets the cycle count for a specific level number and direction.
std::function< void(IntegratorContext &, int, Duration, std::pair< int, int >)> FeedbackFn
Definition: AMReX/cutcell/IntegratorContext.hpp:48
void PostAdvanceHierarchy()
Compute and store reference states for cut-cells over all split cycles.
::amrex::MultiFab & GetData(int level)
Returns the MultiFab associated with level data on the specifed level number.
const PatchHierarchy & GetPatchHierarchy() const noexcept
Returns a reference to const PatchHierarchy which is a member of the GriddingAlgorithm.
Duration GetTimePoint(int level=0) const
Returns the current time level for data at the specified refinement level and direction.
void UpdateConservatively(int level, Duration dt, Direction dir)
Apply a conservative time update for each conservative variable on the specified level number and dir...
void SetTimePoint(Duration t, int level)
Sets the time point for a specific level number and direction.
::amrex::MultiFab & GetShieldedFromLeftFluxes(int level, Direction dir)
Returns the MultiFab associated with flux data on the specifed level number and direction.
::amrex::MultiFab & GetDoublyShieldedFluxes(int level, Direction dir)
Returns the MultiFab associated with flux data on the specifed level number and direction.
bool count_per_level
Definition: AMReX/cutcell/IntegratorContext.hpp:283
::amrex::MultiFab & GetReferenceStates(int level)
Returns the MultiFab associated with flux data on the specifed level number and direction.
HyperbolicMethod method_
Definition: AMReX/cutcell/IntegratorContext.hpp:338
std::ptrdiff_t GetCycles(int level=0) const
Returns the current number of cycles for data at the specified refinement level and direction.
const AnyBoundaryCondition & GetBoundaryCondition() const
Returns the current boundary condition for the specified level.
Duration ComputeStableDt(int level, Direction dir)
Returns a estimate for a stable time step size which can be taken for specified level number in direc...
::amrex::FabType GetFabType(int level, const ::amrex::MFIter &mfi) const noexcept
Returns the refinement ratio in the specified direction.
double GetDx(int level, Direction dir) const noexcept
Returns the refinement ratio in the specified direction.
::amrex::EBFArrayBoxFactory & GetEmbeddedBoundary(int level)
Returns the current boundary condition for the specified level.
IntegratorContext & operator=(const IntegratorContext &)
Deeply copies a context and all its distributed data for all MPI ranks.
::amrex::MultiFab & GetStabilizedFluxes(int level, Direction dir)
Returns the MultiFab associated with flux data on the specifed level number and direction.
const std::shared_ptr< GriddingAlgorithm > & GetGriddingAlgorithm() const noexcept
Returns a shared pointer to the underlying GriddingAlgorithm which owns the simulation.
void ComputeNumericFluxes(int level, Duration dt, Direction dir)
Fill the flux MultiFab with numeric fluxes based on current states in scratch.
std::shared_ptr< GriddingAlgorithm > gridding_
Definition: AMReX/cutcell/IntegratorContext.hpp:336
const ::amrex::Geometry & GetGeometry(int level) const
Returns the geometry object for the specified refinement level.
FeedbackFn feedback_
Definition: AMReX/cutcell/IntegratorContext.hpp:339
const ::amrex::EBFArrayBoxFactory & GetEmbeddedBoundary(int level) const
Returns the current boundary condition for the specified level.
int flux_ghost_cell_width_
Definition: AMReX/cutcell/IntegratorContext.hpp:335
void ApplyFluxCorrection(int fine, int coarse, Duration dt)
Replace the coarse fluxes by accumulated fine fluxes on the coarse fine interfaces.
const HyperbolicMethod & GetHyperbolicMethod() const noexcept
Returns the hyperbolic method member object.
void CompleteFromCons(int level, Duration dt)
Reconstruct complete state variables from conservative ones.
::amrex::IntVect GetRatioToCoarserLevel(int level) const noexcept
Returns the refinement ratio for all directions.
void ResetHierarchyConfiguration(std::shared_ptr< GriddingAlgorithm > gridding)
Replaces the underlying gridding algorithm with the specified one.
IntegratorContext(IntegratorContext &&) noexcept=default
Deeply copies a context and all its distributed data for all MPI ranks.
std::vector< LevelData > data_
Definition: AMReX/cutcell/IntegratorContext.hpp:337
IntegratorContext(const IntegratorContext &)
Deeply copies a context and all its distributed data for all MPI ranks.
void AccumulateCoarseFineFluxes(int level, double time_scale, Direction dir)
Accumulate fluxes on the coarse fine interfaces for a specified fine level number.
void SetFeedbackFunction(FeedbackFn feedback)
Call this function upon every time integration.
Definition: AMReX/cutcell/IntegratorContext.hpp:98
void FillGhostLayerSingleLevel(int level, AnyBoundaryCondition &bc)
Fills the ghost layer of the scratch data and does nothing in the coarse fine layer.
void ApplyBoundaryCondition(int level, Direction dir)
Applies the boundary condition for the scratch space on level level in direcition dir.
Definition: AMReX/cutcell/PatchHierarchy.hpp:139
Definition: FillCutCellData.hpp:30
std::chrono::duration< double > Duration
Definition: Duration.hpp:31
Direction
This is a type safe type to denote a dimensional split direction.
Definition: Direction.hpp:30
boost::outcome_v2::result< T, E > Result
Definition: outcome.hpp:32
Definition: HyperbolicMethod.hpp:150
Definition: AMReX/cutcell/IntegratorContext.hpp:286
::amrex::MultiFab scratch
scratch space filled with data in ghost cells
Definition: AMReX/cutcell/IntegratorContext.hpp:304
std::ptrdiff_t cycles
Definition: AMReX/cutcell/IntegratorContext.hpp:331
std::optional<::amrex::MultiFab > reference_states
reference states which are used to compute embedded boundary fluxes
Definition: AMReX/cutcell/IntegratorContext.hpp:301
std::array<::amrex::MultiFab, AMREX_SPACEDIM > fluxes
Definition: AMReX/cutcell/IntegratorContext.hpp:314
LevelData(const LevelData &other)=delete
std::shared_ptr<::amrex::EBFArrayBoxFactory > eb_factory
This eb_factory is shared with the underlying patch hierarchy.
Definition: AMReX/cutcell/IntegratorContext.hpp:295
LevelData(LevelData &&) noexcept=default
std::array<::amrex::MultiFab, AMREX_SPACEDIM > doubly_shielded_fluxes
Definition: AMReX/cutcell/IntegratorContext.hpp:318
LevelData & operator=(const LevelData &other)=delete
std::array<::amrex::MultiFab, AMREX_SPACEDIM > stabilized_fluxes
Definition: AMReX/cutcell/IntegratorContext.hpp:315
Duration regrid_time_point
Definition: AMReX/cutcell/IntegratorContext.hpp:330
std::unique_ptr<::amrex::MultiCutFab > boundary_fluxes
fluxes for the embedded boundary
Definition: AMReX/cutcell/IntegratorContext.hpp:307
std::array<::amrex::MultiFab, AMREX_SPACEDIM > shielded_left_fluxes
Definition: AMReX/cutcell/IntegratorContext.hpp:316
Duration time_point
Definition: AMReX/cutcell/IntegratorContext.hpp:329
::amrex::FluxRegister coarse_fine
FluxRegister accumulate fluxes on coarse fine interfaces between refinement level.
Definition: AMReX/cutcell/IntegratorContext.hpp:327
std::array<::amrex::MultiFab, AMREX_SPACEDIM > shielded_right_fluxes
Definition: AMReX/cutcell/IntegratorContext.hpp:317