ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_SurfaceDiagnosticSource.H
Go to the documentation of this file.
1 #ifndef ERF_SURFACE_DIAGNOSTIC_SOURCE_H_
2 #define ERF_SURFACE_DIAGNOSTIC_SOURCE_H_
3 
4 #include <AMReX_GpuQualifiers.H>
5 #include <AMReX_REAL.H>
6 
8 {
9 
10 // Diagnostic-only provenance codes written to 2D plotfiles.
11 // These numeric values are a user-visible plotfile convention. Renumbering
12 // them is a breaking output change. The mask is cell-centered and must not
13 // affect flux calculations, boundary conditions, state updates, or staggered
14 // stress-face source mixing.
15 enum class SurfaceDiagnosticSource : int
16 {
17  Missing = 0,
18  SurfaceLayerLand = 1,
19  LSMLand = 2,
21  SurfaceLayerSea = 4,
22  Custom = 5,
23  RICO = 6
24 };
25 
26 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
27 int
29 {
30  return static_cast<int>(source);
31 }
32 
33 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
36 {
37  return static_cast<amrex::Real>(to_int(source));
38 }
39 
40 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
42 classify_scalar_source (bool is_custom,
43  bool is_rico,
44  bool is_land,
45  bool has_lsm_flux,
46  bool lsm_flux_is_valid) noexcept
47 {
48  if (is_land && has_lsm_flux && lsm_flux_is_valid) {
50  }
51  if (is_custom) {
53  }
54  if (is_rico) {
56  }
57  if (is_land && has_lsm_flux && !lsm_flux_is_valid) {
59  }
60  if (is_land) {
62  }
64 }
65 
66 inline const char*
68 {
69  switch (source) {
70  case SurfaceDiagnosticSource::Missing: return "missing";
71  case SurfaceDiagnosticSource::SurfaceLayerLand: return "surface_layer_land";
72  case SurfaceDiagnosticSource::LSMLand: return "lsm_land";
73  case SurfaceDiagnosticSource::SurfaceLayerFallback: return "surface_layer_fallback";
74  case SurfaceDiagnosticSource::SurfaceLayerSea: return "surface_layer_sea";
75  case SurfaceDiagnosticSource::Custom: return "custom";
76  case SurfaceDiagnosticSource::RICO: return "rico";
77  }
78  return "unknown";
79 }
80 
81 } // namespace surface_diagnostics
82 
83 #endif
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_SurfaceDiagnosticSource.H:8
const char * source_name(SurfaceDiagnosticSource source) noexcept
Definition: ERF_SurfaceDiagnosticSource.H:67
SurfaceDiagnosticSource
Definition: ERF_SurfaceDiagnosticSource.H:16
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real to_plot_value(SurfaceDiagnosticSource source) noexcept
Definition: ERF_SurfaceDiagnosticSource.H:35
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SurfaceDiagnosticSource classify_scalar_source(bool is_custom, bool is_rico, bool is_land, bool has_lsm_flux, bool lsm_flux_is_valid) noexcept
Definition: ERF_SurfaceDiagnosticSource.H:42
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int to_int(SurfaceDiagnosticSource source) noexcept
Definition: ERF_SurfaceDiagnosticSource.H:28