VertexCFD  0.0-dev
VertexCFD_Closure_IncompressibleVariableTimeDerivative_impl.hpp
1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEVARIABLETIMEDERIVATIVE_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEVARIABLETIMEDERIVATIVE_IMPL_HPP
3 
4 #include <Panzer_HierarchicParallelism.hpp>
5 
6 #include <string.h>
7 
8 namespace VertexCFD
9 {
10 namespace ClosureModel
11 {
12 //---------------------------------------------------------------------------//
13 template<class EvalType, class Traits>
14 IncompressibleVariableTimeDerivative<EvalType, Traits>::
15  IncompressibleVariableTimeDerivative(
16  const panzer::IntegrationRule& ir,
17  const Teuchos::ParameterList& closure_params)
18  : _variable_name(closure_params.get<std::string>("Field Name"))
19  , _equation_name(closure_params.get<std::string>("Equation Name"))
20  , _dqdt_var_eq("DQDT_" + _equation_name, ir.dl_scalar)
21  , _dxdt_var("DXDT_" + _variable_name, ir.dl_scalar)
22 {
23  // Evaluated variable
24  this->addEvaluatedField(_dqdt_var_eq);
25 
26  // Dependent variable
27  this->addDependentField(_dxdt_var);
28 
29  // Closure model name
30  const int num_grad_dim = ir.spatial_dimension;
31  this->setName(_equation_name + " Incompressible Time Derivative "
32  + std::to_string(num_grad_dim) + "D");
33 }
34 
35 //---------------------------------------------------------------------------//
36 template<class EvalType, class Traits>
37 void IncompressibleVariableTimeDerivative<EvalType, Traits>::evaluateFields(
38  typename Traits::EvalData workset)
39 {
40  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
41  workset.num_cells);
42  Kokkos::parallel_for(this->getName(), policy, *this);
43 }
44 
45 //---------------------------------------------------------------------------//
46 template<class EvalType, class Traits>
47 KOKKOS_INLINE_FUNCTION void
48 IncompressibleVariableTimeDerivative<EvalType, Traits>::operator()(
49  const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team) const
50 {
51  const int cell = team.league_rank();
52  const int num_point = _dqdt_var_eq.extent(1);
53 
54  Kokkos::parallel_for(
55  Kokkos::TeamThreadRange(team, 0, num_point), [&](const int point) {
56  _dqdt_var_eq(cell, point) = _dxdt_var(cell, point);
57  });
58 }
59 
60 //---------------------------------------------------------------------------//
61 
62 } // end namespace ClosureModel
63 } // namespace VertexCFD
64 
65 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLEVARIABLETIMEDERIVATIVE_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23