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 "Executioner.h" 12 : #include "FFTWBufferBase.h" 13 : #include "FFTProblem.h" 14 : 15 : // System includes 16 : #include <string> 17 : 18 : // Forward declarations 19 : class InputParameters; 20 : 21 : /** 22 : * FFT Executioner base class. 23 : */ 24 : class SpectralExecutionerBase : public Executioner 25 : { 26 : public: 27 : static InputParameters validParams(); 28 : 29 : SpectralExecutionerBase(const InputParameters & parameters); 30 : 31 : virtual void init() override; 32 : virtual void execute() override; 33 0 : virtual bool lastSolveConverged() const override { return true; } 34 : 35 : protected: 36 : /// obtain a non-const reference to an FFT buffer 37 : template <typename T> 38 : FFTBufferBase<T> & getFFTBuffer(const std::string & name); 39 : 40 : /// multiply a scalar buffer by its corresponding k-vector field int a vector buffer 41 : void kVectorMultiply(const FFTBufferBase<Real> & in, FFTBufferBase<RealVectorValue> & out) const; 42 : 43 : Real _system_time; 44 : int & _time_step; 45 : Real & _time; 46 : 47 : PerfID _final_timer; 48 : 49 : FFTProblem * _fft_problem; 50 : }; 51 : 52 : template <typename T> 53 : FFTBufferBase<T> & 54 : SpectralExecutionerBase::getFFTBuffer(const std::string & name) 55 : { 56 24 : return _fft_problem->getFFTBuffer<T>(name); 57 : }