GRINS-0.7.0
List of all members | Public Member Functions | Static Public Member Functions | Static Protected Member Functions
GRINS::GRINSPrivate::VariableWarehouse Class Reference

Track what FEVariablesBase objects have been created. More...

#include <variable_warehouse.h>

Public Member Functions

 VariableWarehouse ()
 
 ~VariableWarehouse ()
 

Static Public Member Functions

static bool is_registered (const std::string &var_name)
 Check if variable is registered. More...
 
static void check_and_register_variable (const std::string &var_name, const FEVariablesBase &variable)
 First check if var_name is registered and then register. More...
 
static void register_variable (const std::string &var_name, const FEVariablesBase &variable)
 
static const FEVariablesBaseget_variable (const std::string &var_name)
 
template<typename DerivedType >
static const DerivedType & get_variable_subclass (const std::string &var_name)
 
static void clear ()
 Clears the var_map() More...
 

Static Protected Member Functions

static std::map< std::string, const FEVariablesBase * > & var_map ()
 

Detailed Description

Track what FEVariablesBase objects have been created.

Several modules need to interact with the Variables in use. So, this object creates a place to register a Variable class.

Todo:
Currently, we only allow only unique variable types. This will change in the future once we allow per-subdomain variables. Hence, we have this in GRINSPrivate since the API may change in the future.

Definition at line 49 of file variable_warehouse.h.

Constructor & Destructor Documentation

GRINS::GRINSPrivate::VariableWarehouse::VariableWarehouse ( )
inline

Definition at line 52 of file variable_warehouse.h.

52 {};
GRINS::GRINSPrivate::VariableWarehouse::~VariableWarehouse ( )
inline

Definition at line 54 of file variable_warehouse.h.

54 {};

Member Function Documentation

void GRINS::GRINSPrivate::VariableWarehouse::check_and_register_variable ( const std::string &  var_name,
const FEVariablesBase variable 
)
inlinestatic

First check if var_name is registered and then register.

Use this API if you may be attempting to register the same variable more than once.

Definition at line 98 of file variable_warehouse.h.

References is_registered(), and register_variable().

Referenced by GRINS::ConvectionDiffusion::ConvectionDiffusion(), GRINS::SolidMechanicsAbstract::register_variables(), GRINS::HeatConduction< Conductivity >::register_variables(), GRINS::BoussinesqBuoyancyBase::register_variables(), GRINS::HeatTransferBase< Conductivity >::register_variables(), GRINS::IncompressibleNavierStokesBase< Viscosity >::register_variables(), GRINS::AxisymmetricBoussinesqBuoyancy::register_variables(), GRINS::ReactingLowMachNavierStokesAbstract::register_variables(), GRINS::AxisymmetricHeatTransfer< Conductivity >::register_variables(), GRINS::SpalartAllmaras< Viscosity >::register_variables(), GRINS::LowMachNavierStokesBase< Viscosity, SpecificHeat, ThermalConductivity >::register_variables(), and GRINSTesting::VariablesTest::test_var_constraint_and_warehouse().

100  {
101  if( !VariableWarehouse::is_registered(var_name) )
102  VariableWarehouse::register_variable(var_name,variable);
103  }
static void register_variable(const std::string &var_name, const FEVariablesBase &variable)
static bool is_registered(const std::string &var_name)
Check if variable is registered.
static void GRINS::GRINSPrivate::VariableWarehouse::clear ( )
inlinestatic

Clears the var_map()

Definition at line 81 of file variable_warehouse.h.

References var_map().

Referenced by GRINSTesting::VariablesTest::test_var_constraint_and_warehouse().

82  { var_map().clear(); }
static std::map< std::string, const FEVariablesBase * > & var_map()
const FEVariablesBase & GRINS::GRINSPrivate::VariableWarehouse::get_variable ( const std::string &  var_name)
inlinestatic

Definition at line 116 of file variable_warehouse.h.

References is_registered(), and var_map().

Referenced by GRINS::DefaultBCBuilder::build_axisymmetric_bcs(), GRINS::DefaultBCBuilder::build_bcs_by_var_section(), GRINS::OldStyleBCBuilder::determine_variable_group(), GRINS::CatalyticWallNeumannBCFactoryCommon< ImplType >::extract_temp_var(), get_variable_subclass(), and GRINSTesting::VariablesTest::test_var_constraint_and_warehouse().

117  {
118  if( !VariableWarehouse::is_registered(var_name) )
119  libmesh_error_msg("ERROR: Could not find FEVariable "+var_name+"!");
120 
121  const FEVariablesBase* var_ptr = var_map()[var_name];
122 
123  if( !var_ptr )
124  libmesh_error_msg("ERROR: FEVariable "+var_name+" is an invalid pointer!");
125 
126  return *var_ptr;
127  }
static std::map< std::string, const FEVariablesBase * > & var_map()
static bool is_registered(const std::string &var_name)
Check if variable is registered.
template<typename DerivedType >
static const DerivedType& GRINS::GRINSPrivate::VariableWarehouse::get_variable_subclass ( const std::string &  var_name)
inlinestatic

Definition at line 71 of file variable_warehouse.h.

References get_variable().

72  {
73  const FEVariablesBase& var_base = VariableWarehouse::get_variable(var_name);
74 
75  const DerivedType& derived_var = libMesh::cast_ref<const DerivedType&>( var_base);
76 
77  return derived_var;
78  }
static const FEVariablesBase & get_variable(const std::string &var_name)
bool GRINS::GRINSPrivate::VariableWarehouse::is_registered ( const std::string &  var_name)
inlinestatic

Check if variable is registered.

Definition at line 91 of file variable_warehouse.h.

References var_map().

Referenced by check_and_register_variable(), get_variable(), and register_variable().

92  {
93  bool var_found = (var_map().find(var_name) != var_map().end() );
94  return var_found;
95  }
static std::map< std::string, const FEVariablesBase * > & var_map()
void GRINS::GRINSPrivate::VariableWarehouse::register_variable ( const std::string &  var_name,
const FEVariablesBase variable 
)
inlinestatic

Definition at line 106 of file variable_warehouse.h.

References is_registered(), and var_map().

Referenced by check_and_register_variable(), and GRINSTesting::VariablesTest::test_var_constraint_and_warehouse().

108  {
109  if( VariableWarehouse::is_registered(var_name) )
110  libmesh_error_msg("ERROR: Duplicate FEVariable registration not allowed!");
111 
112  var_map()[var_name] = &variable;
113  }
static std::map< std::string, const FEVariablesBase * > & var_map()
static bool is_registered(const std::string &var_name)
Check if variable is registered.
std::map< std::string, const FEVariablesBase * > & GRINS::GRINSPrivate::VariableWarehouse::var_map ( )
staticprotected

Definition at line 32 of file variable_warehouse.C.

Referenced by clear(), get_variable(), is_registered(), and register_variable().

33  {
34  static std::map<std::string, const FEVariablesBase*> _var_map;
35  return _var_map;
36  }

The documentation for this class was generated from the following files:

Generated on Thu Jun 2 2016 21:52:33 for GRINS-0.7.0 by  doxygen 1.8.10