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