/home/runner/work/kynema-sgf/kynema-sgf/src/utilities/tagging/RefinementCriteria.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/utilities/tagging/RefinementCriteria.H Source File
Kynema-SGF API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
RefinementCriteria.H
Go to the documentation of this file.
1#ifndef REFINEMENTCRITERIA_H
2#define REFINEMENTCRITERIA_H
3
4#include "AMReX_AmrCore.H"
5#include "AMReX_TagBox.H"
6
7#include "src/core/Factory.H"
8
18
19namespace kynema_sgf {
20
21namespace tagging {
22
24enum class TaggingOperator : std::uint8_t { AND, OR, AND_NOT, OR_NOT };
25
31AMREX_FORCE_INLINE TaggingOperator string_to_operator(const std::string& op)
32{
33 if (op == "and") {
35 }
36 if (op == "or") {
38 }
39 if (op == "and_not") {
41 }
42 if (op == "or_not") {
44 }
45 amrex::Abort(
46 "Invalid operator for tagging criteria: " + op +
47 ". Must be one of: and, or, and_not, or_not.");
48 // Unreachable, but avoids compiler warning
50}
51
52AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::TagBox::TagVal tag_val(
53 const bool previous_val, const bool current_val, const TaggingOperator& op)
54{
55 switch (op) {
57 return (previous_val && current_val) ? amrex::TagBox::SET
58 : amrex::TagBox::CLEAR;
60 return (previous_val || current_val) ? amrex::TagBox::SET
61 : amrex::TagBox::CLEAR;
63 return (previous_val && !current_val) ? amrex::TagBox::SET
64 : amrex::TagBox::CLEAR;
66 return (previous_val || !current_val) ? amrex::TagBox::SET
67 : amrex::TagBox::CLEAR;
68 }
69 // Unreachable, but avoids compiler warning
70 return amrex::TagBox::CLEAR;
71}
72
73} // namespace tagging
74
75class CFDSim;
76
86class RefinementCriteria : public Factory<RefinementCriteria, CFDSim&>
87{
88public:
89 static std::string base_identifier() { return "RefinementCriteria"; }
90
92 {
93 return m_tag_operator;
94 }
95
97 {
98 m_tag_operator = op;
99 }
100
102
103 ~RefinementCriteria() override = default;
104
107 virtual void initialize(const std::string& key) = 0;
108
113 virtual void operator()(
114 int level, amrex::TagBoxArray& tags, amrex::Real time, int ngrow) = 0;
115
116private:
118};
119
124{
125public:
126 explicit RefineCriteriaManager(CFDSim& sim);
127
129
130 void initialize();
131
132 void
133 tag_cells(int lev, amrex::TagBoxArray& tags, amrex::Real time, int ngrow);
134
135private:
137
138 amrex::Vector<std::unique_ptr<RefinementCriteria>> m_refiners;
139};
140
141} // namespace kynema_sgf
142
143#endif /* REFINEMENTCRITERIA_H */
Definition CFDSim.H:55
void initialize()
Definition RefinementCriteria.cpp:10
void tag_cells(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow)
Definition RefinementCriteria.cpp:38
CFDSim & m_sim
Definition RefinementCriteria.H:136
RefineCriteriaManager(CFDSim &sim)
Definition RefinementCriteria.cpp:8
amrex::Vector< std::unique_ptr< RefinementCriteria > > m_refiners
Definition RefinementCriteria.H:138
void tag_operator(const tagging::TaggingOperator &op)
Definition RefinementCriteria.H:96
static std::string base_identifier()
Definition RefinementCriteria.H:89
virtual void initialize(const std::string &key)=0
Perform initialization tasks (e.g., read from file etc.).
tagging::TaggingOperator tag_operator() const
Definition RefinementCriteria.H:91
tagging::TaggingOperator m_tag_operator
Definition RefinementCriteria.H:117
virtual void operator()(int level, amrex::TagBoxArray &tags, amrex::Real time, int ngrow)=0
~RefinementCriteria() override=default
Definition BoxRefiner.cpp:9
AMREX_FORCE_INLINE TaggingOperator string_to_operator(const std::string &op)
Definition RefinementCriteria.H:31
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::TagBox::TagVal tag_val(const bool previous_val, const bool current_val, const TaggingOperator &op)
Definition RefinementCriteria.H:52
TaggingOperator
Definition RefinementCriteria.H:24
@ OR
Definition RefinementCriteria.H:24
@ AND
Definition RefinementCriteria.H:24
@ AND_NOT
Definition RefinementCriteria.H:24
@ OR_NOT
Definition RefinementCriteria.H:24
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10