VertexCFD  0.0-dev
VertexCFD_GeneralScalarParameter_impl.hpp
1 #ifndef VERTEXCFD_GENERALSCALARPARAMETER_IMPL_HPP
2 #define VERTEXCFD_GENERALSCALARPARAMETER_IMPL_HPP
3 
4 namespace VertexCFD
5 {
6 namespace Parameter
7 {
8 //---------------------------------------------------------------------------//
9 template<class EvalType>
10 GeneralScalarParameter<EvalType>::GeneralScalarParameter(
11  const std::string& name, scalar_type& ref_to_parameter)
12  : _name(name)
13  , _ref_to_parameter(ref_to_parameter)
14 {
15 }
16 
17 //---------------------------------------------------------------------------//
18 template<class EvalType>
19 const std::string& GeneralScalarParameter<EvalType>::name() const
20 {
21  return _name;
22 }
23 
24 //---------------------------------------------------------------------------//
25 template<class EvalType>
26 void GeneralScalarParameter<EvalType>::update(
27  const panzer::Workset& workset,
28  const std::unordered_map<std::string, std::unordered_map<std::string, double>>&
29  general_scalar_params)
30 {
31  // Lookup parameter values.
32  auto param_values = general_scalar_params.find(_name);
33  if (param_values == general_scalar_params.end())
34  {
35  const std::string msg = "GeneralScalar parameter " + _name
36  + " not found";
37  throw std::runtime_error(msg);
38  }
39 
40  // Check to see if this is an element block we have a value for.
41  auto block_name = workset.getElementBlock();
42  auto block_value = param_values->second.find(block_name);
43 
44  // If the block is in the parameter list assign the value.
45  if (block_value != param_values->second.end())
46  {
47  _ref_to_parameter = block_value->second;
48  }
49 
50  // Othwerwise just assign the default as this block wasn't given a
51  // specific value.
52  else
53  {
54  auto default_value = param_values->second.find("Default Value");
55  if (default_value != param_values->second.end())
56  {
57  _ref_to_parameter = default_value->second;
58  }
59  else
60  {
61  const std::string msg = "GeneralScalar parameter " + _name
62  + " does not have a value for block "
63  + block_name
64  + " and is also missing a default value";
65  throw std::runtime_error(msg);
66  }
67  }
68 }
69 
70 //---------------------------------------------------------------------------//
71 
72 } // end namespace Parameter
73 } // end namespace VertexCFD
74 
75 #endif // end VERTEXCFD_GENERALSCALARPARAMETER_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23