Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 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 : #include "KokkosNodalKernel.h" 11 : 12 : namespace Moose::Kokkos 13 : { 14 : 15 : InputParameters 16 15496 : NodalKernel::validParams() 17 : { 18 15496 : InputParameters params = NodalKernelBase::validParams(); 19 15496 : return params; 20 : } 21 : 22 407 : NodalKernel::NodalKernel(const InputParameters & parameters) 23 : : NodalKernelBase(parameters, Moose::VarFieldType::VAR_FIELD_STANDARD), 24 215 : _u(_var, Moose::SOLUTION_TAG, true), 25 215 : _boundary_restricted(boundaryRestricted()) 26 : { 27 407 : addMooseVariableDependency(&_var); 28 407 : } 29 : 30 : void 31 31889 : NodalKernel::computeResidual() 32 : { 33 31889 : Policy policy(0, _boundary_restricted ? numKokkosBoundaryNodes() : numKokkosBlockNodes()); 34 : 35 31889 : if (!_residual_dispatcher) 36 405 : _residual_dispatcher = DispatcherRegistry::build<ResidualLoop>(this, type()); 37 : 38 31889 : _residual_dispatcher->parallelFor(policy); 39 31889 : } 40 : 41 : void 42 8194 : NodalKernel::computeJacobian() 43 : { 44 8194 : if (DispatcherRegistry::hasUserMethod<JacobianLoop>(type())) 45 : { 46 4708 : Policy policy(0, _boundary_restricted ? numKokkosBoundaryNodes() : numKokkosBlockNodes()); 47 : 48 4708 : if (!_jacobian_dispatcher) 49 236 : _jacobian_dispatcher = DispatcherRegistry::build<JacobianLoop>(this, type()); 50 : 51 4708 : _jacobian_dispatcher->parallelFor(policy); 52 4708 : } 53 : 54 8194 : if (DispatcherRegistry::hasUserMethod<OffDiagJacobianLoop>(type())) 55 : { 56 5104 : auto & sys = kokkosSystem(_kokkos_var.sys()); 57 : 58 5104 : _thread.resize(sys.getCoupling(_kokkos_var.var()).size(), 59 2728 : _boundary_restricted ? numKokkosBoundaryNodes() : numKokkosBlockNodes()); 60 : 61 5104 : Policy policy(0, _thread.size()); 62 : 63 5104 : if (!_offdiag_jacobian_dispatcher) 64 240 : _offdiag_jacobian_dispatcher = DispatcherRegistry::build<OffDiagJacobianLoop>(this, type()); 65 : 66 5104 : _offdiag_jacobian_dispatcher->parallelFor(policy); 67 5104 : } 68 8194 : } 69 : 70 : } // namespace Moose::Kokkos