Rheolef  7.2
an efficient C++ finite element environment
 
Loading...
Searching...
No Matches
basis_option.cc
Go to the documentation of this file.
1
21//
22// author: Pierre.Saramito@imag.fr
23//
24// date: 2 september 2017
25//
26#include "basis_option.h"
27
28namespace rheolef {
29using namespace std;
30
32 "equispaced" ,
33 "warburton" ,
34 "fekete" ,
35 "undefined"
36};
38 "monomial" ,
39 "bernstein" ,
40 "dubiner" ,
41 "undefined"
42};
43static
45node_name2type (string name)
46{
47 for (size_t i = 0; i < basis_option::max_node; ++i) {
48 if (static_node_name[i] == name) {
49 return (basis_option::node_type) (i);
50 }
51 }
52 error_macro ("unexpected space node name `" << name << "'");
54}
55static
57raw_polynomial_name2type (string name)
58{
59 for (size_t i = 0; i < basis_option::max_raw_polynomial; ++i) {
60 if (static_raw_polynomial_name[i] == name) {
62 }
63 }
64 error_macro ("unexpected raw polynomial name `" << name << "'");
66}
67bool
68basis_option::is_node_name (std::string name) const
69{
70 for (size_t i = 0; i < basis_option::max_node; ++i)
71 if (static_node_name[i] == name) return true;
72 return false;
73}
74bool
76{
77 for (size_t i = 0; i < basis_option::max_raw_polynomial; ++i)
78 if (static_raw_polynomial_name[i] == name) return true;
79 return false;
80}
81bool
82basis_option::is_option_name (std::string name) const
83{
84 return is_node_name(name) ||
86 name == "trace_n";
87}
88void
90{
91 set_node (node_name2type (name));
92}
93void
95{
96 set_raw_polynomial (raw_polynomial_name2type (name));
97}
98string
100{
101 check_macro (_node >= 0 && _node <= max_node,
102 "unexpected space node number = " << _node);
103 return static_node_name[_node];
104}
105string
107{
109 "unexpected space raw polynomial number = " << _poly);
110 return static_raw_polynomial_name[_poly];
111}
112void
113basis_option::set (std::string option_name)
114{
115 if (is_node_name (option_name)) {
116 set_node (option_name);
117 } else if (is_raw_polynomial_name (option_name)) {
118 set_raw_polynomial (option_name);
119 } else if (option_name == "trace_n") {
120 set_trace_n();
121 } else {
122 error_macro ("unexpected option name `" << option_name << "'");
123 }
124}
125string
127{
129 return "";
130 }
131 string opt_trace = ""; // trace_n : arround as "trace(Pkd)"
133 return "[" + opt_trace + get_node_name() + "]";
134 }
135 if (_node == default_node) {
136 return "[" + opt_trace + get_raw_polynomial_name() + "]";
137 }
138 return "[" + opt_trace + get_node_name() + "," + get_raw_polynomial_name() + "]";
139}
140
141} // namespace rheolef
basis_option - finite element method options
raw_polynomial_type _poly
bool is_raw_polynomial_name(std::string name) const
std::string get_raw_polynomial_name() const
static const node_type default_node
void set_trace_n(bool r=true)
std::string get_node_name() const
static const raw_polynomial_type default_raw_polynomial
bool is_option_name(std::string name) const
std::string stamp() const
void set(std::string option_name)
void set_node(node_type type)
bool is_node_name(std::string name) const
void set_raw_polynomial(raw_polynomial_type type)
static const char * static_node_name[basis_option::max_node+1]
static const char * static_raw_polynomial_name[basis_option::max_raw_polynomial+1]
#define error_macro(message)
Definition dis_macros.h:49
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
This file is part of Rheolef.
STL namespace.