1 /*-------------------------------------------------------------------------- 2 * Header file for the Grid_Data data structures 3 *--------------------------------------------------------------------------*/ 4 5 #ifndef KRIPKE_KERNEL_H__ 6 #define KRIPKE_KERNEL_H__ 7 8 #include <Kripke.h> 9 10 struct Grid_Data; 11 struct SubTVec; 12 struct Subdomain; 13 14 /** 15 * This is the Kernel base-class and interface definition. 16 * This abstracts the storage of Psi, Phi, L, L+ from the rest of the code, 17 * providing data-layout specific routines. 18 */ 19 class Kernel { 20 public: 21 // CYRUSH: Added in Ascent ver to address -Wdelete-non-virtual-dtor 22 virtual ~Kernel(); 23 virtual Nesting_Order nestingPsi(void) const = 0; 24 virtual Nesting_Order nestingPhi(void) const = 0; 25 virtual Nesting_Order nestingSigt(void) const = 0; 26 virtual Nesting_Order nestingEll(void) const = 0; 27 virtual Nesting_Order nestingEllPlus(void) const = 0; 28 virtual Nesting_Order nestingSigs(void) const = 0; 29 30 // Computational Kernels 31 virtual void LTimes(Grid_Data *grid_data) = 0; 32 virtual void LPlusTimes(Grid_Data *grid_data) = 0; 33 virtual void scattering(Grid_Data *grid_data) = 0; 34 virtual void source(Grid_Data *grid_data) = 0; 35 virtual void sweep(Subdomain *ga_set) = 0; 36 }; 37 38 39 // Factory to create correct kernel object 40 Kernel *createKernel(Nesting_Order, int num_dims); 41 42 #endif 43