VertexCFD  0.0-dev
VertexCFD_ScalarParameterObserver_impl.hpp
1 #ifndef VERTEXCFD_SCALARPARAMETEROBSERVER_IMPL_HPP
2 #define VERTEXCFD_SCALARPARAMETEROBSERVER_IMPL_HPP
3 
4 #include "VertexCFD_GeneralScalarParameterInput.hpp"
5 #include "VertexCFD_ScalarParameterInput.hpp"
6 
7 namespace VertexCFD
8 {
9 namespace Parameter
10 {
11 //---------------------------------------------------------------------------//
12 template<class EvalType>
13 void ScalarParameterObserver<EvalType>::registerParameter(
14  const std::string& name,
15  const double default_value,
16  const Teuchos::ParameterList& plist,
17  scalar_type& ref_to_parameter)
18 {
19  // Sensitivity Parameter
20  // General Parameter
21 
22  // Sensitivity scalar parameter. Initially assign the default
23  // value. Parameterized values will get assigned during update(),
24  // including those nominal values set in the input file. Sensitivity
25  // scalar parameters have:
26  //
27  // nominal value: provided by user, applied when model is not being
28  // parameterized w.r.t. given parameter
29  //
30  // default value: provided by developer, applied when the user
31  // doesn't specify the parameter in any way
32  if (plist.isType<ScalarParameterInput>(name))
33  {
34  auto param_input = plist.get<ScalarParameterInput>(name);
35  _scalar_parameters.emplace_back(param_input.parameter_name,
36  ref_to_parameter);
37  ref_to_parameter = default_value;
38  }
39 
40  // General scalar parameter. A default value is provided to use for all
41  // blocks that aren't given their own parameter value. Block parameter
42  // values will get assigned during update(), including those default
43  // values set in the input file. General scalar parameters have:
44  //
45  // block value: provided by user, applied on the given block
46  //
47  // default value; provided by user, applied when no block value is
48  // given for a block
49  //
50  // default value: provided by developer, applied when the user
51  // doesn't specify the parameter in any way
52  else if (plist.isType<GeneralScalarParameterInput>(name))
53  {
54  auto param_input = plist.get<GeneralScalarParameterInput>(name);
55  _general_parameters.emplace_back(param_input.parameter_name,
56  ref_to_parameter);
57  ref_to_parameter = default_value;
58  }
59 
60  // Check for local parameter.
61  else if (plist.isType<double>(name))
62  {
63  ref_to_parameter = plist.get<double>(name);
64  }
65 
66  // Otherwise treat as local parameter and set default.
67  else
68  {
69  ref_to_parameter = default_value;
70  }
71 }
72 
73 //---------------------------------------------------------------------------//
74 template<class EvalType>
75 void ScalarParameterObserver<EvalType>::update(
76  const panzer::GlobalData& global_data,
77  const panzer::Workset& workset,
78  const std::unordered_map<std::string, std::unordered_map<std::string, double>>&
79  general_parameter_data)
80 {
81  for (auto& p : _scalar_parameters)
82  {
83  p.update(global_data);
84  }
85  for (auto& p : _general_parameters)
86  {
87  p.update(workset, general_parameter_data);
88  }
89  this->updateStateWithNewParameters();
90 }
91 
92 //---------------------------------------------------------------------------//
93 
94 } // namespace Parameter
95 } // namespace VertexCFD
96 
97 #endif // end VERTEXCFD_SCALARPARAMETEROBSERVER_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23