1 #pragma once 2 3 #include <petscsys.h> 4 #include <petscblaslapack.h> 5 6 #define PetscKernel_A_gets_transpose_A_BODY(a, N) \ 7 int i, j; \ 8 for (i = 0; i < N; i++) { \ 9 for (j = i + 1; j < N; j++) { \ 10 MatScalar t = a[i * N + j]; \ 11 a[i * N + j] = a[j * N + i]; \ 12 a[j * N + i] = t; \ 13 } \ 14 } \ 15 return PETSC_SUCCESS 16 PetscKernel_A_gets_transpose_A_N(MatScalar * a,PetscInt N)17static inline PetscErrorCode PetscKernel_A_gets_transpose_A_N(MatScalar *a, PetscInt N) 18 { 19 PetscKernel_A_gets_transpose_A_BODY(a, N); 20 } 21 #define PetscKernel_A_gets_transpose_A_DECLARE(N) \ 22 static inline PetscErrorCode PetscKernel_A_gets_transpose_A_##N(MatScalar *a) \ 23 { \ 24 PetscKernel_A_gets_transpose_A_BODY(a, N); \ 25 } 26 27 PetscKernel_A_gets_transpose_A_DECLARE(2) 28 PetscKernel_A_gets_transpose_A_DECLARE(3) 29 PetscKernel_A_gets_transpose_A_DECLARE(4) 30 PetscKernel_A_gets_transpose_A_DECLARE(5) 31 PetscKernel_A_gets_transpose_A_DECLARE(6) 32 PetscKernel_A_gets_transpose_A_DECLARE(7) 33 PetscKernel_A_gets_transpose_A_DECLARE(8) 34 PetscKernel_A_gets_transpose_A_DECLARE(9) 35