Rheolef  7.2
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) ||
85  is_raw_polynomial_name(name) ||
86  name == "trace_n";
87 }
88 void
90 {
91  set_node (node_name2type (name));
92 }
93 void
95 {
96  set_raw_polynomial (raw_polynomial_name2type (name));
97 }
98 string
100 {
101  check_macro (_node >= 0 && _node <= max_node,
102  "unexpected space node number = " << _node);
103  return static_node_name[_node];
104 }
105 string
107 {
108  check_macro (_poly >= 0 && _poly <= max_raw_polynomial,
109  "unexpected space raw polynomial number = " << _poly);
110  return static_raw_polynomial_name[_poly];
111 }
112 void
113 basis_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 }
125 string
127 {
128  if (_node == default_node && _poly == default_raw_polynomial) {
129  return "";
130  }
131  string opt_trace = ""; // trace_n : arround as "trace(Pkd)"
132  if (_poly == default_raw_polynomial) {
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
bool is_raw_polynomial_name(std::string name) const
Definition: basis_option.cc:75
std::string get_raw_polynomial_name() const
std::string get_node_name() const
Definition: basis_option.cc:99
bool is_option_name(std::string name) const
Definition: basis_option.cc:82
std::string stamp() const
void set(std::string option_name)
void set_node(node_type type)
Definition: basis_option.h:257
bool is_node_name(std::string name) const
Definition: basis_option.cc:68
void set_raw_polynomial(raw_polynomial_type type)
Definition: basis_option.h:263
static const char * static_node_name[basis_option::max_node+1]
Definition: basis_option.cc:31
static const char * static_raw_polynomial_name[basis_option::max_raw_polynomial+1]
Definition: basis_option.cc:37
#define error_macro(message)
Definition: dis_macros.h:49
This file is part of Rheolef.