xref: /petsc/include/petsc/private/kernels/blocktranspose.h (revision 9dd11ecf0918283bb567d8b33a92f53ac4ea7840)
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)17 static 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