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 : #pragma once 11 : 12 : #include "KokkosElementPostprocessor.h" 13 : #include "KokkosSidePostprocessor.h" 14 : 15 : template <typename Base> 16 : class KokkosIntegralPostprocessor : public Base 17 : { 18 : public: 19 : static InputParameters validParams(); 20 : 21 : KokkosIntegralPostprocessor(const InputParameters & parameters); 22 : 23 : virtual void initialize() override; 24 : virtual Real getValue() const override; 25 : virtual void finalize() override; 26 : 27 : template <typename Derived> 28 : KOKKOS_FUNCTION void reduce(Datum & datum, Real * result) const; 29 : template <typename Derived> 30 : KOKKOS_FUNCTION void join(Real * result, const Real * source) const; 31 : template <typename Derived> 32 : KOKKOS_FUNCTION void init(Real * result) const; 33 : 34 : protected: 35 : const bool _average; 36 : }; 37 : 38 : template <typename Base> 39 : template <typename Derived> 40 : KOKKOS_FUNCTION void 41 34827 : KokkosIntegralPostprocessor<Base>::reduce(Datum & datum, Real * result) const 42 : { 43 34827 : Real sum = 0; 44 34827 : Real vol = 0; 45 : 46 201167 : for (unsigned int qp = 0; qp < datum.n_qps(); ++qp) 47 : { 48 166340 : sum += datum.JxW(qp) * static_cast<const Derived *>(this)->computeQpIntegral(qp, datum); 49 166340 : vol += datum.JxW(qp); 50 : } 51 : 52 34827 : result[0] += sum; 53 : 54 34827 : if (_average) 55 8899 : result[1] += vol; 56 34827 : } 57 : 58 : template <typename Base> 59 : template <typename Derived> 60 : KOKKOS_FUNCTION void 61 97 : KokkosIntegralPostprocessor<Base>::join(Real * result, const Real * source) const 62 : { 63 97 : result[0] += source[0]; 64 : 65 97 : if (_average) 66 47 : result[1] += source[1]; 67 97 : } 68 : 69 : template <typename Base> 70 : template <typename Derived> 71 : KOKKOS_FUNCTION void 72 885 : KokkosIntegralPostprocessor<Base>::init(Real * result) const 73 : { 74 885 : result[0] = 0; 75 : 76 885 : if (_average) 77 430 : result[1] = 0; 78 885 : } 79 : 80 : typedef KokkosIntegralPostprocessor<Moose::Kokkos::ElementPostprocessor> 81 : KokkosElementIntegralPostprocessor; 82 : typedef KokkosIntegralPostprocessor<Moose::Kokkos::SidePostprocessor> 83 : KokkosSideIntegralPostprocessor;