ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_FireSurfaceHeight.H
Go to the documentation of this file.
1 #ifndef ERF_FIRE_SURFACE_HEIGHT_H
2 #define ERF_FIRE_SURFACE_HEIGHT_H
3 
4 #include <AMReX_MultiFab.H>
5 #include <AMReX_Geometry.H>
6 #include <ERF_FireGrid.H>
7 
8 /**
9  * @file ERF_FireSurfaceHeight.H
10  * @brief Ground of the atmospheric columns, seen from the fire grid
11  *
12  * The atmosphere side of the fire coupling: the ground elevation the shared
13  * wind sampler (ERF_FireWindExtract.H) measures its sampling height from, for
14  * the column holding each fire cell and for the four columns of its bilinear
15  * stencil. Terrain slopes, which a fire engine may take from its own
16  * fire-resolved terrain, are the engine's.
17  */
18 
19 /**
20  * @brief Fill the ground elevation of each fire cell's atmospheric column
21  *
22  * The fire module extracts wind at a height above ground by walking the
23  * atmospheric column's z_phys_cc profile, so the ground it measures from has to
24  * be the ground of that same column: the average of the four k = 0 nodes of
25  * atmospheric cell (i_f/C, j_f/C). Taking the first cell centre instead puts the
26  * extraction height half an atmospheric cell too high, and by an amount that
27  * changes with vertical resolution.
28  *
29  * This is deliberately the atmospheric column's ground, not the fire-resolved
30  * terrain, even when a finer terrain file is supplied for the slopes: the wind
31  * profile being interpolated belongs to the atmospheric column.
32  *
33  * @param[out] fire_surface_z 1-component MultiFab on the fire grid [m]
34  * @param[in] z_phys_nd Nodal terrain height from ERF [m], or nullptr for
35  * flat terrain, in which case the domain floor is used
36  * @param[in] geom_atm Geometry of the level the fire grid refines
37  * @param[in] fg Fire grid structure
38  *
39  * Called once by the fire engine at initialisation; terrain is static.
40  */
42  amrex::MultiFab& fire_surface_z,
43  const amrex::MultiFab* z_phys_nd,
44  const amrex::Geometry& geom_atm,
45  const FireGrid& fg);
46 
47 /**
48  * @brief Fill the ground elevations of a fire cell's bilinear wind stencil
49  *
50  * Bilinear wind interpolation blends the four atmospheric columns surrounding a
51  * fire cell. Each of those columns has its own ground, and near the surface the
52  * wind profile is anchored to it, so every column has to be sampled at the same
53  * height *above its own ground* before the horizontal blend. Over the ridge of
54  * the ROS_Slope_Effects case, neighbouring column grounds differ by up to 28 m,
55  * so blending at a single absolute height would sample a neighbour at 35 m above
56  * ground while asking for 6 m.
57  *
58  * Component c holds the ground of stencil column c, ordered
59  * (i0,j0), (i0+1,j0), (i0,j0+1), (i0+1,j0+1), with i0 = floor((i_f + 0.5)/C - 0.5).
60  *
61  * @param[out] fire_col_ground 4-component MultiFab on the fire grid [m]
62  * @param[in] z_phys_nd Nodal terrain height from ERF [m], or nullptr for
63  * flat terrain, in which case the domain floor is used
64  * @param[in] geom_atm Geometry of the level the fire grid refines
65  * @param[in] fg Fire grid structure
66  *
67  * Called once by the fire engine at initialisation; terrain is static.
68  */
70  amrex::MultiFab& fire_col_ground,
71  const amrex::MultiFab* z_phys_nd,
72  const amrex::Geometry& geom_atm,
73  const FireGrid& fg);
74 
75 #endif
Fire grid data structure and construction.
void compute_fire_column_grounds(amrex::MultiFab &fire_col_ground, const amrex::MultiFab *z_phys_nd, const amrex::Geometry &geom_atm, const FireGrid &fg)
Fill the ground elevations of a fire cell's bilinear wind stencil.
void compute_fire_surface_height(amrex::MultiFab &fire_surface_z, const amrex::MultiFab *z_phys_nd, const amrex::Geometry &geom_atm, const FireGrid &fg)
Fill the ground elevation of each fire cell's atmospheric column.
@ fg
Definition: ERF_AdvanceMorrison.cpp:111
2D horizontal fire computational grid
Definition: ERF_FireGrid.H:29