Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://www.mooseframework.org 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #pragma once 11 : 12 : #include "KokkosNodalKernel.h" 13 : 14 : namespace Moose 15 : { 16 : namespace Kokkos 17 : { 18 : 19 : /** 20 : * The base class for Kokkos time-derivative nodal kernels 21 : */ 22 : template <typename Derived> 23 : class TimeNodalKernel : public NodalKernel<Derived> 24 : { 25 : usingKokkosNodalKernelMembers(Derived); 26 : 27 : public: 28 : static InputParameters validParams(); 29 : 30 : /** 31 : * Constructor 32 : */ 33 : TimeNodalKernel(const InputParameters & parameters); 34 : 35 : protected: 36 : /** 37 : * Time derivative of the current solution at nodes 38 : */ 39 : const VariableNodalValue _u_dot; 40 : /** 41 : * Derivative of u_dot with respect to u 42 : */ 43 : const Scalar<const Real> _du_dot_du; 44 : }; 45 : 46 : template <typename Derived> 47 : InputParameters 48 9182 : TimeNodalKernel<Derived>::validParams() 49 : { 50 9182 : InputParameters params = NodalKernel<Derived>::validParams(); 51 : 52 36728 : params.set<MultiMooseEnum>("vector_tags") = "time"; 53 27546 : params.set<MultiMooseEnum>("matrix_tags") = "system time"; 54 : 55 9182 : return params; 56 0 : } 57 : 58 : template <typename Derived> 59 36 : TimeNodalKernel<Derived>::TimeNodalKernel(const InputParameters & parameters) 60 : : NodalKernel<Derived>(parameters), 61 27 : _u_dot(kokkosSystems(), _var, Moose::SOLUTION_DOT_TAG), 62 54 : _du_dot_du(_var.sys().duDotDu(_var.number())) 63 : { 64 36 : } 65 : 66 : } // namespace Kokkos 67 : } // namespace Moose 68 : 69 : #define usingKokkosTimeNodalKernelMembers(T) \ 70 : usingKokkosNodalKernelMembers(T); \ 71 : \ 72 : protected: \ 73 : using Moose::Kokkos::TimeNodalKernel<T>::_u_dot; \ 74 : using Moose::Kokkos::TimeNodalKernel<T>::_du_dot_du