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 "KokkosReducerBase.h" 11 : 12 : #include "FEProblemBase.h" 13 : 14 : namespace Moose::Kokkos 15 : { 16 : 17 1174 : ReducerBase::ReducerBase(const MooseObject * object) 18 646 : : MeshHolder(*object->getMooseApp().feProblem().mesh().getKokkosMesh()), 19 646 : AssemblyHolder(object->getMooseApp().feProblem().kokkosAssembly()), 20 646 : SystemHolder(object->getMooseApp().feProblem().getKokkosSystems()), 21 2584 : _reducer_object(object) 22 : { 23 1174 : } 24 : 25 7931 : ReducerBase::ReducerBase(const ReducerBase & reducer) 26 : : MeshHolder(reducer), 27 : AssemblyHolder(reducer), 28 : SystemHolder(reducer), 29 4744 : _reducer_object(reducer._reducer_object) 30 : { 31 7931 : } 32 : 33 : void 34 2249 : ReducerBase::computeReducer() 35 : { 36 2249 : if (!_reduction_buffer.is_allocated()) 37 0 : _reducer_object->mooseError("Reduction buffer was not allocated."); 38 : 39 2249 : Policy policy(0, numReducerThreads()); 40 : 41 2249 : if (!_reducer_dispatcher) 42 427 : _reducer_dispatcher = 43 537 : DispatcherRegistry::build<ReducerLoop>(_reducer_object, _reducer_object->type()); 44 : 45 2249 : _reducer_dispatcher->parallelReduce(policy, _reduction_buffer); 46 2249 : } 47 : 48 : } // namespace Moose::Kokkos