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
13
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
170 void CrseAdd (const MultiFab& mflx,
171 const MultiFab& area,
172 int dir,
173 int srccomp,
174 int destcomp,
175 int numcomp,
176 Real mult,
177 const Geometry& geom);
178
190 void CrseAdd (const MultiFab& mflx,
191 int dir,
192 int srccomp,
193 int destcomp,
194 int numcomp,
195 Real mult,
196 const Geometry& geom);
197
208 void FineAdd (const MultiFab& mflx,
209 int dir,
210 int srccomp,
211 int destcomp,
212 int numcomp,
213 Real mult);
214
226 void FineAdd (const MultiFab& mflx,
227 const MultiFab& area,
228 int dir,
229 int srccomp,
230 int destcomp,
231 int numcomp,
232 Real mult);
233
248 void FineAdd (const FArrayBox& flux,
249 int dir,
250 int boxno,
251 int srccomp,
252 int destcomp,
253 int numcomp,
254 Real mult,
255 RunOn runon) noexcept;
256
270 void FineAdd (const FArrayBox& flux,
271 const FArrayBox& area,
272 int dir,
273 int boxno,
274 int srccomp,
275 int destcomp,
276 int numcomp,
277 Real mult,
278 RunOn runon) noexcept;
279
291 void FineSetVal (int dir,
292 int boxno,
293 int destcomp,
294 int numcomp,
295 Real val,
296 RunOn runon) noexcept;
297
309 void Reflux (MultiFab& mf,
310 const MultiFab& volume,
311 Real scale,
312 int scomp,
313 int dcomp,
314 int nc,
315 const Geometry& crse_geom);
316
318 void Reflux (MultiFab& mf,
319 const MultiFab& volume,
320 int dir,
321 Real scale,
322 int scomp,
323 int dcomp,
324 int nc,
325 const Geometry& crse_geom);
326
337 void Reflux (MultiFab& mf,
338 Real scale,
339 int scomp,
340 int dcomp,
341 int nc,
342 const Geometry& crse_geom);
343
345 void Reflux (MultiFab& mf,
346 int dir,
347 Real scale,
348 int scomp,
349 int dcomp,
350 int nc,
351 const Geometry& crse_geom);
352
364 void OverwriteFlux (Array<MultiFab*,AMREX_SPACEDIM> const& crse_fluxes,
365 Real scale, int srccomp, int destcomp, int numcomp,
366 const Geometry& crse_geom);
367
368
374 void ClearInternalBorders (const Geometry& crse_geom);
375
382 void write (const std::string& name, std::ostream& os) const;
383
390 void read (const std::string& name, std::istream& is);
391
392// public for cuda
393
406 void Reflux (MultiFab& mf, const MultiFab& volume, Orientation face,
407 Real scale, int scomp, int dcomp, int nc, const Geometry& geom);
408
409private:
410
412 IntVect ratio;
413
415 int fine_level;
416
418 int ncomp;
419};
420
421}
422
423#endif /*_FLUXREGISTER_H_*/
Fixed-size array types for use on GPU and CPU.
Infrastructure for storing per-face boundary data in FabSets.
Problem-domain geometry: maps between index space and physical space.
Reference-counted collection of Boxes.
Definition AMReX_BoxArray.H:681
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:51
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:237
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:938
void read(const std::string &name, std::istream &is)
Read data from checkpoint files.
Definition AMReX_FluxRegister.cpp:954
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:567
FluxRegister(FluxRegister &&rhs) noexcept=default
void clear()
Release all internal data structures and reset to the default-constructed state.
Definition AMReX_FluxRegister.cpp:107
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:314
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:540
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:788
int fineLevel() const noexcept
Returns the level number of the fine level.
Definition AMReX_FluxRegister.cpp:52
Real SumReg(int comp) const
Returns the sum of the registers.
Definition AMReX_FluxRegister.cpp:113
FluxRegister()
The default constructor.
Definition AMReX_FluxRegister.cpp:29
const BoxArray & coarsenedBoxes() const noexcept
The coarsened boxes.
Definition AMReX_FluxRegister.cpp:70
void ClearInternalBorders(const Geometry &crse_geom)
Set internal coarse/fine border fluxes to zero before reuse.
Definition AMReX_FluxRegister.cpp:700
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:403
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:178
const IntVect & refRatio() const noexcept
Returns the refinement ratio.
Definition AMReX_FluxRegister.cpp:46
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:76
FluxRegister & operator=(const FluxRegister &rhs)=delete
int crseLevel() const noexcept
Returns the level number of the coarse level (fineLevel()-1).
Definition AMReX_FluxRegister.cpp:58
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:87
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:80
std::array< T, N > Array
Definition AMReX_Array.H:31
Definition AMReX_Amr.cpp:50
RunOn
Definition AMReX_GpuControl.H:65
int nComp(FabArrayBase const &fa)
Convenience wrapper that forwards to fa.nComp().
Definition AMReX_FabArrayBase.cpp:2980
@ volume
Definition AMReX_EBSupport.H:17
__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:1128
BndryRegisterT< MultiFab > BndryRegister
Definition AMReX_BndryRegister.H:403
IntVectND< 3 > IntVect
IntVect is an alias for amrex::IntVectND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:38