/home/runner/work/spades/spades/Source/IC.H Source File

SPADES API: /home/runner/work/spades/spades/Source/IC.H Source File
SPADES API
IC.H
Go to the documentation of this file.
1#ifndef IC_H
2#define IC_H
3#include <AMReX.H>
4#include <AMReX_REAL.H>
5#include <AMReX_RealVect.H>
6#include <AMReX_ParmParse.H>
7#include <AMReX_MultiFab.H>
8#include "Utilities.H"
9
13namespace spades::ic {
14
17{
19 struct DeviceOp
20 {
21
22 AMREX_GPU_DEVICE
24 const amrex::IntVect& /*iv*/,
25 amrex::GeometryData const& /*geom*/,
26 amrex::Real& state) const
27 {
28 state = 0.0;
29 }
30 };
31
33
34 explicit Constant();
35
36 static std::string identifier() { return "ic_constant"; }
37
38 [[nodiscard]] DeviceType device_instance() const { return m_op; }
39
41};
42
45{
46public:
47 InitializerBase() = default;
48
49 virtual ~InitializerBase() = default;
50
51 virtual void initialize(amrex::GeometryData const& geom) = 0;
52};
53
55template <typename ICOp>
57{
58public:
59 using ICDeviceOp = typename ICOp::DeviceType;
60
61 Initializer(const ICOp ic_op, amrex::MultiFab& state)
62 : m_op(ic_op), m_state(state)
63 {}
64
65 ~Initializer() override = default;
66
71 void initialize(amrex::GeometryData const& geom) override
72 {
73 auto const& s_arrs = m_state.arrays();
74 ICDeviceOp ic(m_op.device_instance());
75 amrex::ParallelFor(
77 [=] AMREX_GPU_DEVICE(int nbx, int i, int j, int k, int n) noexcept {
78 const amrex::IntVect iv(AMREX_D_DECL(i, j, k));
79 amrex::Real state = 0.0;
80 ic(iv, geom, state);
81
82 s_arrs[nbx](i, j, k, n) = state;
83 });
84 amrex::Gpu::streamSynchronize();
85 }
86
88 const ICOp m_op;
89
91 amrex::MultiFab& m_state;
92};
93
94} // namespace spades::ic
95#endif
Base class for initial conditions.
Definition IC.H:45
virtual ~InitializerBase()=default
virtual void initialize(amrex::GeometryData const &geom)=0
Initial condition class.
Definition IC.H:57
amrex::MultiFab & m_state
State that will be filled with the initial condition operator.
Definition IC.H:91
typename ICOp::DeviceType ICDeviceOp
Definition IC.H:59
Initializer(const ICOp ic_op, amrex::MultiFab &state)
Definition IC.H:61
~Initializer() override=default
const ICOp m_op
Initial condition operator.
Definition IC.H:88
void initialize(amrex::GeometryData const &geom) override
Initialize m_state using the initial condition operator.
Definition IC.H:71
static constexpr int N_STATES
Number of states.
Definition Constants.H:10
SPADES initial conditions.
Definition IC.cpp:2
Device functor for the Constant initial condition.
Definition IC.H:20
AMREX_GPU_DEVICE void operator()(const amrex::IntVect &, amrex::GeometryData const &, amrex::Real &state) const
Definition IC.H:23
Constant initial condition.
Definition IC.H:17
DeviceType device_instance() const
Definition IC.H:38
Constant()
Definition IC.cpp:4
static std::string identifier()
Definition IC.H:36
DeviceOp m_op
Definition IC.H:40