REMORA
Regional Modeling of Oceans Refined Adaptively
Loading...
Searching...
No Matches
REMORA_prob_common.H
Go to the documentation of this file.
1#ifndef _REMORA_PROBCOMMON_H_
2#define _REMORA_PROBCOMMON_H_
3
4#include <REMORA_ProbCoords.H>
5#include <REMORA.H>
6#include <REMORA_DataStruct.H>
7
8#include <AMReX_Geometry.H>
9#include <AMReX_FArrayBox.H>
10
11// Forward declaration to resolve circular dependency
12class REMORA;
13
14/**
15 * Class to hold problem-specific routines
16 */
18{
19public:
20 /**
21 * \brief Virtual destructor to avoid data leakage with derived class
22 */
23 virtual ~ProblemBase () = default;
24
25 virtual void
27 int /*lev*/,
28 const amrex::Geometry& /*geom*/,
29 SolverChoice const& /*m_solverChoice*/,
30 REMORA const& /*remora*/,
31 ProbCoords const& /*coords*/,
32 amrex::MultiFab& /*mf_cons*/,
33 amrex::MultiFab& /*mf_xvel*/,
34 amrex::MultiFab& /*mf_yvel*/) {
35 amrex::Error("Initialization set to analytic but init_analytic_prob not defined in prob.cpp");
36 }
37
38 virtual void
40 int /*lev*/, const amrex::Geometry& /*geom*/,
41 SolverChoice const& /*m_solverChoice*/,
42 REMORA const& /*remora*/,
43 amrex::MultiFab& /*mf_h*/) {
44 amrex::Error("Doing analytic bathymetry, but not defined in prob.cpp");
45 }
46
47 virtual void
49 int /*lev*/, const amrex::Geometry& /*geom*/,
50 SolverChoice const& /*m_solverChoice*/,
51 REMORA const& /*remora*/,
52 amrex::MultiFab& /*mf_pm*/, amrex::MultiFab& /*mf_pn*/) {
53 amrex::Error("Doing analytic grid scale (pm, pn), but not defined in prob.cpp");
54 }
55
56 virtual void
58 int /*lev*/, const amrex::Geometry& /*geom*/,
59 SolverChoice const& /*m_solverChoice*/,
60 REMORA const& /*remora*/,
61 ProbCoords const& /*coords*/,
62 amrex::MultiFab& /*mf_zeta*/) {
63 amrex::Error("Doing analytic sea surface height (zeta), but not defined in prob.cpp");
64 }
65
66 virtual void
68 int /*lev*/, const amrex::Geometry& /*geom*/,
69 SolverChoice const& /*m_solverChoice*/,
70 REMORA const& /*remora*/,
71 amrex::MultiFab& /*mf_fcor*/) {
72 amrex::Error("Doing analytic Coriolis forcing, but not defined in prob.cpp");
73 }
74
75 virtual void
77 int /*lev*/, const amrex::Geometry& /*geom*/,
78 SolverChoice const& /*m_solverChoice*/,
79 REMORA const& /*remora*/,
80 amrex::MultiFab& /*mf_Akv*/,
81 amrex::MultiFab& /*mf_Akt*/) {
82 amrex::Error("Doing analytic vertical mixing, but not defined in prob.cpp");
83 }
84
85 virtual void
87 int /*lev*/, const amrex::Geometry& /*geom*/,
88 SolverChoice const& /*m_solverChoice*/,
89 REMORA const& /*remora*/,
90 amrex::MultiFab& /*mf_visc2_p*/,
91 amrex::MultiFab& /*mf_visc2_r*/,
92 amrex::MultiFab& /*mf_diff2*/) {
93 amrex::Error("Doing analytic horizontal mixing, but not defined in prob.cpp");
94 }
95
96 virtual void
98 int /*lev*/, const amrex::Geometry& /*geom*/,
99 SolverChoice const& /*m_solverChoice*/,
100 REMORA const& /*remora*/,
101 amrex::MultiFab& /*mf_sustr*/,
102 amrex::MultiFab& /*mf_svstr*/) {
103 amrex::Error("Doing analytic surface momentum flux, but not defined in prob.cpp");
104 }
105
106 virtual void
108 int /*lev*/, const amrex::Geometry& /*geom*/,
109 SolverChoice const& /*m_solverChoice*/,
110 REMORA const& /*remora*/,
111 amrex::MultiFab& /*mf_Uwind*/,
112 amrex::MultiFab& /*mf_Vwind*/,
113 amrex::MultiFab& /*mf_Tair*/,
114 amrex::MultiFab& /*mf_qair*/,
115 amrex::MultiFab& /*mf_Pair*/,
116 amrex::MultiFab& /*mf_srflx*/,
117 amrex::MultiFab& /*mf_longwave_down*/,
118 amrex::MultiFab& /*mf_rain*/,
119 amrex::MultiFab& /*mf_cloud*/,
120 amrex::MultiFab& /*mf_EminusP*/) {
121 amrex::Error("Doing analytic surface variables (used to calculate bulk-flux atmospheric forcing, but not defined in prob.cpp");
122 }
123
124 virtual void
126 int /*lev*/, const amrex::Geometry& /*geom*/,
127 SolverChoice const& /*m_solverChoice*/,
128 REMORA const& /*remora*/,
129 amrex::MultiFab& /*mf_mskr*/) {
130 amrex::Error("Doing analytic masks, but not defined in prob.cpp");
131 }
132
133 virtual void
135 int /*lev*/, const amrex::Geometry& /*geom*/,
136 SolverChoice const& /*m_solverChoice*/,
137 REMORABiology::FennelParameters const& /*m_fennel_params*/,
138 REMORA const& /*remora*/,
139 amrex::MultiFab& /*mf_cons*/) {
140 amrex::Error("Doing analytic biology but not defined in prob.cpp");
141 }
142};
143
144/**
145 * \brief Function to init the physical bounds of the domain and instantiate a Problem derived from ProblemBase
146*/
147extern std::unique_ptr<ProblemBase> amrex_probinit (
148 const amrex_real* problo,
150
151#endif
mf_h setVal(geomdata.ProbHi(2))
std::unique_ptr< ProblemBase > amrex_probinit(const amrex_real *problo, const amrex_real *probhi) AMREX_ATTRIBUTE_WEAK
Function to init the physical bounds of the domain and instantiate a Problem derived from ProblemBase...
virtual void init_analytic_hmix(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &)
virtual void init_analytic_coriolis(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &)
virtual void init_analytic_grid_scale(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &)
virtual void init_analytic_zeta(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, ProbCoords const &, amrex::MultiFab &)
virtual void init_analytic_vmix(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &)
virtual void init_analytic_surface_var(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &)
virtual ~ProblemBase()=default
Virtual destructor to avoid data leakage with derived class.
virtual void init_analytic_prob(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, ProbCoords const &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &)
virtual void init_analytic_masks(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &)
virtual void init_analytic_biology(int, const amrex::Geometry &, SolverChoice const &, REMORABiology::FennelParameters const &, REMORA const &, amrex::MultiFab &)
virtual void init_analytic_smflux(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &)
virtual void init_analytic_bathymetry(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &)
Class that stores all relevant simulation state data with methods for time stepping.
Definition REMORA.H:93
Coordinates a prob function reads, on the BoxArray and DistributionMapping of the MultiFab it fills.