block_transpose_copy_1d2d_z Subroutine

private subroutine block_transpose_copy_1d2d_z(extent_out, extent_in, rows, columns)

Copy and transpose block.

Arguments

Type IntentOptional Attributes Name
complex(kind=real_8), intent(out), DIMENSION(:), TARGET :: extent_out

output matrix in the form of a 1-d array

complex(kind=real_8), intent(in), DIMENSION(rows, columns), TARGET :: extent_in

input matrix in the form of a 2-d array

integer, intent(in) :: rows

input matrix size input matrix size

integer, intent(in) :: columns

input matrix size input matrix size


Source Code

      PURE_BLOCKOPS SUBROUTINE block_transpose_copy_1d2d_z (extent_out, extent_in, &
                                                                        rows, columns)
     !! Copy and transpose block.

#if defined(__LIBXS)
         USE LIBXS, ONLY: libxs_otrans, C_LOC
#endif
         INTEGER, INTENT(IN) :: rows, columns
        !! input matrix size
        !! input matrix size
         COMPLEX(kind=real_8), DIMENSION(:), INTENT(OUT), TARGET            :: extent_out
        !! output matrix in the form of a 1-d array
         COMPLEX(kind=real_8), DIMENSION(rows, columns), INTENT(IN), TARGET :: extent_in
        !! input matrix in the form of a 2-d array

!    ---------------------------------------------------------------------------
#if defined(__LIBXS)
         CALL libxs_otrans(C_LOC(extent_out), C_LOC(extent_in), &
                           16, rows, columns, rows, columns)
#elif defined(__MKL)
         CALL mkl_zomatcopy('C', 'T', rows, columns, CMPLX(1.0, 0.0, real_8), extent_in, rows, extent_out, columns)
#else
         extent_out = RESHAPE(TRANSPOSE(extent_in), (/rows*columns/))
#endif
      END SUBROUTINE block_transpose_copy_1d2d_z