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