Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <memory>
7 : #include <unordered_set>
8 : #include <vector>
9 :
10 : #include "DataStructures/DataBox/Tag.hpp"
11 : #include "Options/String.hpp"
12 : #include "ParallelAlgorithms/Amr/Criteria/Criterion.hpp"
13 : #include "ParallelAlgorithms/Amr/Tags.hpp"
14 : #include "Utilities/Serialization/Serialize.hpp"
15 : #include "Utilities/TMPL.hpp"
16 :
17 : namespace amr::Criteria {
18 : /// Option tags for AMR criteria
19 1 : namespace OptionTags {
20 : /// \ingroup OptionTagsGroup
21 : /// Options for AMR criteria
22 1 : struct Criteria {
23 0 : static constexpr Options::String help = "Options for AMR criteria";
24 0 : using type = std::vector<std::unique_ptr<amr::Criterion>>;
25 0 : using group = amr::OptionTags::AmrGroup;
26 : };
27 : } // namespace OptionTags
28 :
29 1 : namespace Tags {
30 : /// The set of adaptive mesh refinement criteria
31 1 : struct Criteria : db::SimpleTag {
32 0 : using type = std::vector<std::unique_ptr<amr::Criterion>>;
33 0 : using option_tags = tmpl::list<amr::Criteria::OptionTags::Criteria>;
34 :
35 0 : static constexpr bool pass_metavariables = false;
36 0 : static type create_from_options(const type& value) {
37 : return {serialize_and_deserialize<type>(value)};
38 : }
39 : };
40 : } // namespace Tags
41 : } // namespace amr::Criteria
|