ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_ColumnBands.H
Go to the documentation of this file.
1 #ifndef ERF_COLUMNBANDS_H_
2 #define ERF_COLUMNBANDS_H_
3 
4 #include <AMReX_BoxArray.H>
5 #include <AMReX_Geometry.H>
6 #include <AMReX_IntVect.H>
7 #include <AMReX_MultiFab.H>
8 #include <AMReX_Vector.H>
9 
10 //
11 // A column integration (e.g. of the hydrostatic base state) runs upward from the bottom of each
12 // box. A box stacked on another box of the same level -- the BoxArray is split in z, e.g.
13 // amr.max_grid_size below the number of cells in z -- has to continue from the values the
14 // box below it reached. Such an integration visits the boxes in bands of equal lowest z
15 // index, bottom up, and calls fill_below_band before each band but the first.
16 //
17 
18 /**
19  * The distinct lowest z indices of the boxes of a BoxArray, bottom up.
20  *
21  * @param[in] ba BoxArray of the level
22  * @return lowest z index of every band of boxes, in increasing order
23  */
24 amrex::Vector<int> column_bands (const amrex::BoxArray& ba);
25 
26 /**
27  * Fill the cells just below the boxes of mf whose lowest z index is klo_band, widened laterally
28  * by lateral_ng, from the boxes of mf below that band, which must already have been integrated.
29  * A cell inside a box below takes that box's value; otherwise a cell in the lateral ghost region
30  * of a box below takes the value that box holds there. A cell with no box of mf below it (e.g.
31  * under a refined patch that does not reach the ground) keeps the value it has.
32  *
33  * @param[in,out] mf field being integrated; needs lateral_ng ghost cells plus one in z
34  * @param[in] icomp first component to fill
35  * @param[in] ncomp number of components to fill
36  * @param[in] klo_band lowest z index of the band about to be integrated
37  * @param[in] lateral_ng lateral width of the filled slabs; its z entry must be zero
38  * @param[in] geom geometry of the level (lateral periodicity is honoured)
39  */
40 void fill_below_band (amrex::MultiFab& mf, int icomp, int ncomp, int klo_band,
41  const amrex::IntVect& lateral_ng, const amrex::Geometry& geom);
42 
43 #endif
amrex::Vector< int > column_bands(const amrex::BoxArray &ba)
void fill_below_band(amrex::MultiFab &mf, int icomp, int ncomp, int klo_band, const amrex::IntVect &lateral_ng, const amrex::Geometry &geom)