Actual source code: blocktranspose.h

  1: #if !defined(_BLOCKTRANSPOSE_H)
  2: #define _BLOCKTRANSPOSE_H

  4: #include <petscsys.h>
  5: #include <petscblaslapack.h>

  7: #define Kernel_A_gets_transpose_A_BODY(a,N)                             \
  8:     int i,j;                                                            \
  9:     for (i=0; i<N; i++) {                                               \
 10:       for (j=i+1; j<N; j++) {                                           \
 11:         MatScalar t = a[i*N+j];                                         \
 12:         a[i*N+j] = a[j*N+i];                                            \
 13:         a[j*N+i] = t;                                                   \
 14:       }                                                                 \
 15:     }                                                                   \
 16:     return 0

 18: PETSC_STATIC_INLINE PetscErrorCode Kernel_A_gets_transpose_A_N (MatScalar *a,PetscInt N) {
 19:   Kernel_A_gets_transpose_A_BODY(a,N);
 20: }
 21: #define Kernel_A_gets_transpose_A_DECLARE(N)                            \
 22:   PETSC_STATIC_INLINE PetscErrorCode Kernel_A_gets_transpose_A_ ## N (MatScalar *a) { \
 23:     Kernel_A_gets_transpose_A_BODY(a,N);                                \
 24:   }

 26: Kernel_A_gets_transpose_A_DECLARE(2)
 27: Kernel_A_gets_transpose_A_DECLARE(3)
 28: Kernel_A_gets_transpose_A_DECLARE(4)
 29: Kernel_A_gets_transpose_A_DECLARE(5)
 30: Kernel_A_gets_transpose_A_DECLARE(6)
 31: Kernel_A_gets_transpose_A_DECLARE(7)
 32: Kernel_A_gets_transpose_A_DECLARE(8)
 33: Kernel_A_gets_transpose_A_DECLARE(9)

 35: #endif