GRINS-0.6.0
Public Member Functions | Protected Types | Protected Attributes | List of all members
GRINS::GenericICHandler Class Reference

Base class for reading and handling initial conditions for physics classes. More...

#include <generic_ic_handler.h>

Inheritance diagram for GRINS::GenericICHandler:
Inheritance graph
[legend]
Collaboration diagram for GRINS::GenericICHandler:
Collaboration graph
[legend]

Public Member Functions

 GenericICHandler (const std::string &physics_name, const GetPot &input)
 
virtual ~GenericICHandler ()
 
void attach_initial_func (const libMesh::FunctionBase< libMesh::Number > &initial_val)
 
virtual void read_ic_data (const GetPot &input, const std::string &id_str, const std::string &ic_str, const std::string &var_str, const std::string &value_str)
 
virtual void init_ic_data (const libMesh::FEMSystem &system, libMesh::CompositeFunction< libMesh::Number > &all_ics)
 Override this method to initialize any system-dependent data. More...
 
virtual int string_to_int (const std::string &bc_type_in) const
 
virtual void init_ic_types (const libMesh::subdomain_id_type ic_id, const std::string &ic_id_string, const int ic_type, const std::string &ic_vars_string, const std::string &ic_value_string, const GetPot &input)
 
libMesh::FunctionBase< libMesh::Number > * get_ic_func () const
 

Protected Types

enum  IC_BASE { PARSED = -2, CONSTANT }
 

Protected Attributes

libMesh::AutoPtr< libMesh::FunctionBase< libMesh::Number > > _ic_func
 
std::string _physics_name
 
std::vector< std::string > _subfunction_variables
 

Detailed Description

Base class for reading and handling initial conditions for physics classes.

Definition at line 44 of file generic_ic_handler.h.

Member Enumeration Documentation

enum GRINS::ICHandlingBase::IC_BASE
protectedinherited
Enumerator
PARSED 
CONSTANT 

Definition at line 90 of file ic_handling_base.h.

Constructor & Destructor Documentation

GRINS::GenericICHandler::GenericICHandler ( const std::string &  physics_name,
const GetPot &  input 
)

Definition at line 52 of file generic_ic_handler.C.

References GRINS::ICHandlingBase::_physics_name, and GRINS::ICHandlingBase::read_ic_data().

54  : ICHandlingBase( physics_name )
55  {
56  std::string id_str = "Physics/"+_physics_name+"/ic_ids";
57  std::string bc_str = "Physics/"+_physics_name+"/ic_types";
58  std::string var_str = "Physics/"+_physics_name+"/ic_variables";
59  std::string val_str = "Physics/"+_physics_name+"/ic_values";
60 
61  this->read_ic_data( input, id_str, bc_str, var_str, val_str );
62 
63  return;
64  }
ICHandlingBase(const std::string &physics_name)
virtual void read_ic_data(const GetPot &input, const std::string &id_str, const std::string &ic_str, const std::string &var_str, const std::string &value_str)
GRINS::GenericICHandler::~GenericICHandler ( )
virtual

Definition at line 66 of file generic_ic_handler.C.

67  {
68  return;
69  }

Member Function Documentation

void GRINS::ICHandlingBase::attach_initial_func ( const libMesh::FunctionBase< libMesh::Number > &  initial_val)
inherited

Definition at line 65 of file ic_handling_base.C.

66  {
67  _ic_func = initial_val.clone();
68  }
libMesh::AutoPtr< libMesh::FunctionBase< libMesh::Number > > _ic_func
libMesh::FunctionBase< libMesh::Number > * GRINS::ICHandlingBase::get_ic_func ( ) const
inlineinherited

Definition at line 99 of file ic_handling_base.h.

References GRINS::ICHandlingBase::_ic_func.

Referenced by GRINS::ICHandlingBase::init_ic_data().

100  {
101  return _ic_func.get();
102  }
libMesh::AutoPtr< libMesh::FunctionBase< libMesh::Number > > _ic_func
void GRINS::ICHandlingBase::init_ic_data ( const libMesh::FEMSystem &  system,
libMesh::CompositeFunction< libMesh::Number > &  all_ics 
)
virtualinherited

Override this method to initialize any system-dependent data.

Override this method to, for example, cache a System variable number.

Definition at line 129 of file ic_handling_base.C.

References GRINS::ICHandlingBase::_subfunction_variables, and GRINS::ICHandlingBase::get_ic_func().

Referenced by GRINS::Physics::init_ics().

131  {
132  if (this->get_ic_func())
133  {
134  std::vector<unsigned int> index_map;
135 
136  libmesh_assert(_subfunction_variables.size());
137 
138  for (unsigned int i=0; i != _subfunction_variables.size();
139  ++i)
140  index_map.push_back
141  (system.variable_number(_subfunction_variables[i]));
142 
143  all_ics.attach_subfunction(*this->get_ic_func(), index_map);
144  }
145  }
libMesh::FunctionBase< libMesh::Number > * get_ic_func() const
std::vector< std::string > _subfunction_variables
void GRINS::ICHandlingBase::init_ic_types ( const libMesh::subdomain_id_type  ic_id,
const std::string &  ic_id_string,
const int  ic_type,
const std::string &  ic_vars_string,
const std::string &  ic_value_string,
const GetPot &  input 
)
virtualinherited

Definition at line 169 of file ic_handling_base.C.

References GRINS::ICHandlingBase::_ic_func, GRINS::ICHandlingBase::_physics_name, GRINS::ICHandlingBase::_subfunction_variables, GRINS::ICHandlingBase::CONSTANT, GRINS::ICHandlingBase::PARSED, and GRINS::StringUtilities::split_string().

Referenced by GRINS::ICHandlingBase::read_ic_data().

175  {
177 
178  libmesh_assert(_subfunction_variables.size());
179 
180  switch(ic_type)
181  {
182  case(PARSED):
183  {
184  _ic_func = libMesh::AutoPtr<libMesh::FunctionBase<libMesh::Number> >
185  (new libMesh::ParsedFunction<libMesh::Number>(ic_value_string));
186  }
187  break;
188 
189  case(CONSTANT):
190  {
191  _ic_func = libMesh::AutoPtr<libMesh::FunctionBase<libMesh::Number> >
192  (new libMesh::ConstFunction<libMesh::Number>
193  (StringUtilities::string_to_T<libMesh::Number>(ic_value_string)));
194  }
195  break;
196 
197  default:
198  {
199  std::cerr << "=========================================================="
200  << "Error: Invalid IC type for " << _physics_name << std::endl
201  << " Detected IC type was " << ic_type << std::endl
202  << "==========================================================" << std::endl;
203  libmesh_error();
204  }
205  }
206  return;
207  }
libMesh::AutoPtr< libMesh::FunctionBase< libMesh::Number > > _ic_func
std::vector< std::string > _subfunction_variables
void split_string(const std::string &input, const std::string &delimiter, std::vector< std::string > &results)
Definition: string_utils.C:31
void GRINS::ICHandlingBase::read_ic_data ( const GetPot &  input,
const std::string &  id_str,
const std::string &  ic_str,
const std::string &  var_str,
const std::string &  value_str 
)
virtualinherited

Definition at line 70 of file ic_handling_base.C.

References GRINS::ICHandlingBase::init_ic_types(), and GRINS::ICHandlingBase::string_to_int().

Referenced by GenericICHandler().

74  {
75  int num_ids = input.vector_variable_size(id_str);
76  int num_ics = input.vector_variable_size(ic_str);
77  int num_vars = input.vector_variable_size(var_str);
78  int num_values = input.vector_variable_size(value_str);
79 
80  if( num_ids != num_ics )
81  {
82  std::cerr << "Error: number of subdomain ids " << num_ids
83  << "must equal number of initial condition types " << num_ics
84  << std::endl;
85  libmesh_error();
86  }
87 
88  if( num_ids != num_vars )
89  {
90  std::cerr << "Error: number of subdomain ids " << num_ids
91  << "must equal number of variable name lists " << num_vars
92  << std::endl;
93  libmesh_error();
94  }
95 
96  if( num_ids != num_values )
97  {
98  std::cerr << "Error: number of subdomain ids " << num_ids
99  << "must equal number of initial condition values " << num_values
100  << std::endl;
101  libmesh_error();
102  }
103 
104  if( num_ids > 1 )
105  {
106  std::cerr << "Error: GRINS does not yet support per-subdomain initial conditions" << std::endl;
107  libmesh_not_implemented();
108  }
109 
110  for( int i = 0; i < num_ids; i++ )
111  {
112  int ic_id = input(id_str, -1, i );
113  std::string ic_type_in = input(ic_str, "NULL", i );
114  std::string ic_value_in = input(value_str, "NULL", i );
115  std::string ic_vars_in = input(var_str, "NULL", i );
116 
117  int ic_type = this->string_to_int( ic_type_in );
118 
119  std::stringstream ss;
120  ss << ic_id;
121  std::string ic_id_string = ss.str();
122 
123  this->init_ic_types( ic_id, ic_id_string, ic_type, ic_vars_in, ic_value_in, input );
124  }
125 
126  return;
127  }
virtual void init_ic_types(const libMesh::subdomain_id_type ic_id, const std::string &ic_id_string, const int ic_type, const std::string &ic_vars_string, const std::string &ic_value_string, const GetPot &input)
virtual int string_to_int(const std::string &bc_type_in) const
int GRINS::ICHandlingBase::string_to_int ( const std::string &  bc_type_in) const
virtualinherited

Definition at line 147 of file ic_handling_base.C.

References GRINS::ICHandlingBase::_physics_name, GRINS::ICHandlingBase::CONSTANT, and GRINS::ICHandlingBase::PARSED.

Referenced by GRINS::ICHandlingBase::read_ic_data().

148  {
149  int ic_type_out;
150  if( ic_type_in == "parsed" )
151  {
152  ic_type_out = PARSED;
153  }
154  else if( ic_type_in == "constant" )
155  {
156  ic_type_out = CONSTANT;
157  }
158  else
159  {
160  std::cerr << "==========================================================" << std::endl
161  << "Error: Invalid ic_type " << ic_type_in << std::endl
162  << " Physics class is " << _physics_name << std::endl
163  << "==========================================================" << std::endl;
164  libmesh_error();
165  }
166  return ic_type_out;
167  }

Member Data Documentation

libMesh::AutoPtr<libMesh::FunctionBase<libMesh::Number> > GRINS::ICHandlingBase::_ic_func
protectedinherited
std::string GRINS::ICHandlingBase::_physics_name
protectedinherited
std::vector<std::string> GRINS::ICHandlingBase::_subfunction_variables
protectedinherited

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

Generated on Mon Jun 22 2015 21:32:22 for GRINS-0.6.0 by  doxygen 1.8.9.1