Line data Source code
1 : /**********************************************************************/ 2 : /* DO NOT MODIFY THIS HEADER */ 3 : /* MAGPIE - Mesoscale Atomistic Glue Program for Integrated Execution */ 4 : /* */ 5 : /* Copyright 2017 Battelle Energy Alliance, LLC */ 6 : /* ALL RIGHTS RESERVED */ 7 : /**********************************************************************/ 8 : 9 : #pragma once 10 : 11 : #include "PointListAdaptor.h" 12 : #include "RadialGreensConvolution.h" 13 : 14 : #include "libmesh/nanoflann.hpp" 15 : 16 : using QPDataRange = StoredRange<std::vector<RadialGreensConvolution::QPData>::const_iterator, 17 : RadialGreensConvolution::QPData>; 18 : 19 : /** 20 : * RadialGreensConvolution threaded loop 21 : */ 22 : class ThreadedRadialGreensConvolutionLoop 23 : { 24 : public: 25 : ThreadedRadialGreensConvolutionLoop(RadialGreensConvolution &); 26 : 27 : /// Splitting constructor 28 : ThreadedRadialGreensConvolutionLoop(const ThreadedRadialGreensConvolutionLoop & x, 29 : Threads::split split); 30 : 31 : /// dummy virtual destructor 32 30 : virtual ~ThreadedRadialGreensConvolutionLoop() {} 33 : 34 : /// parens operator with the code that is executed in threads 35 : void operator()(const QPDataRange & range); 36 : 37 : /// thread join method 38 6 : virtual void join(const ThreadedRadialGreensConvolutionLoop & x) 39 : { 40 6 : _convolution_integral += x._convolution_integral; 41 6 : } 42 : 43 : /// return the convolution integral 44 24 : Real convolutionIntegral() { return _convolution_integral; } 45 : 46 : protected: 47 : /// rasterizer to manage the sample data 48 : RadialGreensConvolution & _green; 49 : 50 : /// name of the Green's Function 51 : FunctionName _function_name; 52 : 53 : /// integral over the convolution contribution 54 : Real _convolution_integral; 55 : 56 : /// ID number of the current thread 57 : THREAD_ID _tid; 58 : 59 : private: 60 : };