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 13 : { 14 : namespace Kokkos 15 : { 16 : 17 : InputParameters 18 64324 : NodalKernel::validParams() 19 : { 20 64324 : InputParameters params = NodalKernelBase::validParams(); 21 64324 : return params; 22 : } 23 : 24 272 : NodalKernel::NodalKernel(const InputParameters & parameters) 25 : : NodalKernelBase(parameters, Moose::VarFieldType::VAR_FIELD_STANDARD), 26 215 : _u(_var, Moose::SOLUTION_TAG, true), 27 215 : _boundary_restricted(boundaryRestricted()) 28 : { 29 272 : } 30 : 31 : void 32 20340 : NodalKernel::computeResidual() 33 : { 34 20340 : Policy policy(0, _boundary_restricted ? numKokkosBoundaryNodes() : numKokkosBlockNodes()); 35 : 36 20340 : if (!_residual_dispatcher) 37 270 : _residual_dispatcher = DispatcherRegistry::build<ResidualLoop>(this, type()); 38 : 39 20340 : _residual_dispatcher->parallelFor(policy); 40 20340 : } 41 : 42 : void 43 5424 : NodalKernel::computeJacobian() 44 : { 45 5424 : if (DispatcherRegistry::hasUserMethod<JacobianLoop>(type())) 46 : { 47 3118 : Policy policy(0, _boundary_restricted ? numKokkosBoundaryNodes() : numKokkosBlockNodes()); 48 : 49 3118 : if (!_jacobian_dispatcher) 50 156 : _jacobian_dispatcher = DispatcherRegistry::build<JacobianLoop>(this, type()); 51 : 52 3118 : _jacobian_dispatcher->parallelFor(policy); 53 3118 : } 54 : 55 5424 : if (DispatcherRegistry::hasUserMethod<OffDiagJacobianLoop>(type())) 56 : { 57 3364 : auto & sys = kokkosSystem(_kokkos_var.sys()); 58 : 59 9456 : _thread.resize({sys.getCoupling(_kokkos_var.var()).size(), 60 2728 : _boundary_restricted ? numKokkosBoundaryNodes() : numKokkosBlockNodes()}); 61 : 62 3364 : Policy policy(0, _thread.size()); 63 : 64 3364 : if (!_offdiag_jacobian_dispatcher) 65 160 : _offdiag_jacobian_dispatcher = DispatcherRegistry::build<OffDiagJacobianLoop>(this, type()); 66 : 67 3364 : _offdiag_jacobian_dispatcher->parallelFor(policy); 68 3364 : } 69 5424 : } 70 : 71 : } // namespace Kokkos 72 : } // namespace Moose