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.H>
5#include <REMORA_DataStruct.H>
6
7#include <AMReX_Geometry.H>
8#include <AMReX_FArrayBox.H>
9
10// Forward declaration to resolve circular dependency
11class REMORA;
12
13/**
14 * Class to hold problem-specific routines
15 */
17{
18public:
19 /**
20 * \brief Virtual destructor to avoid data leakage with derived class
21 */
22 virtual ~ProblemBase () = default;
23
24 virtual void
26 int /*lev*/,
27 const amrex::Geometry& /*geom*/,
28 SolverChoice const& /*m_solverChoice*/,
29 REMORA const& /*remora*/,
30 amrex::MultiFab& /*mf_cons*/,
31 amrex::MultiFab& /*mf_xvel*/,
32 amrex::MultiFab& /*mf_yvel*/) {
33 amrex::Error("Initialization set to analytic but init_analytic_prob not defined in prob.cpp");
34 }
35
36 virtual void
38 int /*lev*/, const amrex::Geometry& /*geom*/,
39 SolverChoice const& /*m_solverChoice*/,
40 REMORA const& /*remora*/,
41 amrex::MultiFab& /*mf_h*/) {
42 amrex::Error("Doing analytic bathymetry, but not defined in prob.cpp");
43 }
44
45 virtual void
47 int /*lev*/, const amrex::Geometry& /*geom*/,
48 SolverChoice const& /*m_solverChoice*/,
49 REMORA const& /*remora*/,
50 amrex::MultiFab& /*mf_pm*/, amrex::MultiFab& /*mf_pn*/) {
51 amrex::Error("Doing analytic grid scale (pm, pn), but not defined in prob.cpp");
52 }
53
54 virtual void
56 int /*lev*/, const amrex::Geometry& /*geom*/,
57 SolverChoice const& /*m_solverChoice*/,
58 REMORA const& /*remora*/,
59 amrex::MultiFab& /*mf_zeta*/) {
60 amrex::Error("Doing analytic sea surface height (zeta), but not defined in prob.cpp");
61 }
62
63 virtual void
65 int /*lev*/, const amrex::Geometry& /*geom*/,
66 SolverChoice const& /*m_solverChoice*/,
67 REMORA const& /*remora*/,
68 amrex::MultiFab& /*mf_fcor*/) {
69 amrex::Error("Doing analytic Coriolis forcing, but not defined in prob.cpp");
70 }
71
72 virtual void
74 int /*lev*/, const amrex::Geometry& /*geom*/,
75 SolverChoice const& /*m_solverChoice*/,
76 REMORA const& /*remora*/,
77 amrex::MultiFab& /*mf_Akv*/,
78 amrex::MultiFab& /*mf_Akt*/) {
79 amrex::Error("Doing analytic vertical mixing, but not defined in prob.cpp");
80 }
81
82 virtual void
84 int /*lev*/, const amrex::Geometry& /*geom*/,
85 SolverChoice const& /*m_solverChoice*/,
86 REMORA const& /*remora*/,
87 amrex::MultiFab& /*mf_visc2_p*/,
88 amrex::MultiFab& /*mf_visc2_r*/,
89 amrex::MultiFab& /*mf_diff2*/) {
90 amrex::Error("Doing analytic horizontal mixing, but not defined in prob.cpp");
91 }
92
93 virtual void
95 int /*lev*/, const amrex::Geometry& /*geom*/,
96 SolverChoice const& /*m_solverChoice*/,
97 REMORA const& /*remora*/,
98 amrex::MultiFab& /*mf_sustr*/,
99 amrex::MultiFab& /*mf_svstr*/) {
100 amrex::Error("Doing analytic surface momentum flux, but not defined in prob.cpp");
101 }
102
103 virtual void
105 int /*lev*/, const amrex::Geometry& /*geom*/,
106 SolverChoice const& /*m_solverChoice*/,
107 REMORA const& /*remora*/,
108 amrex::MultiFab& /*mf_uwind*/,
109 amrex::MultiFab& /*mf_vwind*/) {
110 amrex::Error("Doing analytic wind, but not defined in prob.cpp");
111 }
112
113 virtual void
115 int /*lev*/, const amrex::Geometry& /*geom*/,
116 SolverChoice const& /*m_solverChoice*/,
117 REMORA const& /*remora*/,
118 amrex::MultiFab& /*mf_mskr*/) {
119 amrex::Error("Doing analytic masks, but not defined in prob.cpp");
120 }
121};
122
123/**
124 * \brief Function to init the physical bounds of the domain and instantiate a Problem derived from ProblemBase
125*/
126extern std::unique_ptr<ProblemBase> amrex_probinit (
127 const amrex_real* problo,
128 const amrex_real* probhi) AMREX_ATTRIBUTE_WEAK;
129
130#endif
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_prob(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &)
virtual void init_analytic_wind(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &)
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 &, amrex::MultiFab &)
virtual void init_analytic_vmix(int, const amrex::Geometry &, SolverChoice const &, REMORA const &, amrex::MultiFab &, amrex::MultiFab &)
virtual ~ProblemBase()=default
Virtual destructor to avoid data leakage with derived class.
virtual void init_analytic_masks(int, const amrex::Geometry &, SolverChoice 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:91