Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_FluxRegister.H
Go to the documentation of this file.
1#ifndef AMREX_FLUXREGISTER_H_
2#define AMREX_FLUXREGISTER_H_
3#include <AMReX_Config.H>
4
6#include <AMReX_Geometry.H>
7#include <AMReX_Array.H>
8
14namespace amrex {
15
16
23 :
24 public BndryRegister
25{
26public:
27
32
42 FluxRegister (const BoxArray& fine_boxes,
43 const DistributionMapping& dm,
44 const IntVect& ref_ratio,
45 int fine_lev,
46 int nvar);
47
51 ~FluxRegister () = default;
52
53 FluxRegister (FluxRegister&& rhs) noexcept = default;
54
55 FluxRegister (const FluxRegister& rhs) = delete;
56 FluxRegister& operator= (const FluxRegister& rhs) = delete;
58
60 enum FrOp {COPY = 0, ADD = 1};
61
71 void define (const BoxArray& fine_boxes,
72 const DistributionMapping& dm,
73 const IntVect& ref_ratio,
74 int fine_lev,
75 int nvar);
76
78 void clear ();
79
80
84 const IntVect& refRatio () const noexcept;
85
89 int fineLevel () const noexcept;
90
94 int crseLevel () const noexcept;
95
99 int nComp () const noexcept;
100
104 const BoxArray& coarsenedBoxes () const noexcept;
105
111 Real SumReg (int comp) const;
112
125 void CrseInit (const MultiFab& mflx,
126 const MultiFab& area,
127 int dir,
128 int srccomp,
129 int destcomp,
130 int numcomp,
131 Real mult = -1.0,
132 FrOp op = FluxRegister::COPY);
133
145 void CrseInit (const MultiFab& mflx,
146 int dir,
147 int srccomp,
148 int destcomp,
149 int numcomp,
150 Real mult = -1.0,
151 FrOp op = FluxRegister::COPY);
152
168 void CrseAdd (const MultiFab& mflx,
169 const MultiFab& area,
170 int dir,
171 int srccomp,
172 int destcomp,
173 int numcomp,
174 Real mult,
175 const Geometry& geom);
176
188 void CrseAdd (const MultiFab& mflx,
189 int dir,
190 int srccomp,
191 int destcomp,
192 int numcomp,
193 Real mult,
194 const Geometry& geom);
195
206 void FineAdd (const MultiFab& mflx,
207 int dir,
208 int srccomp,
209 int destcomp,
210 int numcomp,
211 Real mult);
212
224 void FineAdd (const MultiFab& mflx,
225 const MultiFab& area,
226 int dir,
227 int srccomp,
228 int destcomp,
229 int numcomp,
230 Real mult);
231
246 void FineAdd (const FArrayBox& flux,
247 int dir,
248 int boxno,
249 int srccomp,
250 int destcomp,
251 int numcomp,
252 Real mult,
253 RunOn runon) noexcept;
254
268 void FineAdd (const FArrayBox& flux,
269 const FArrayBox& area,
270 int dir,
271 int boxno,
272 int srccomp,
273 int destcomp,
274 int numcomp,
275 Real mult,
276 RunOn runon) noexcept;
277
289 void FineSetVal (int dir,
290 int boxno,
291 int destcomp,
292 int numcomp,
293 Real val,
294 RunOn runon) noexcept;
295
307 void Reflux (MultiFab& mf,
308 const MultiFab& volume,
309 Real scale,
310 int scomp,
311 int dcomp,
312 int nc,
313 const Geometry& crse_geom);
314
316 void Reflux (MultiFab& mf,
317 const MultiFab& volume,
318 int dir,
319 Real scale,
320 int scomp,
321 int dcomp,
322 int nc,
323 const Geometry& crse_geom);
324
335 void Reflux (MultiFab& mf,
336 Real scale,
337 int scomp,
338 int dcomp,
339 int nc,
340 const Geometry& crse_geom);
341
343 void Reflux (MultiFab& mf,
344 int dir,
345 Real scale,
346 int scomp,
347 int dcomp,
348 int nc,
349 const Geometry& crse_geom);
350
362 void OverwriteFlux (Array<MultiFab*,AMREX_SPACEDIM> const& crse_fluxes,
363 Real scale, int srccomp, int destcomp, int numcomp,
364 const Geometry& crse_geom);
365
366
372 void ClearInternalBorders (const Geometry& crse_geom);
373
380 void write (const std::string& name, std::ostream& os) const;
381
388 void read (const std::string& name, std::istream& is);
389
390// public for cuda
391
404 void Reflux (MultiFab& mf, const MultiFab& volume, Orientation face,
405 Real scale, int scomp, int dcomp, int nc, const Geometry& geom);
406
407private:
408
410 IntVect ratio;
411
413 int fine_level;
414
416 int ncomp;
417};
418
419}
420
421#endif /*_FLUXREGISTER_H_*/
Infrastructure for storing per-face boundary data in FabSets.
A BndryRegister organizes FabSets bounding each grid in a BoxArray. A FabSet is maintained for each b...
Definition AMReX_BndryRegister.H:46
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:568
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:43
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:231
Flux Register.
Definition AMReX_FluxRegister.H:25
~FluxRegister()=default
The destructor.
FrOp
An enum that says whether to add or copy src data to members.
Definition AMReX_FluxRegister.H:60
@ ADD
Definition AMReX_FluxRegister.H:60
@ COPY
Definition AMReX_FluxRegister.H:60
void write(const std::string &name, std::ostream &os) const
Write data to checkpoint files.
Definition AMReX_FluxRegister.cpp:889
void read(const std::string &name, std::istream &is)
Read data from checkpoint files.
Definition AMReX_FluxRegister.cpp:905
void Reflux(MultiFab &mf, const MultiFab &volume, Real scale, int scomp, int dcomp, int nc, const Geometry &crse_geom)
Apply flux correction and divide by coarse cell volumes.
Definition AMReX_FluxRegister.cpp:527
FluxRegister(FluxRegister &&rhs) noexcept=default
void clear()
Release all internal data structures and reset to the default-constructed state.
Definition AMReX_FluxRegister.cpp:89
void CrseAdd(const MultiFab &mflx, const MultiFab &area, int dir, int srccomp, int destcomp, int numcomp, Real mult, const Geometry &geom)
Add coarse fluxes to the register without overwriting existing data.
Definition AMReX_FluxRegister.cpp:285
FluxRegister(const FluxRegister &rhs)=delete
void FineSetVal(int dir, int boxno, int destcomp, int numcomp, Real val, RunOn runon) noexcept
Set flux correction data for a fine box (given by boxno) to val. This routine used by FLASH does NOT ...
Definition AMReX_FluxRegister.cpp:500
void OverwriteFlux(Array< MultiFab *, 3 > const &crse_fluxes, Real scale, int srccomp, int destcomp, int numcomp, const Geometry &crse_geom)
Overwrite the coarse flux at the coarse/fine interface (and the interface only) with the fine flux st...
Definition AMReX_FluxRegister.cpp:739
int fineLevel() const noexcept
Returns the level number of the fine level.
Definition AMReX_FluxRegister.cpp:34
Real SumReg(int comp) const
Returns the sum of the registers.
Definition AMReX_FluxRegister.cpp:95
FluxRegister()
The default constructor.
Definition AMReX_FluxRegister.cpp:11
const BoxArray & coarsenedBoxes() const noexcept
The coarsened boxes.
Definition AMReX_FluxRegister.cpp:52
void ClearInternalBorders(const Geometry &crse_geom)
Set internal coarse/fine border fluxes to zero before reuse.
Definition AMReX_FluxRegister.cpp:651
void FineAdd(const MultiFab &mflx, int dir, int srccomp, int destcomp, int numcomp, Real mult)
Increment flux correction with fine data (areas already applied).
Definition AMReX_FluxRegister.cpp:363
void CrseInit(const MultiFab &mflx, const MultiFab &area, int dir, int srccomp, int destcomp, int numcomp, Real mult=-1.0, FrOp op=FluxRegister::COPY)
Initialize flux correction with coarse data.
Definition AMReX_FluxRegister.cpp:160
const IntVect & refRatio() const noexcept
Returns the refinement ratio.
Definition AMReX_FluxRegister.cpp:28
void define(const BoxArray &fine_boxes, const DistributionMapping &dm, const IntVect &ref_ratio, int fine_lev, int nvar)
Initialize after default construction.
Definition AMReX_FluxRegister.cpp:58
FluxRegister & operator=(const FluxRegister &rhs)=delete
int crseLevel() const noexcept
Returns the level number of the coarse level (fineLevel()-1).
Definition AMReX_FluxRegister.cpp:40
int nComp() const noexcept
The number of components.
Definition AMReX_FluxRegister.cpp:46
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
Encapsulation of the Orientation of the Faces of a Box.
Definition AMReX_Orientation.H:29
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
std::array< T, N > Array
Definition AMReX_Array.H:26
Definition AMReX_Amr.cpp:49
RunOn
Definition AMReX_GpuControl.H:69
__host__ __device__ constexpr IntVectND< dim > scale(const IntVectND< dim > &p, int s) noexcept
Returns a IntVectND obtained by multiplying each of the components of this IntVectND by s.
Definition AMReX_IntVect.H:1013