26 std::vector<std::string>
27 get_unique_component_names(
const std::vector<std::string> &component_names)
29 auto elements = component_names;
30 elements.erase(std::unique(elements.begin(), elements.end()),
37 std::vector<ComponentMask>
38 get_unique_component_masks(
const std::vector<std::string> &component_names)
40 const auto unique_component_names =
41 get_unique_component_names(component_names);
43 std::vector<ComponentMask> masks;
45 std::vector<std::vector<bool>> bools(
46 unique_component_names.size(),
47 std::vector<bool>(component_names.size(),
false));
50 for (
unsigned int i = 0; i < component_names.size(); ++i)
52 if (unique_component_names[j] != component_names[i])
53 masks.emplace_back(bools[j++]);
56 masks.emplace_back(bools[j++]);
65 const std::vector<std::string> &solution_names,
66 const std::vector<std::set<VectorTools::NormType>> &list_of_error_norms)
72 "reduction_rate_log2",
81 const std::vector<std::string> &component_names,
82 const std::vector<std::set<VectorTools::NormType>> &list_of_error_norms,
83 const double exponent,
84 const std::set<std::string> &extra_columns,
85 const std::string &rate_key,
86 const std::string &rate_mode,
87 const std::string &error_file_name,
88 const unsigned int precision,
89 const bool compute_error)
90 : component_names(component_names)
91 , unique_component_names(get_unique_component_names(component_names))
92 , unique_component_masks(get_unique_component_masks(component_names))
93 , norms_per_unique_component(list_of_error_norms)
95 , extra_columns(extra_columns)
97 , rate_mode(rate_mode)
98 , precision(precision)
99 , error_file_name(error_file_name)
100 , compute_error(compute_error)
113 "When set to false, no computations are performed.");
117 "Number of digits to use when printing the error.",
122 "Set this to a filename with extension .txt, .gpl, .org, "
123 "or .tex to enable writing the convergence table to a "
127 "List of error norms to compute",
129 "Each component is separated by a semicolon "
130 "and each norm by a comma. See the documentation of VectorTools::NormType "
131 "for a list of implemented norms. If you want to skip a component, leave "
137 "The exponent to use when computing p-norms.",
142 "Extra columns to add to the table. Available options "
143 "are dofs and cells.",
148 "Key to use when computing convergence rates. If "
149 "this is set to a column that is not present, or to the "
150 "empty string, then no error rates are computed.");
154 "What type of error rate to compute. Available options are "
155 "reduction_rate_log2, reduction_rate, and none.",
157 "reduction_rate|reduction_rate_log2|none"));
170 bool has_key =
false;
181 if (extra_col.second.second ==
false)
206 "You specified the key <" +
rate_key +
207 "> to compute convergence rates, but that key does "
208 "not exist in the current table."));
236 const std::string error_file_format =
241 if (error_file_format ==
"tex")
243 else if (error_file_format ==
"txt")
245 else if (error_file_format ==
"gpl")
248 else if (error_file_format ==
"org")
264 const std::string &column_name,
265 const std::function<
double()> &custom_function,
266 const bool compute_rate)
void evaluate_all_convergence_rates(const std::string &reference_column_key, const RateMode rate_mode)
void omit_column_from_convergence_rate_evaluation(const std::string &key)
void add_parameter(const std::string &entry, ParameterType ¶meter, const std::string &documentation="", const Patterns::PatternBase &pattern= *Patterns::Tools::Convert< ParameterType >::to_pattern(), const bool has_to_be_set=false)
The ParsedConvergenceTable class.
void add_extra_column(const std::string &column_name, const std::function< double()> &custom_function, const bool compute_rate=true)
void add_parameters(ParameterHandler &prm)
std::string error_file_name
void prepare_table_for_output()
std::set< std::string > extra_columns
ParsedConvergenceTable(const std::vector< std::string > &component_names={"u"}, const std::vector< std::set< VectorTools::NormType > > &list_of_error_norms={ {VectorTools::H1_norm, VectorTools::L2_norm, VectorTools::Linfty_norm}})
const std::vector< std::string > unique_component_names
std::vector< std::set< VectorTools::NormType > > norms_per_unique_component
std::map< std::string, std::pair< std::function< double()>, bool > > extra_column_functions
void write_text(std::ostream &out, const TextOutputFormat format=table_with_headers) const
@ table_with_separate_column_description
void write_tex(std::ostream &file, const bool with_header=true) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)