PRISMS-PF Manual v3.0-pre
All Classes Functions Variables Enumerations Pages
refinement_criterion.h
1// SPDX-FileCopyrightText: © 2025 PRISMS Center at the University of Michigan
2// SPDX-License-Identifier: GNU Lesser General Public Version 2.1
3
4#ifndef refinement_criterion_h
5#define refinement_criterion_h
6
7#include <prismspf/config.h>
8
9#include <cfloat>
10#include <cstdint>
11#include <string>
12
13PRISMS_PF_BEGIN_NAMESPACE
14
15namespace GridRefinement
16{
20 enum RefinementFlags : std::uint8_t
21 {
25 nothing = 0,
26
30 value = 0x0001,
31
35 gradient = 0x0002,
36 };
37
38 // Function that enables bitwise OR between flags
39 inline RefinementFlags
40 operator|(const RefinementFlags flag_1, const RefinementFlags flag_2)
41 {
42 return static_cast<RefinementFlags>(static_cast<unsigned int>(flag_1) |
43 static_cast<unsigned int>(flag_2));
44 }
45
46 // Function that enables bitwise compound OR between flags
47 inline RefinementFlags &
48 operator|=(RefinementFlags &flag_1, const RefinementFlags flag_2)
49 {
50 flag_1 = flag_1 | flag_2;
51 return flag_1;
52 }
53
54 // Function that enables bitwise AND between flags
55 inline RefinementFlags
56 operator&(const RefinementFlags flag_1, const RefinementFlags flag_2)
57 {
58 return static_cast<RefinementFlags>(static_cast<unsigned int>(flag_1) &
59 static_cast<unsigned int>(flag_2));
60 }
61
62 // Function that enables bitwise compound AND between flags
63 inline RefinementFlags &
64 operator&=(RefinementFlags &flag_1, const RefinementFlags flag_2)
65 {
66 flag_1 = flag_1 & flag_2;
67 return flag_1;
68 }
69
75 {
76 public:
77 std::string variable_name;
78 unsigned int variable_index = 0;
79 RefinementFlags criterion_type = RefinementFlags::nothing;
80 double value_lower_bound = DBL_MAX;
81 double value_upper_bound = DBL_MAX;
82 double gradient_lower_bound = DBL_MAX;
83
87 [[nodiscard]] std::string
89 {
90 if (criterion_type == RefinementFlags::nothing)
91 {
92 return "None";
93 }
94 if (((criterion_type & RefinementFlags::value) != 0U) &&
95 ((criterion_type & RefinementFlags::gradient) != 0U))
96 {
97 return "Value and gradient";
98 }
99 if ((criterion_type & RefinementFlags::value) != 0U)
100 {
101 return "Value";
102 }
103 if ((criterion_type & RefinementFlags::gradient) != 0U)
104 {
105 return "Gradient";
106 }
107
108 return "Unknown criterion";
109 }
110 };
111} // namespace GridRefinement
112
113PRISMS_PF_END_NAMESPACE
114
115#endif
Definition refinement_criterion.h:75
std::string criterion_to_string() const
Convert refinement criterion type to string.
Definition refinement_criterion.h:88