1 #ifndef VERTEXCFD_UTILS_SCALARTOVECTOR_HPP
2 #define VERTEXCFD_UTILS_SCALARTOVECTOR_HPP
4 #include <Panzer_Dimension.hpp>
5 #include <Panzer_Evaluator_WithBaseImpl.hpp>
6 #include <Panzer_IntegrationRule.hpp>
7 #include <Panzer_Traits.hpp>
9 #include <Teuchos_RCP.hpp>
11 #include <Phalanx_DataLayout.hpp>
12 #include <Phalanx_Evaluator_Derived.hpp>
13 #include <Phalanx_MDField.hpp>
24 template<
typename EvalType,
typename NewTag>
26 public PHX::EvaluatorDerived<EvalType, panzer::Traits>
31 static auto createFromIndexed(
const panzer::IntegrationRule& ir,
32 const std::string& vector_name,
33 const int num_scalars,
34 const bool time_deriv,
42 static auto createFromSuffixed(
43 const panzer::IntegrationRule& ir,
44 const std::string& vector_name,
45 const std::vector<std::optional<std::string>>& scalar_suffixes,
46 const bool time_deriv,
50 static auto createFromList(
const panzer::IntegrationRule& ir,
51 const std::string& vector_name,
52 const std::vector<std::string>& num_scalars,
53 const bool time_deriv,
56 void evaluateFields(
typename panzer::Traits::EvalData)
override;
60 using VecOpt = std::vector<std::optional<T>>;
64 const std::string& vector_name,
65 const VecOpt<std::string>& scalar_names,
66 const bool time_deriv,
69 using ScalarT =
typename EvalType::ScalarT;
72 template<
typename... ScalarTags>
74 addFields(
const char* prefix,
75 PHX::MDField<ScalarT, ScalarTags..., NewTag>& vector_field,
76 VecOpt<PHX::MDField<const ScalarT, ScalarTags...>>& scalar_fields,
77 const Teuchos::RCP<PHX::DataLayout>& scalar_layout);
80 template<
typename... ScalarTags>
82 PHX::MDField<ScalarT, ScalarTags..., NewTag>& vector_field,
83 VecOpt<PHX::MDField<const ScalarT, ScalarTags...>>& scalar_fields);
85 const std::string _vector_name;
86 const VecOpt<std::string> _scalar_names;
89 VecOpt<PHX::MDField<const ScalarT, panzer::Cell, panzer::Point>> _scalar_fields;
90 VecOpt<PHX::MDField<const ScalarT, panzer::Cell, panzer::Point>>
92 VecOpt<PHX::MDField<const ScalarT, panzer::Cell, panzer::Point, panzer::Dim>>
97 PHX::MDField<ScalarT, panzer::Cell, panzer::Point, NewTag> _vector_field;
98 PHX::MDField<ScalarT, panzer::Cell, panzer::Point, NewTag> _vector_dxdt_field;
99 PHX::MDField<ScalarT, panzer::Cell, panzer::Point, panzer::Dim, NewTag>
107 #include "VertexCFD_Utils_ScalarToVector_impl.hpp"
109 #endif // VERTEXCFD_UTILS_SCALARTOVECTOR_HPP