Rheolef  7.1
an efficient C++ finite element environment
basis_option.cc
Go to the documentation of this file.
1 //
22 // author: Pierre.Saramito@imag.fr
23 //
24 // date: 2 september 2017
25 //
26 #include "basis_option.h"
27 
28 namespace rheolef {
29 using namespace std;
30 
31 static const char* static_node_name[basis_option::max_node+1] = {
32  "equispaced" ,
33  "warburton" ,
34  "fekete" ,
35  "undefined"
36 };
38  "monomial" ,
39  "bernstein" ,
40  "dubiner" ,
41  "undefined"
42 };
43 static
45 node_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 }
55 static
57 raw_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 }
67 bool
68 basis_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 }
74 bool
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 }
81 bool
83 {
84  return is_node_name(name) || is_raw_polynomial_name(name) || name == "sides";
85 }
86 void
88 {
89  set_node (node_name2type (name));
90 }
91 void
93 {
94  set_raw_polynomial (raw_polynomial_name2type (name));
95 }
96 string
98 {
99  check_macro (_node >= 0 && _node <= max_node,
100  "unexpected space node number = " << _node);
101  return static_node_name[_node];
102 }
103 string
105 {
106  check_macro (_poly >= 0 && _poly <= max_raw_polynomial,
107  "unexpected space raw polynomial number = " << _poly);
108  return static_raw_polynomial_name[_poly];
109 }
110 void
111 basis_option::set (std::string option_name)
112 {
113  if (is_node_name (option_name)) {
114  set_node (option_name);
115  } else if (is_raw_polynomial_name (option_name)) {
116  set_raw_polynomial (option_name);
117  } else if (option_name == "sides") {
118  set_restricted_to_sides();
119  } else {
120  error_macro ("unexpected option name `" << option_name << "'");
121  }
122 }
123 string
125 {
126  if (_node == default_node && _poly == default_raw_polynomial) {
127  return "";
128  }
129 #ifdef TO_CLEAN
130  if (_node == default_node && _poly == default_raw_polynomial && !is_restricted_to_sides()) {
131  return "";
132  }
133  if (_node == default_node && _poly == default_raw_polynomial) {
134  return "[sides]";
135  }
136  string opt_sides = is_restricted_to_sides() ? "sides," : "";
137 #endif // TO_CLEAN
138  string opt_sides = "";
139  if (_poly == default_raw_polynomial) {
140  return "[" + opt_sides + get_node_name() + "]";
141  }
142  if (_node == default_node) {
143  return "[" + opt_sides + get_raw_polynomial_name() + "]";
144  }
145  return "[" + opt_sides + get_node_name() + "," + get_raw_polynomial_name() + "]";
146 }
147 
148 } // namespace rheolef
rheolef::basis_option::raw_polynomial_type
raw_polynomial_type
Definition: basis_option.h:108
rheolef::basis_option::set
void set(std::string option_name)
Definition: basis_option.cc:111
rheolef::basis_option::set_raw_polynomial
void set_raw_polynomial(raw_polynomial_type type)
Definition: basis_option.h:263
rheolef::basis_option::stamp
std::string stamp() const
Definition: basis_option.cc:124
rheolef::basis_option::node_type
node_type
Definition: basis_option.h:101
rheolef::basis_option::set_node
void set_node(node_type type)
Definition: basis_option.h:257
rheolef::static_raw_polynomial_name
static const char * static_raw_polynomial_name[basis_option::max_raw_polynomial+1]
Definition: basis_option.cc:37
rheolef::basis_option::is_option_name
bool is_option_name(std::string name) const
Definition: basis_option.cc:82
rheolef::basis_option::get_node_name
std::string get_node_name() const
Definition: basis_option.cc:97
basis_option.h
basis_option - finite element method options
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
error_macro
#define error_macro(message)
Definition: dis_macros.h:49
rheolef::basis_option::is_raw_polynomial_name
bool is_raw_polynomial_name(std::string name) const
Definition: basis_option.cc:75
rheolef::basis_option::is_node_name
bool is_node_name(std::string name) const
Definition: basis_option.cc:68
rheolef::basis_option::max_raw_polynomial
@ max_raw_polynomial
Definition: basis_option.h:112
rheolef::static_node_name
static const char * static_node_name[basis_option::max_node+1]
Definition: basis_option.cc:31
mkgeo_contraction.name
string name
Definition: mkgeo_contraction.sh:133
rheolef::basis_option::max_node
@ max_node
Definition: basis_option.h:105
rheolef::basis_option::get_raw_polynomial_name
std::string get_raw_polynomial_name() const
Definition: basis_option.cc:104