/home/runner/work/kynema-sgf/kynema-sgf/src/boundary_conditions/field_boundary_fill/FieldBoundary.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/boundary_conditions/field_boundary_fill/FieldBoundary.H Source File
Kynema-SGF API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
FieldBoundary.H
Go to the documentation of this file.
1#ifndef FIELDBOUNDARY_H
2#define FIELDBOUNDARY_H
3
4#include "src/core/Factory.H"
5#include "src/core/CollMgr.H"
6#include "src/core/Field.H"
7#include "AMReX_MultiFab.H"
8#include "AMReX_Geometry.H"
9
10namespace kynema_sgf {
11
12class CFDSim;
13
20class FieldBoundary : public Factory<FieldBoundary, CFDSim&>
21{
22public:
23 static std::string base_identifier() { return "FieldBoundary"; }
24
25 ~FieldBoundary() override = default;
26
28 virtual void post_init_actions() = 0;
29
31 virtual void pre_advance_work() = 0;
32
34 virtual void pre_predictor_work() {}
35
37 virtual void post_advance_work() = 0;
38
41 [[nodiscard]] virtual bool provides_inflow_values(
42 const Field& /*field*/, amrex::Orientation /*ori*/) const
43 {
44 return false;
45 }
46
48 [[nodiscard]] virtual bool
49 may_provide_inflow_values(const Field& field, amrex::Orientation ori) const
50 {
51 return provides_inflow_values(field, ori);
52 }
53
55 virtual void set_velocity(
56 int /*lev*/,
57 amrex::Real /*time*/,
58 const Field& /*vel_fld*/,
59 amrex::MultiFab& /*vel_mfab*/,
60 int /*dcomp*/ = 0,
61 int /*orig_comp*/ = 0) const = 0;
62};
63
65class FieldBoundaryMgr : public CollMgr<FieldBoundaryMgr, FieldBoundary>
66{
67public:
69 template <typename T>
70 T& get()
71 {
72 AMREX_ASSERT(contains(T::identifier()));
73 return dynamic_cast<T&>(operator()(T::identifier()));
74 }
75
77 template <typename T>
78 [[nodiscard]] const T& get() const
79 {
80 AMREX_ASSERT(contains(T::identifier()));
81 return dynamic_cast<const T&>(operator()(T::identifier()));
82 }
83};
84
85} // namespace kynema_sgf
86
87#endif /* FIELDBOUNDARY_H */
Definition CFDSim.H:55
bool contains(const std::string &key) const
Definition CollMgr.H:57
FieldBoundary & operator()(const std::string &key)
Definition CollMgr.H:64
Definition FieldBoundary.H:21
virtual bool provides_inflow_values(const Field &, amrex::Orientation) const
Whether this fill replaces all components over the entire inflow face.
Definition FieldBoundary.H:41
static std::string base_identifier()
Definition FieldBoundary.H:23
~FieldBoundary() override=default
virtual void post_init_actions()=0
Actions to perform post initialization.
virtual void pre_advance_work()=0
Perform tasks necessary before advancing timestep.
virtual void set_velocity(int, amrex::Real, const Field &, amrex::MultiFab &, int=0, int=0) const =0
Velocity fill function to be used by nodal projection.
virtual bool may_provide_inflow_values(const Field &field, amrex::Orientation ori) const
Conservative coverage estimate before mesh and input data are loaded.
Definition FieldBoundary.H:49
virtual void pre_predictor_work()
Perform tasks necessary only once per timestep, after pre_advance.
Definition FieldBoundary.H:34
virtual void post_advance_work()=0
Perform tasks necessary after advancing timestep.
Definition FieldBoundary.H:66
T & get()
Return a concrete field-boundary instance.
Definition FieldBoundary.H:70
const T & get() const
Return a concrete field-boundary instance.
Definition FieldBoundary.H:78
Definition Field.H:115
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:12