135 std::set<std::string> dependency_strings,
138 static const std::set<std::pair<std::pair<std::string, std::string>,
EvalFlags>>
140 {{
"",
""}, EvalFlags::values },
141 {{
"grad(",
")"}, EvalFlags::gradients},
142 {{
"hess(",
")"}, EvalFlags::hessians },
143 {{
"hessdiag(",
")"}, EvalFlags::hessians },
144 {{
"lap(",
")"}, EvalFlags::hessians },
145 {{
"div(",
")"}, EvalFlags::gradients},
146 {{
"symgrad(",
")"}, EvalFlags::gradients},
147 {{
"curl(",
")"}, EvalFlags::gradients},
150 static const std::set<std::pair<std::string, std::string>> src_delimiters = {
158 for (
unsigned int i = 0; i < field_attributes.size(); ++i)
160 const auto &attr = field_attributes[i];
161 for (
const auto &[delimiter, flag] : reg_delimiters)
163 std::string potential_match = delimiter.first + attr.name + delimiter.second;
164 auto iter = dependency_strings.find(potential_match);
165 if (iter != dependency_strings.end())
167 result[i].flag |= flag;
168 dependency_strings.erase(iter);
170 for (
const auto &[src1, src2] : src_delimiters)
173 delimiter.first + src1 + attr.name + src2 + delimiter.second;
174 iter = dependency_strings.find(potential_match);
175 if (iter != dependency_strings.end())
177 result[i].src_flag |= flag;
178 dependency_strings.erase(iter);
181 for (
unsigned int old_index = 0; old_index < max_checked_age; ++old_index)
183 potential_match = delimiter.first +
"old_" + std::to_string(old_index + 1) +
184 "(" + attr.name +
")" + delimiter.second;
185 iter = dependency_strings.find(potential_match);
186 if (iter != dependency_strings.end())
188 if (result[i].old_flags.size() < old_index + 1)
190 result[i].old_flags.resize(old_index + 1, EvalFlags::nothing);
192 result[i].old_flags.at(old_index) |= flag;
193 dependency_strings.erase(iter);
198 if (!dependency_strings.empty())
200 std::string error_message =
"The following dependencies were not recognized: ";
201 for (
const auto &dep : dependency_strings)
203 error_message += dep +
", ";
205 error_message.pop_back();
206 error_message.pop_back();
210 Assert(
false, dealii::ExcMessage(error_message));
Dependency(EvalFlags _flag=EvalFlags::nothing, EvalFlags _src_flag=EvalFlags::nothing, const std::vector< EvalFlags > &_old_flags={})
Construct with given flags.
Definition dependencies.h:52