ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_TopographicShading.H
Go to the documentation of this file.
1 #ifndef ERF_TOPOGRAPHIC_SHADING_H_
2 #define ERF_TOPOGRAPHIC_SHADING_H_
3 
4 #include <AMReX_Geometry.H>
5 #include <AMReX_MultiFab.H>
6 #include <ERF_RadStruct.H>
7 #include <memory>
8 
9 /** Surface-only correction of the radiation supplied to land models.
10  * The atmospheric fluxes and heating remain the column solver's outputs.
11  * Raw forcing is retained separately, including across radiation intervals,
12  * so a refined level never interpolates an already corrected parent flux.
13  */
15 {
16 public:
17  // Same order as SurfaceModel's canonical radiation outputs.
21 
22  void define_level (int lev, const amrex::BoxArray& ba2d,
23  const amrex::DistributionMapping& dm, const amrex::Geometry& geom);
24  bool geometry_ready (int lev) const;
25  bool forcing_ready (int lev) const;
26  void initialize_geometry (int lev, const TopographicShadingChoice& choice,
27  const amrex::MultiFab& z_nd,
28  const amrex::MultiFab& map_x, const amrex::MultiFab& map_y,
29  const amrex::MultiFab* lat, const amrex::MultiFab* lon);
30  amrex::Vector<amrex::MultiFab*> raw_fields (int lev);
31  amrex::MultiFab* raw (int lev);
32  const amrex::MultiFab* diagnostics (int lev) const;
33  void set_sun (int lev, double calday, double declin);
34  void interpolate_from_coarse (int lev);
35  void apply (int lev, const TopographicShadingChoice& choice,
36  const amrex::Vector<amrex::MultiFab*>& destinations);
37 
38 private:
39  struct Level {
40  amrex::Geometry geom;
41  amrex::MultiFab ground, patch, raw, diagnostic;
42  amrex::Vector<std::unique_ptr<amrex::MultiFab>> aliases;
43  bool geometry_ready = false;
44  bool forcing_ready = false;
45  double calday = 0, declin = 0;
46  };
47  amrex::Vector<std::unique_ptr<Level>> m_levels;
48 };
49 #endif
Radiation model type and control parameters.
Definition: ERF_TopographicShading.H:15
amrex::Vector< std::unique_ptr< Level > > m_levels
Definition: ERF_TopographicShading.H:47
amrex::MultiFab * raw(int lev)
Definition: ERF_TopographicShading.cpp:192
bool geometry_ready(int lev) const
Definition: ERF_TopographicShading.cpp:89
void apply(int lev, const TopographicShadingChoice &choice, const amrex::Vector< amrex::MultiFab * > &destinations)
Definition: ERF_TopographicShading.cpp:216
amrex::Vector< amrex::MultiFab * > raw_fields(int lev)
Definition: ERF_TopographicShading.cpp:185
void interpolate_from_coarse(int lev)
Definition: ERF_TopographicShading.cpp:207
void initialize_geometry(int lev, const TopographicShadingChoice &choice, const amrex::MultiFab &z_nd, const amrex::MultiFab &map_x, const amrex::MultiFab &map_y, const amrex::MultiFab *lat, const amrex::MultiFab *lon)
Definition: ERF_TopographicShading.cpp:99
void set_sun(int lev, double calday, double declin)
Definition: ERF_TopographicShading.cpp:199
Diagnostic
Definition: ERF_TopographicShading.H:19
@ Shadow
Definition: ERF_TopographicShading.H:19
@ NDiag
Definition: ERF_TopographicShading.H:19
@ DirectFactor
Definition: ERF_TopographicShading.H:19
@ UnshadedSW
Definition: ERF_TopographicShading.H:19
@ Incidence
Definition: ERF_TopographicShading.H:19
@ TerrainSW
Definition: ERF_TopographicShading.H:19
GeometryField
Definition: ERF_TopographicShading.H:20
@ CosAlpha
Definition: ERF_TopographicShading.H:20
@ NGeom
Definition: ERF_TopographicShading.H:20
@ MapX
Definition: ERF_TopographicShading.H:20
@ Longitude
Definition: ERF_TopographicShading.H:20
@ MapY
Definition: ERF_TopographicShading.H:20
@ Height
Definition: ERF_TopographicShading.H:20
@ SinAlpha
Definition: ERF_TopographicShading.H:20
@ Latitude
Definition: ERF_TopographicShading.H:20
const amrex::MultiFab * diagnostics(int lev) const
Definition: ERF_TopographicShading.cpp:194
RadiationField
Definition: ERF_TopographicShading.H:18
@ DirectNir
Definition: ERF_TopographicShading.H:18
@ CosZen
Definition: ERF_TopographicShading.H:18
@ Shortwave
Definition: ERF_TopographicShading.H:18
@ DirectVis
Definition: ERF_TopographicShading.H:18
@ Longwave
Definition: ERF_TopographicShading.H:18
@ DiffuseNir
Definition: ERF_TopographicShading.H:18
@ NRad
Definition: ERF_TopographicShading.H:18
@ DiffuseVis
Definition: ERF_TopographicShading.H:18
void define_level(int lev, const amrex::BoxArray &ba2d, const amrex::DistributionMapping &dm, const amrex::Geometry &geom)
Definition: ERF_TopographicShading.cpp:65
bool forcing_ready(int lev) const
Definition: ERF_TopographicShading.cpp:94
Definition: ERF_RadStruct.H:103
Definition: ERF_TopographicShading.H:39
amrex::MultiFab diagnostic
Definition: ERF_TopographicShading.H:41
bool forcing_ready
Definition: ERF_TopographicShading.H:44
amrex::MultiFab ground
Definition: ERF_TopographicShading.H:41
bool geometry_ready
Definition: ERF_TopographicShading.H:43
amrex::MultiFab patch
Definition: ERF_TopographicShading.H:41
double calday
Definition: ERF_TopographicShading.H:45
amrex::Geometry geom
Definition: ERF_TopographicShading.H:40
double declin
Definition: ERF_TopographicShading.H:45
amrex::MultiFab raw
Definition: ERF_TopographicShading.H:41
amrex::Vector< std::unique_ptr< amrex::MultiFab > > aliases
Definition: ERF_TopographicShading.H:42