32 #include "libmesh/getpot.h"
33 #include "libmesh/string_to_enum.h"
34 #include "libmesh/fem_system.h"
40 const std::string& physics_name,
41 const std::string& old_var_prefix,
42 const std::string& subsection,
43 const std::string& default_family,
44 const std::string& default_order,
45 bool _is_constraint_var )
48 _family.resize(1,libMesh::INVALID_FE);
49 _order.resize(1,libMesh::INVALID_ORDER);
60 libmesh_assert_not_equal_to(
_family[0], libMesh::INVALID_FE);
61 libmesh_assert_not_equal_to(
_order[0], libMesh::INVALID_ORDER);
65 const std::string& subsection,
66 bool _is_constraint_var)
69 _family.resize(1,libMesh::INVALID_FE);
70 _order.resize(1,libMesh::INVALID_ORDER);
74 libmesh_assert_not_equal_to(
_family[0], libMesh::INVALID_FE);
75 libmesh_assert_not_equal_to(
_order[0], libMesh::INVALID_ORDER);
81 libmesh_assert_equal_to(
_order.size(), 1);
82 libmesh_assert_equal_to(
_family.size(), 1);
87 for(
unsigned int v = 0; v < n_vars; v++ )
92 const std::string& physics_name,
93 const std::string& old_var_prefix,
94 const std::string& subsection,
95 std::vector<GRINSEnums::FEFamily>& family,
96 std::vector<GRINSEnums::Order>& order,
97 const std::string& default_family,
98 const std::string& default_order )
100 libmesh_assert_equal_to( family.size(), 1 );
101 libmesh_assert_equal_to( family.size(), order.size() );
111 std::string warning =
"WARNING: Could not find input for FE family and order for Variable "+subsection+
".\n";
112 warning +=
" Using default values: FEFamily = "+default_family+
", Order = "+default_order+
"\n";
113 warning +=
" THIS IS DEPRECATED. In the future, you explicitly specify these in your input file\n";
114 warning +=
" using: [Variables/"+subsection+
"/fe_family] and [Variables/"+subsection+
"/order].\n";
117 family[0] = libMesh::Utility::string_to_enum<GRINSEnums::FEFamily>(default_family);
118 order[0] = libMesh::Utility::string_to_enum<GRINSEnums::Order>(default_order);
126 if( input.have_variable(
"Physics/"+physics_name+
"/"+old_var_prefix+
"FE_family") ||
127 input.have_variable(
"Physics/"+physics_name+
"/"+old_var_prefix+
"order"))
130 subsection,family[0],order[0]);
133 else if( input.have_variable(
"Physics/"+physics_name+
"/FE_family") ||
134 input.have_variable(
"Physics/"+physics_name+
"/order"))
137 subsection,family[0],order[0]);
148 const std::string& physics_name,
149 const std::string& old_var_prefix,
150 const std::string& default_family,
151 const std::string& default_order,
152 const std::string& subsection,
153 GRINSEnums::FEFamily& family,
154 GRINSEnums::Order& order )
156 std::string warning =
"WARNING: Specifying Physics/"+physics_name+
"/"+old_var_prefix+
"FE_family and\n";
157 warning +=
" Physics/"+physics_name+
"/"+old_var_prefix+
"order is DEPRECATED! Please update and use\n";
158 warning +=
" [Variables/"+subsection+
"/fe_family] and [Variables/"+subsection+
"/order].\n";
161 std::string family_in = input(
"Variables/"+subsection+
"/fe_family", default_family );
162 std::string order_in = input(
"Variables/"+subsection+
"/order", default_order );
164 family = libMesh::Utility::string_to_enum<GRINSEnums::FEFamily>(family_in);
165 order = libMesh::Utility::string_to_enum<GRINSEnums::Order>(order_in);
169 const std::string& physics_name,
170 const std::string& old_var_prefix )
const
174 if( ( input.have_variable(
"Physics/"+physics_name+
"/FE_family") ||
175 input.have_variable(
"Physics/"+physics_name+
"/order") ||
176 input.have_variable(
"Physics/"+physics_name+
"/"+old_var_prefix+
"FE_family") ||
177 input.have_variable(
"Physics/"+physics_name+
"/"+old_var_prefix+
"order")) &&
178 input.have_section(
"Variables") )
179 libmesh_error_msg(
"ERROR: Cannot have a [Variables] section and deprecated FE_family/order input style!");
183 const std::string& subsection,
184 GRINSEnums::FEFamily& family,
185 GRINSEnums::Order& order )
188 if( !input.have_variable(
"Variables/"+subsection+
"/fe_family") )
189 libmesh_error_msg(
"ERROR: Could not find Variables/"+subsection+
"/fe_family in input!");
191 if( !input.have_variable(
"Variables/"+subsection+
"/order") )
192 libmesh_error_msg(
"ERROR: Could not find Variables/"+subsection+
"/order in input!");
194 std::string family_in = input(
"Variables/"+subsection+
"/fe_family",
"DIE!");
195 std::string order_in = input(
"Variables/"+subsection+
"/order",
"DIE!");
197 family = libMesh::Utility::string_to_enum<GRINSEnums::FEFamily>(family_in);
198 order = libMesh::Utility::string_to_enum<GRINSEnums::Order>(order_in);
202 const std::string& physics_name,
203 const std::string& old_var_prefix,
204 const std::string& subsection )
const
208 if( input.have_variable(
"Physics/"+physics_name+
"/FE_family") ||
209 input.have_variable(
"Physics/"+physics_name+
"/order") ||
210 input.have_variable(
"Physics/"+physics_name+
"/"+old_var_prefix+
"FE_family") ||
211 input.have_variable(
"Physics/"+physics_name+
"/"+old_var_prefix+
"order") ||
212 input.have_variable(
"Variables/"+subsection+
"/fe_family") ||
213 input.have_variable(
"Variables/"+subsection+
"/order") )
214 have_family_or_order =
true;
void dup_family_order_check(const GetPot &input, const std::string &physics_name, const std::string &old_var_prefix) const
Check (and error if true) for old and new style FEFamily/Order input.
std::vector< GRINSEnums::FEFamily > _family
std::vector< GRINSEnums::Order > _order
bool have_family_or_order(const GetPot &input, const std::string &physics_name, const std::string &old_var_prefix, const std::string &subsection) const
Check for no presence of FEFamily/Order input.
void parse_new_style(const GetPot &input, const std::string &subsection, GRINSEnums::FEFamily &family, GRINSEnums::Order &order)
#define grins_warning(message)
virtual void init(libMesh::FEMSystem *system)
Add variables to the system.
void parse_old_style_with_warning(const GetPot &input, const std::string &physics_name, const std::string &old_var_prefix, const std::string &default_family, const std::string &default_order, const std::string &subsection, GRINSEnums::FEFamily &family, GRINSEnums::Order &order)
SingleFETypeVariable(const GetPot &input, const std::string &physics_name, const std::string &old_var_prefix, const std::string &subsection, const std::string &default_family, const std::string &default_order, bool is_constraint_var)
Deprecated, old style constructor.
void parse_family_and_order(const GetPot &input, const std::string &physics_name, const std::string &old_var_prefix, const std::string &subsection, std::vector< GRINSEnums::FEFamily > &family, std::vector< GRINSEnums::Order > &order, const std::string &default_family, const std::string &default_order)
Helper function to parse FEFamily and Order.
std::vector< std::string > _var_names
std::vector< VariableIndex > _vars