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::MultiFab& /*mf_zvel*/) {
34 amrex::Error("Initialization set to analytic but init_analytic_prob not defined in prob.cpp");
35 }
36
37 virtual void
39 int /*lev*/, const amrex::Geometry& /*geom*/,
40 SolverChoice const& /*m_solverChoice*/,
41 REMORA const& /*remora*/,
42 amrex::MultiFab& /*mf_h*/) {
43 amrex::Error("Doing analytic bathymetry, but not defined in prob.cpp");
44 }
45
46 virtual void
48 int /*lev*/, const amrex::Geometry& /*geom*/,
49 SolverChoice const& /*m_solverChoice*/,
50 REMORA const& /*remora*/,
51 amrex::MultiFab& /*mf_pm*/, amrex::MultiFab& /*mf_pn*/) {
52 amrex::Error("Doing analytic grid scale (pm, pn), but not defined in prob.cpp");
53 }
54
55 virtual void
57 int /*lev*/, const amrex::Geometry& /*geom*/,
58 SolverChoice const& /*m_solverChoice*/,
59 REMORA const& /*remora*/,
60 amrex::MultiFab& /*mf_zeta*/) {
61 amrex::Error("Doing analytic sea surface height (zeta), but not defined in prob.cpp");
62 }
63
64 virtual void
66 int /*lev*/, const amrex::Geometry& /*geom*/,
67 SolverChoice const& /*m_solverChoice*/,
68 REMORA const& /*remora*/,
69 amrex::MultiFab& /*mf_fcor*/) {
70 amrex::Error("Doing analytic Coriolis forcing, but not defined in prob.cpp");
71 }
72
73 virtual void
75 int /*lev*/, const amrex::Geometry& /*geom*/,
76 SolverChoice const& /*m_solverChoice*/,
77 REMORA const& /*remora*/,
78 amrex::MultiFab& /*mf_Akv*/,
79 amrex::MultiFab& /*mf_Akt*/) {
80 amrex::Error("Doing analytic vertical mixing, but not defined in prob.cpp");
81 }
82
83 virtual void
85 int /*lev*/, const amrex::Geometry& /*geom*/,
86 SolverChoice const& /*m_solverChoice*/,
87 REMORA const& /*remora*/,
88 amrex::MultiFab& /*mf_visc2_p*/,
89 amrex::MultiFab& /*mf_visc2_r*/,
90 amrex::MultiFab& /*mf_diff2*/) {
91 amrex::Error("Doing analytic horizontal mixing, but not defined in prob.cpp");
92 }
93
94 virtual void
96 int /*lev*/, const amrex::Geometry& /*geom*/,
97 SolverChoice const& /*m_solverChoice*/,
98 REMORA const& /*remora*/,
99 amrex::MultiFab& /*mf_sustr*/,
100 amrex::MultiFab& /*mf_svstr*/) {
101 amrex::Error("Doing analytic surface momentum flux, but not defined in prob.cpp");
102 }
103
104 virtual void
106 int /*lev*/, const amrex::Geometry& /*geom*/,
107 SolverChoice const& /*m_solverChoice*/,
108 REMORA const& /*remora*/,
109 amrex::MultiFab& /*mf_uwind*/,
110 amrex::MultiFab& /*mf_vwind*/) {
111 amrex::Error("Doing analytic wind, but not defined in prob.cpp");
112 }
113};
114
115/**
116 * \brief Function to init the physical bounds of the domain and instantiate a Problem derived from ProblemBase
117*/
118extern std::unique_ptr<ProblemBase> amrex_probinit (
119 const amrex_real* problo,
120 const amrex_real* probhi) AMREX_ATTRIBUTE_WEAK;
121
122#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 &, 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_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:88