VertexCFD  0.0-dev
VertexCFD_Closure_IncompressibleSUPGFlux.hpp
1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLESUPGFLUX_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLESUPGFLUX_HPP
3 
4 #include <Panzer_Dimension.hpp>
5 #include <Panzer_Evaluator_WithBaseImpl.hpp>
6 
7 #include <Phalanx_Evaluator_Derived.hpp>
8 #include <Phalanx_Evaluator_WithBaseImpl.hpp>
9 #include <Phalanx_FieldManager.hpp>
10 #include <Phalanx_config.hpp>
11 
12 #include <Kokkos_Core.hpp>
13 
14 #include <string>
15 
16 namespace VertexCFD
17 {
18 namespace ClosureModel
19 {
20 //---------------------------------------------------------------------------//
21 // Multi-dimension SUPG flux evaluation.
22 //---------------------------------------------------------------------------//
23 template<class EvalType, class Traits, int NumSpaceDim>
24 class IncompressibleSUPGFlux : public panzer::EvaluatorWithBaseImpl<Traits>,
25  public PHX::EvaluatorDerived<EvalType, Traits>
26 {
27  public:
28  using scalar_type = typename EvalType::ScalarT;
29  static constexpr int num_space_dim = NumSpaceDim;
30 
31  IncompressibleSUPGFlux(const panzer::IntegrationRule& ir,
32  const Teuchos::ParameterList& fluid_params,
33  const Teuchos::ParameterList& closure_params);
34 
35  void evaluateFields(typename Traits::EvalData workset) override;
36 
37  KOKKOS_INLINE_FUNCTION
38  void operator()(
39  const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team) const;
40 
41  PHX::MDField<scalar_type, panzer::Cell, panzer::Point, panzer::Dim>
42  _continuity_flux;
43  PHX::MDField<scalar_type, panzer::Cell, panzer::Point, panzer::Dim>
44  _energy_flux;
45  Kokkos::Array<
46  PHX::MDField<scalar_type, panzer::Cell, panzer::Point, panzer::Dim>,
47  num_space_dim>
48  _momentum_flux;
49 
50  private:
51  bool _use_source;
52  std::string _source_prefix;
53  Kokkos::Array<PHX::MDField<const scalar_type, panzer::Cell, panzer::Point>,
54  num_space_dim>
55  _momentum_source;
56  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point, panzer::Dim>
57  _grad_lagrange_pressure;
58  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _rho;
59  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _cp;
60  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _tau_supg_cont;
61  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _tau_supg_mom;
62  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _tau_supg_energy;
63  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _dxdt_temperature;
64  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _temperature;
65  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point> _energy_source;
66  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point, panzer::Dim>
67  _grad_temperature;
68  Kokkos::Array<PHX::MDField<const scalar_type, panzer::Cell, panzer::Point>,
69  num_space_dim>
70  _dxdt_velocity;
71  Kokkos::Array<PHX::MDField<const scalar_type, panzer::Cell, panzer::Point>,
72  num_space_dim>
73  _velocity;
74  Kokkos::Array<
75  PHX::MDField<const scalar_type, panzer::Cell, panzer::Point, panzer::Dim>,
76  num_space_dim>
77  _grad_velocity;
78 
79  bool _solve_temp;
80 
81  enum TmpVars
82  {
83  VEL_RES,
84  TEMP_RES,
85  NUM_TMPS
86  };
87 
89  using scratch_view
90  = Kokkos::View<scalar_type**,
91  typename PHX::DevLayout<scalar_type>::type,
92  typename PHX::exec_space::scratch_memory_space,
93  Kokkos::MemoryUnmanaged>;
94 };
95 
96 //---------------------------------------------------------------------------//
97 
98 } // end namespace ClosureModel
99 } // end namespace VertexCFD
100 
101 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLESUPGFLUX_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::ClosureModel::IncompressibleSUPGFlux
Definition: VertexCFD_Closure_IncompressibleSUPGFlux.hpp:26