xref: /petsc/include/petsc/private/kernels/blockmatmult.h (revision 9dd11ecf0918283bb567d8b33a92f53ac4ea7840)
1 #pragma once
2 
3 #include <petscsys.h>
4 
5 #define PetscKernel_v_gets_A_times_w_1_exp(v, A, w, exp) \
6   do { \
7     v[0] exp A[0] * w[0]; \
8   } while (0)
9 
10 #define PetscKernel_v_gets_A_times_w_2_exp(v, A, w, exp) \
11   do { \
12     v[0] exp A[0] * w[0] + A[2] * w[1]; \
13     v[1] exp A[1] * w[0] + A[3] * w[1]; \
14   } while (0)
15 
16 #define PetscKernel_v_gets_A_times_w_3_exp(v, A, w, exp) \
17   do { \
18     v[0] exp A[0] * w[0] + A[3] * w[1] + A[6] * w[2]; \
19     v[1] exp A[1] * w[0] + A[4] * w[1] + A[7] * w[2]; \
20     v[2] exp A[2] * w[0] + A[5] * w[1] + A[8] * w[2]; \
21   } while (0)
22 
23 #define PetscKernel_v_gets_A_times_w_4_exp(v, A, w, exp) \
24   do { \
25     v[0] exp A[0] * w[0] + A[4] * w[1] + A[8] * w[2] + A[12] * w[3]; \
26     v[1] exp A[1] * w[0] + A[5] * w[1] + A[9] * w[2] + A[13] * w[3]; \
27     v[2] exp A[2] * w[0] + A[6] * w[1] + A[10] * w[2] + A[14] * w[3]; \
28     v[3] exp A[3] * w[0] + A[7] * w[1] + A[11] * w[2] + A[15] * w[3]; \
29   } while (0)
30 
31 #define PetscKernel_v_gets_A_times_w_4_exp(v, A, w, exp) \
32   do { \
33     v[0] exp A[0] * w[0] + A[4] * w[1] + A[8] * w[2] + A[12] * w[3]; \
34     v[1] exp A[1] * w[0] + A[5] * w[1] + A[9] * w[2] + A[13] * w[3]; \
35     v[2] exp A[2] * w[0] + A[6] * w[1] + A[10] * w[2] + A[14] * w[3]; \
36     v[3] exp A[3] * w[0] + A[7] * w[1] + A[11] * w[2] + A[15] * w[3]; \
37   } while (0)
38 
39 #define PetscKernel_v_gets_A_times_w_5_exp(v, A, w, exp) \
40   do { \
41     v[0] exp A[0] * w[0] + A[5] * w[1] + A[10] * w[2] + A[15] * w[3] + A[20] * w[4]; \
42     v[1] exp A[1] * w[0] + A[6] * w[1] + A[11] * w[2] + A[16] * w[3] + A[21] * w[4]; \
43     v[2] exp A[2] * w[0] + A[7] * w[1] + A[12] * w[2] + A[17] * w[3] + A[22] * w[4]; \
44     v[3] exp A[3] * w[0] + A[8] * w[1] + A[13] * w[2] + A[18] * w[3] + A[23] * w[4]; \
45     v[4] exp A[4] * w[0] + A[9] * w[1] + A[14] * w[2] + A[19] * w[3] + A[24] * w[4]; \
46   } while (0)
47 
48 #define PetscKernel_v_gets_A_times_w_6_exp(v, A, w, exp) \
49   do { \
50     v[0] exp A[0] * w[0] + A[6] * w[1] + A[12] * w[2] + A[18] * w[3] + A[24] * w[4] + A[30] * w[5]; \
51     v[1] exp A[1] * w[0] + A[7] * w[1] + A[13] * w[2] + A[19] * w[3] + A[25] * w[4] + A[31] * w[5]; \
52     v[2] exp A[2] * w[0] + A[8] * w[1] + A[14] * w[2] + A[20] * w[3] + A[26] * w[4] + A[32] * w[5]; \
53     v[3] exp A[3] * w[0] + A[9] * w[1] + A[15] * w[2] + A[21] * w[3] + A[27] * w[4] + A[33] * w[5]; \
54     v[4] exp A[4] * w[0] + A[10] * w[1] + A[16] * w[2] + A[22] * w[3] + A[28] * w[4] + A[34] * w[5]; \
55     v[5] exp A[5] * w[0] + A[11] * w[1] + A[17] * w[2] + A[23] * w[3] + A[29] * w[4] + A[35] * w[5]; \
56   } while (0)
57 
58 #define PetscKernel_v_gets_A_times_w_7_exp(v, A, w, exp) \
59   do { \
60     v[0] exp A[0] * w[0] + A[7] * w[1] + A[14] * w[2] + A[21] * w[3] + A[28] * w[4] + A[35] * w[5] + A[42] * w[6]; \
61     v[1] exp A[1] * w[0] + A[8] * w[1] + A[15] * w[2] + A[22] * w[3] + A[29] * w[4] + A[36] * w[5] + A[43] * w[6]; \
62     v[2] exp A[2] * w[0] + A[9] * w[1] + A[16] * w[2] + A[23] * w[3] + A[30] * w[4] + A[37] * w[5] + A[44] * w[6]; \
63     v[3] exp A[3] * w[0] + A[10] * w[1] + A[17] * w[2] + A[24] * w[3] + A[31] * w[4] + A[38] * w[5] + A[45] * w[6]; \
64     v[4] exp A[4] * w[0] + A[11] * w[1] + A[18] * w[2] + A[25] * w[3] + A[32] * w[4] + A[39] * w[5] + A[46] * w[6]; \
65     v[5] exp A[5] * w[0] + A[12] * w[1] + A[19] * w[2] + A[26] * w[3] + A[33] * w[4] + A[40] * w[5] + A[47] * w[6]; \
66     v[6] exp A[6] * w[0] + A[13] * w[1] + A[20] * w[2] + A[27] * w[3] + A[34] * w[4] + A[41] * w[5] + A[48] * w[6]; \
67   } while (0)
68 
69 #define PetscKernel_v_gets_A_times_w_1(v, A, w)         PetscKernel_v_gets_A_times_w_1_exp(v, A, w, =)
70 #define PetscKernel_v_gets_A_times_w_2(v, A, w)         PetscKernel_v_gets_A_times_w_2_exp(v, A, w, =)
71 #define PetscKernel_v_gets_A_times_w_3(v, A, w)         PetscKernel_v_gets_A_times_w_3_exp(v, A, w, =)
72 #define PetscKernel_v_gets_A_times_w_4(v, A, w)         PetscKernel_v_gets_A_times_w_4_exp(v, A, w, =)
73 #define PetscKernel_v_gets_A_times_w_5(v, A, w)         PetscKernel_v_gets_A_times_w_5_exp(v, A, w, =)
74 #define PetscKernel_v_gets_A_times_w_6(v, A, w)         PetscKernel_v_gets_A_times_w_6_exp(v, A, w, =)
75 #define PetscKernel_v_gets_A_times_w_7(v, A, w)         PetscKernel_v_gets_A_times_w_7_exp(v, A, w, =)
76 #define PetscKernel_v_gets_v_plus_A_times_w_1(v, A, w)  PetscKernel_v_gets_A_times_w_1_exp(v, A, w, +=)
77 #define PetscKernel_v_gets_v_plus_A_times_w_2(v, A, w)  PetscKernel_v_gets_A_times_w_2_exp(v, A, w, +=)
78 #define PetscKernel_v_gets_v_plus_A_times_w_3(v, A, w)  PetscKernel_v_gets_A_times_w_3_exp(v, A, w, +=)
79 #define PetscKernel_v_gets_v_plus_A_times_w_4(v, A, w)  PetscKernel_v_gets_A_times_w_4_exp(v, A, w, +=)
80 #define PetscKernel_v_gets_v_plus_A_times_w_5(v, A, w)  PetscKernel_v_gets_A_times_w_5_exp(v, A, w, +=)
81 #define PetscKernel_v_gets_v_plus_A_times_w_6(v, A, w)  PetscKernel_v_gets_A_times_w_6_exp(v, A, w, +=)
82 #define PetscKernel_v_gets_v_plus_A_times_w_7(v, A, w)  PetscKernel_v_gets_A_times_w_7_exp(v, A, w, +=)
83 #define PetscKernel_v_gets_v_minus_A_times_w_1(v, A, w) PetscKernel_v_gets_A_times_w_1_exp(v, A, w, -=)
84 #define PetscKernel_v_gets_v_minus_A_times_w_2(v, A, w) PetscKernel_v_gets_A_times_w_2_exp(v, A, w, -=)
85 #define PetscKernel_v_gets_v_minus_A_times_w_3(v, A, w) PetscKernel_v_gets_A_times_w_3_exp(v, A, w, -=)
86 #define PetscKernel_v_gets_v_minus_A_times_w_4(v, A, w) PetscKernel_v_gets_A_times_w_4_exp(v, A, w, -=)
87 #define PetscKernel_v_gets_v_minus_A_times_w_5(v, A, w) PetscKernel_v_gets_A_times_w_5_exp(v, A, w, -=)
88 #define PetscKernel_v_gets_v_minus_A_times_w_6(v, A, w) PetscKernel_v_gets_A_times_w_6_exp(v, A, w, -=)
89 #define PetscKernel_v_gets_v_minus_A_times_w_7(v, A, w) PetscKernel_v_gets_A_times_w_7_exp(v, A, w, -=)
90