ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_SBMTransport.H
Go to the documentation of this file.
1 #ifndef ERF_SBM_TRANSPORT_H_
2 #define ERF_SBM_TRANSPORT_H_
3 
4 #include "ERF_SBMStateManager.H"
8 
9 #include <AMReX_Geometry.H>
10 
11 #include <memory>
12 #include <string>
13 #include <vector>
14 
15 namespace erf_sbm {
16 
17 /**
18  * Bounded mapped advection for the authoritative SBM spectrum.
19  *
20  * The state manager remains the owner of prognostic state. This object owns
21  * per-level stage scratch, the static mapped measure, the compact projected
22  * qc/qr completed-step face ledger, and an optional all-component completed
23  * spectral face ledger for AMR-capable instances. Operational AMR execution
24  * remains disabled by the ERF runtime guard.
25  */
27 {
28  public:
29  explicit SBMTransport (const SBMLayout& layout,
30  int number_of_levels,
31  int max_groups_per_chunk = 16);
33  SBMTransport (const SBMTransport&) = delete;
35 
36  void define (int level,
37  const amrex::BoxArray& cell_ba,
38  const amrex::DistributionMapping& dm);
39  bool rebuild_static_measure (int level,
40  const amrex::MultiFab& detJ,
41  const amrex::MultiFab& mx,
42  const amrex::MultiFab& my,
43  std::string& diagnostic);
44 
45  /**
46  * ERF slow-RHS seam. The conserved-state views are ordered as the
47  * old-step anchor, the actual host predictor/input, and the target being
48  * written. Keep this forwarding point shared by the ERF call site and
49  * seam-level tests so density-time pairing cannot drift silently.
50  */
51  void advance_stage_from_host (int level,
53  int stage,
54  double step_old_time,
55  double input_time,
56  double target_time,
57  double host_stage_interval,
58  SBMStateManager& state_manager,
59  const amrex::MultiFab& S_old_cons,
60  const amrex::MultiFab& S_new_cons,
61  amrex::MultiFab& S_data_cons,
62  const amrex::MultiFab& avg_xmom,
63  const amrex::MultiFab& avg_ymom,
64  const amrex::MultiFab& avg_zmom,
65  const amrex::Geometry& geometry,
66  int qc_component,
67  int qr_component);
68 
69  void advance_stage (int level,
71  int stage,
72  double step_old_time,
73  double input_time,
74  double target_time,
75  double host_stage_interval,
76  SBMStateManager& state_manager,
77  const amrex::MultiFab& conserved_anchor,
78  const amrex::MultiFab& conserved_input,
79  amrex::MultiFab& conserved_target,
80  const amrex::MultiFab& avg_xmom,
81  const amrex::MultiFab& avg_ymom,
82  const amrex::MultiFab& avg_zmom,
83  const amrex::Geometry& geometry,
84  int qc_component,
85  int qr_component);
86 
87  void destroy (int level);
88  [[nodiscard]] bool is_defined (int level) const;
89  [[nodiscard]] bool measure_is_ready (int level) const;
90  [[nodiscard]] const amrex::MultiFab& static_measure (int level) const;
91  [[nodiscard]] const erf_auxiliary::CompletedStepFluxLedger&
92  projected_ledger (int level) const;
93  /** Authoritative all-component accepted transfer, defined for AMR-capable instances only. */
94  [[nodiscard]] const erf_auxiliary::CompletedStepFluxLedger& completed_spectral_ledger (int level) const;
95 
96  private:
97  struct LevelStorage;
98  struct DeviceMetadata;
99 
102  std::vector<ConstraintGroup> m_groups;
104  std::vector<AttachedPropertySupportDescriptor> m_property_support;
105  std::vector<ConstraintClosureChunk> m_chunks;
106  std::vector<int> m_max_constraints_per_group;
107  std::vector<std::unique_ptr<LevelStorage>> m_levels;
108  std::unique_ptr<DeviceMetadata> m_device_metadata;
109 };
110 
111 } // namespace erf_sbm
112 
113 #endif
Definition: ERF_AuxiliaryStage.H:116
Definition: ERF_SBMBulkProjection.H:18
Definition: ERF_SBMLayout.H:94
Definition: ERF_SBMStateManager.H:16
Definition: ERF_SBMTransport.H:27
const amrex::MultiFab & static_measure(int level) const
Definition: ERF_SBMTransport.cpp:1439
SBMTransport & operator=(const SBMTransport &)=delete
SBMTransport(const SBMLayout &layout, int number_of_levels, int max_groups_per_chunk=16)
Definition: ERF_SBMTransport.cpp:273
std::unique_ptr< DeviceMetadata > m_device_metadata
Definition: ERF_SBMTransport.H:108
bool measure_is_ready(int level) const
Definition: ERF_SBMTransport.cpp:1430
void define(int level, const amrex::BoxArray &cell_ba, const amrex::DistributionMapping &dm)
Definition: ERF_SBMTransport.cpp:522
void advance_stage_from_host(int level, erf_auxiliary::HostIntegrator method, int stage, double step_old_time, double input_time, double target_time, double host_stage_interval, SBMStateManager &state_manager, const amrex::MultiFab &S_old_cons, const amrex::MultiFab &S_new_cons, amrex::MultiFab &S_data_cons, const amrex::MultiFab &avg_xmom, const amrex::MultiFab &avg_ymom, const amrex::MultiFab &avg_zmom, const amrex::Geometry &geometry, int qc_component, int qr_component)
Definition: ERF_SBMTransport.cpp:595
SBMTransport(const SBMTransport &)=delete
bool is_defined(int level) const
Definition: ERF_SBMTransport.cpp:1421
std::vector< ConstraintClosureChunk > m_chunks
Definition: ERF_SBMTransport.H:105
SBMBulkProjection m_projection
Definition: ERF_SBMTransport.H:101
void destroy(int level)
Definition: ERF_SBMTransport.cpp:1413
std::vector< ConstraintGroup > m_groups
Definition: ERF_SBMTransport.H:102
std::vector< std::unique_ptr< LevelStorage > > m_levels
Definition: ERF_SBMTransport.H:107
void advance_stage(int level, erf_auxiliary::HostIntegrator method, int stage, double step_old_time, double input_time, double target_time, double host_stage_interval, SBMStateManager &state_manager, const amrex::MultiFab &conserved_anchor, const amrex::MultiFab &conserved_input, amrex::MultiFab &conserved_target, const amrex::MultiFab &avg_xmom, const amrex::MultiFab &avg_ymom, const amrex::MultiFab &avg_zmom, const amrex::Geometry &geometry, int qc_component, int qr_component)
Definition: ERF_SBMTransport.cpp:616
std::vector< AttachedPropertySupportDescriptor > m_property_support
Definition: ERF_SBMTransport.H:104
const erf_auxiliary::CompletedStepFluxLedger & projected_ledger(int level) const
Definition: ERF_SBMTransport.cpp:1452
std::vector< int > m_max_constraints_per_group
Definition: ERF_SBMTransport.H:106
const erf_auxiliary::CompletedStepFluxLedger & completed_spectral_ledger(int level) const
Definition: ERF_SBMTransport.cpp:1461
bool rebuild_static_measure(int level, const amrex::MultiFab &detJ, const amrex::MultiFab &mx, const amrex::MultiFab &my, std::string &diagnostic)
Definition: ERF_SBMTransport.cpp:573
FlattenedConstraintSet m_flat_constraints
Definition: ERF_SBMTransport.H:103
const SBMLayout & m_layout
Definition: ERF_SBMTransport.H:98
HostIntegrator
Definition: ERF_AuxiliaryStage.H:11
Definition: ERF.H:108
Definition: ERF_SBMConstraintGroups.H:63
Definition: ERF_SBMTransport.cpp:258
Definition: ERF_SBMTransport.cpp:235