Mentions légales du service

Skip to content
Snippets Groups Projects
morse_zf77.c 59.66 KiB
/**
 *
 * @copyright (c) 2009-2014 The University of Tennessee and The University
 *                          of Tennessee Research Foundation.
 *                          All rights reserved.
 * @copyright (c) 2012-2014 Inria. All rights reserved.
 * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
 *
 **/

/**
 *
 * @file morse_zf77.c
 *
 *  MORSE computational routines
 *  MORSE is a software package provided by Univ. of Tennessee,
 *  Univ. of California Berkeley and Univ. of Colorado Denver
 *  This file is automatically generated by tools/genf77interface.pl
 *
 * @version 2.5.0
 * @comment This file has been automatically generated
 *          from Plasma 2.5.0 for MORSE 1.0.0
 * @author Bilel Hadri
 * @author Mathieu Faverge
 * @author Emmanuel Agullo
 * @author Cedric Castagnede
 * @date 2010-11-15
 * @precisions normal z -> c d s
 *
 **/
#include <stdlib.h>
#include "control/common.h"
#undef REAL
#define COMPLEX


/***************************************************************************//**
 *  FORTRAN API - math functions (simple interface)
 **/
#define MORSE_ZLAPACK_TO_TILE MORSE_FNAME(zlapack_to_tile, ZLAPACK_TO_TILE)
#define MORSE_ZLAPACK_TO_TILE_ASYNC MORSE_FNAME(zlapack_to_tile_async, ZLAPACK_TO_TILE_ASYNC)
#define MORSE_ZTILE_TO_LAPACK MORSE_FNAME(ztile_to_lapack, ZTILE_TO_LAPACK)
#define MORSE_ZTILE_TO_LAPACK_ASYNC MORSE_FNAME(ztile_to_lapack_async, ZTILE_TO_LAPACK_ASYNC)
//#define MORSE_ZGEBRD          MORSE_FNAME(zgebrd       , ZGEBRD       )
//#define MORSE_ZGECFI          MORSE_FNAME(zgecfi       , ZGECFI       )
//#define MORSE_ZGECFI_ASYNC    MORSE_FNAME(zgecfi_async , ZGECFI_ASYNC )
#define MORSE_ZGELQF          MORSE_FNAME(zgelqf       , ZGELQF       )
#define MORSE_ZGELQS          MORSE_FNAME(zgelqs       , ZGELQS       )
#define MORSE_ZGELS           MORSE_FNAME(zgels        , ZGELS        )
#define MORSE_ZGEMM           MORSE_FNAME(zgemm        , ZGEMM        )
#define MORSE_ZGEQRF          MORSE_FNAME(zgeqrf       , ZGEQRF       )
#define MORSE_ZGEQRS          MORSE_FNAME(zgeqrs       , ZGEQRS       )
//#define MORSE_ZGESV           MORSE_FNAME(zgesv        , ZGESV        )
#define MORSE_ZGESV_INCPIV    MORSE_FNAME(zgesv_incpiv , ZGESV_INCPIV )
#define MORSE_ZGESV_NOPIV     MORSE_FNAME(zgesv_nopiv  , ZGESV_NOPIV )
//#define MORSE_ZGESVD          MORSE_FNAME(zgesvd       , ZGESVD       )
//#define MORSE_ZGETMI          MORSE_FNAME(zgetmi       , ZGETMI       )
//#define MORSE_ZGETMI_ASYNC    MORSE_FNAME(zgetmi_async , ZGETMI_ASYNC )
//#define MORSE_ZGETRF          MORSE_FNAME(zgetrf       , ZGETRF       )
#define MORSE_ZGETRF_INCPIV   MORSE_FNAME(zgetrf_incpiv, ZGETRF_INCPIV)
#define MORSE_ZGETRF_NOPIV    MORSE_FNAME(zgetrf_nopiv , ZGETRF_NOPIV)
//#define MORSE_ZGETRI          MORSE_FNAME(zgetri       , ZGETRI       )
//#define MORSE_ZGETRS          MORSE_FNAME(zgetrs       , ZGETRS       )
#define MORSE_ZGETRS_INCPIV   MORSE_FNAME(zgetrs_incpiv, ZGETRS_INCPIV)
#define MORSE_ZGETRS_NOPIV    MORSE_FNAME(zgetrs_nopiv , ZGETRS_NOPIV)
//#define MORSE_ZHEEV           MORSE_FNAME(zheev        , ZHEEV        )
//#define MORSE_ZHEEVD          MORSE_FNAME(zheevd       , ZHEEVD       )
//#define MORSE_ZHEGST          MORSE_FNAME(zhegst       , ZHEGST       )
//#define MORSE_ZHEGV           MORSE_FNAME(zhegv        , ZHEGV        )
//#define MORSE_ZHEGVD          MORSE_FNAME(zhegvd       , ZHEGVD       )
#ifdef COMPLEX
#define MORSE_ZHEMM           MORSE_FNAME(zhemm        , ZHEMM        )
#endif
#ifdef COMPLEX
#define MORSE_ZHER2K          MORSE_FNAME(zher2k       , ZHER2K       )
#endif
#ifdef COMPLEX
#define MORSE_ZHERK           MORSE_FNAME(zherk        , ZHERK        )
#endif
//#define MORSE_ZHETRD          MORSE_FNAME(zhetrd       , ZHETRD       )
#define MORSE_ZLACPY          MORSE_FNAME(zlacpy       , ZLACPY       )
#define MORSE_ZLANGE          MORSE_FNAME(zlange       , ZLANGE       )
#ifdef COMPLEX
#define MORSE_ZLANHE          MORSE_FNAME(zlanhe       , ZLANHE       )
#endif
#define MORSE_ZLANSY          MORSE_FNAME(zlansy       , ZLANSY       )
#define MORSE_ZLANTR          MORSE_FNAME(zlantr       , ZLANTR       )
#define MORSE_ZLASET          MORSE_FNAME(zlaset       , ZLASET       )
//#define MORSE_ZLASWP          MORSE_FNAME(zlaswp       , ZLASWP       )
//#define MORSE_ZLASWPC         MORSE_FNAME(zlaswpc      , ZLASWPC      )
#define MORSE_ZLAUUM          MORSE_FNAME(zlauum       , ZLAUUM       )
#ifdef COMPLEX
#define MORSE_ZPLGHE          MORSE_FNAME(zplghe       , ZPLGHE       )
#endif
#define MORSE_ZPLGSY          MORSE_FNAME(zplgsy       , ZPLGSY       )
#define MORSE_ZPLRNT          MORSE_FNAME(zplrnt       , ZPLRNT       )
#define MORSE_ZPOSV           MORSE_FNAME(zposv        , ZPOSV        )
#define MORSE_ZPOTRF          MORSE_FNAME(zpotrf       , ZPOTRF       )
#define MORSE_ZPOTRI          MORSE_FNAME(zpotri       , ZPOTRI       )
#define MORSE_ZPOTRS          MORSE_FNAME(zpotrs       , ZPOTRS       )
#if defined (PRECISION_c) || defined(PRECISION_z)
#define MORSE_ZSYSV           MORSE_FNAME(zsysv        , ZSYSV        )
#define MORSE_ZSYTRF          MORSE_FNAME(zsytrf       , ZSYTRF       )
#define MORSE_ZSYTRS          MORSE_FNAME(zsytrs       , ZSYTRS       )
#endif
#define MORSE_ZSYMM           MORSE_FNAME(zsymm        , ZSYMM        )
#define MORSE_ZSYR2K          MORSE_FNAME(zsyr2k       , ZSYR2K       )
#define MORSE_ZSYRK           MORSE_FNAME(zsyrk        , ZSYRK        )
#define MORSE_ZTRMM           MORSE_FNAME(ztrmm        , ZTRMM        )
#define MORSE_ZTRSM           MORSE_FNAME(ztrsm        , ZTRSM        )
#define MORSE_ZTRSMPL         MORSE_FNAME(ztrsmpl      , ZTRSMPL      )
//#define MORSE_ZTRSMRV         MORSE_FNAME(ztrsmrv      , ZTRSMRV      )
#define MORSE_ZTRTRI          MORSE_FNAME(ztrtri       , ZTRTRI       )
#define MORSE_ZUNGLQ          MORSE_FNAME(zunglq       , ZUNGLQ       )
#define MORSE_ZUNGQR          MORSE_FNAME(zungqr       , ZUNGQR       )
#define MORSE_ZUNMLQ          MORSE_FNAME(zunmlq       , ZUNMLQ       )
#define MORSE_ZUNMQR          MORSE_FNAME(zunmqr       , ZUNMQR       )

/***************************************************************************//**
 *  FORTRAN API - math functions (native interface)
 **/
//#define MORSE_ZGEBRD_TILE          MORSE_TILE_FNAME(zgebrd       , ZGEBRD       )
#define MORSE_ZGELQF_TILE          MORSE_TILE_FNAME(zgelqf       , ZGELQF       )
#define MORSE_ZGELQS_TILE          MORSE_TILE_FNAME(zgelqs       , ZGELQS       )
#define MORSE_ZGELS_TILE           MORSE_TILE_FNAME(zgels        , ZGELS        )
#define MORSE_ZGEMM_TILE           MORSE_TILE_FNAME(zgemm        , ZGEMM        )
#define MORSE_ZGEQRF_TILE          MORSE_TILE_FNAME(zgeqrf       , ZGEQRF       )
#define MORSE_ZGEQRS_TILE          MORSE_TILE_FNAME(zgeqrs       , ZGEQRS       )
//#define MORSE_ZGESV_TILE           MORSE_TILE_FNAME(zgesv        , ZGESV        )
#define MORSE_ZGESV_INCPIV_TILE    MORSE_TILE_FNAME(zgesv_incpiv , ZGESV_INCPIV )
#define MORSE_ZGESV_NOPIV_TILE     MORSE_TILE_FNAME(zgesv_nopiv  , ZGESV_NOPIV  )
//#define MORSE_ZGESVD_TILE          MORSE_TILE_FNAME(zgesvd       , ZGESVD       )
//#define MORSE_ZGETRF_TILE          MORSE_TILE_FNAME(zgetrf       , ZGETRF       )
#define MORSE_ZGETRF_INCPIV_TILE   MORSE_TILE_FNAME(zgetrf_incpiv, ZGETRF_INCPIV)
#define MORSE_ZGETRF_NOPIV_TILE    MORSE_TILE_FNAME(zgetrf_nopiv , ZGETRF_NOPIV )
//#define MORSE_ZGETRI_TILE          MORSE_TILE_FNAME(zgetri       , ZGETRI       )
//#define MORSE_ZGETRS_TILE          MORSE_TILE_FNAME(zgetrs       , ZGETRS       )
#define MORSE_ZGETRS_INCPIV_TILE   MORSE_TILE_FNAME(zgetrs_incpiv, ZGETRS_INCPIV)
#define MORSE_ZGETRS_NOPIV_TILE    MORSE_TILE_FNAME(zgetrs_nopiv , ZGETRS_NOPIV )
//#define MORSE_ZHEEV_TILE           MORSE_TILE_FNAME(zheev        , ZHEEV        )
//#define MORSE_ZHEEVD_TILE          MORSE_TILE_FNAME(zheevd       , ZHEEVD       )
//#define MORSE_ZHEGST_TILE          MORSE_TILE_FNAME(zhegst       , ZHEGST       )
//#define MORSE_ZHEGV_TILE           MORSE_TILE_FNAME(zhegv        , ZHEGV        )
//#define MORSE_ZHEGVD_TILE          MORSE_TILE_FNAME(zhegvd       , ZHEGVD       )
#ifdef COMPLEX
#define MORSE_ZHEMM_TILE           MORSE_TILE_FNAME(zhemm        , ZHEMM        )
#endif
#ifdef COMPLEX
#define MORSE_ZHER2K_TILE          MORSE_TILE_FNAME(zher2k       , ZHER2K       )
#endif
#ifdef COMPLEX
#define MORSE_ZHERK_TILE           MORSE_TILE_FNAME(zherk        , ZHERK        )
#endif
//#define MORSE_ZHETRD_TILE          MORSE_TILE_FNAME(zhetrd       , ZHETRD       )
#define MORSE_ZLACPY_TILE          MORSE_TILE_FNAME(zlacpy       , ZLACPY       )
#define MORSE_ZLANGE_TILE          MORSE_TILE_FNAME(zlange       , ZLANGE       )
#ifdef COMPLEX
#define MORSE_ZLANHE_TILE          MORSE_TILE_FNAME(zlanhe       , ZLANHE       )
#endif
#define MORSE_ZLANSY_TILE          MORSE_TILE_FNAME(zlansy       , ZLANSY       )
#define MORSE_ZLASET_TILE          MORSE_TILE_FNAME(zlaset       , ZLASET       )
//#define MORSE_ZLASWP_TILE          MORSE_TILE_FNAME(zlaswp       , ZLASWP       )
//#define MORSE_ZLASWPC_TILE         MORSE_TILE_FNAME(zlaswpc      , ZLASWPC      )
#define MORSE_ZLAUUM_TILE          MORSE_TILE_FNAME(zlauum       , ZLAUUM       )
#ifdef COMPLEX
#define MORSE_ZPLGHE_TILE          MORSE_TILE_FNAME(zplghe       , ZPLGHE       )
#endif
#define MORSE_ZPLGSY_TILE          MORSE_TILE_FNAME(zplgsy       , ZPLGSY       )
#define MORSE_ZPLRNT_TILE          MORSE_TILE_FNAME(zplrnt       , ZPLRNT       )
#define MORSE_ZPOSV_TILE           MORSE_TILE_FNAME(zposv        , ZPOSV        )
#define MORSE_ZPOTRF_TILE          MORSE_TILE_FNAME(zpotrf       , ZPOTRF       )
#define MORSE_ZPOTRI_TILE          MORSE_TILE_FNAME(zpotri       , ZPOTRI       )
#define MORSE_ZPOTRS_TILE          MORSE_TILE_FNAME(zpotrs       , ZPOTRS       )
#if defined (PRECISION_c) || defined(PRECISION_z)
#define MORSE_ZSYSV_TILE           MORSE_TILE_FNAME(zsysv        , ZSYSV        )
#define MORSE_ZSYTRF_TILE          MORSE_TILE_FNAME(zsytrf       , ZSYTRF       )
#define MORSE_ZSYTRS_TILE          MORSE_TILE_FNAME(zsytrs       , ZSYTRS       )
#endif
#define MORSE_ZSYMM_TILE           MORSE_TILE_FNAME(zsymm        , ZSYMM        )
#define MORSE_ZSYR2K_TILE          MORSE_TILE_FNAME(zsyr2k       , ZSYR2K       )
#define MORSE_ZSYRK_TILE           MORSE_TILE_FNAME(zsyrk        , ZSYRK        )
#define MORSE_ZTRMM_TILE           MORSE_TILE_FNAME(ztrmm        , ZTRMM        )
#define MORSE_ZTRSM_TILE           MORSE_TILE_FNAME(ztrsm        , ZTRSM        )
#define MORSE_ZTRSMPL_TILE         MORSE_TILE_FNAME(ztrsmpl      , ZTRSMPL      )
//#define MORSE_ZTRSMRV_TILE         MORSE_TILE_FNAME(ztrsmrv      , ZTRSMRV      )
#define MORSE_ZTRTRI_TILE          MORSE_TILE_FNAME(ztrtri       , ZTRTRI       )
#define MORSE_ZUNGLQ_TILE          MORSE_TILE_FNAME(zunglq       , ZUNGLQ       )
#define MORSE_ZUNGQR_TILE          MORSE_TILE_FNAME(zungqr       , ZUNGQR       )
#define MORSE_ZUNMLQ_TILE          MORSE_TILE_FNAME(zunmlq       , ZUNMLQ       )
#define MORSE_ZUNMQR_TILE          MORSE_TILE_FNAME(zunmqr       , ZUNMQR       )

/***************************************************************************//**
 *  FORTRAN API - math functions (asynchronous interface)
 **/
//#define MORSE_ZGEBRD_TILE_ASYNC          MORSE_ASYNC_FNAME(zgebrd       , ZGEBRD       )
#define MORSE_ZGELQF_TILE_ASYNC          MORSE_ASYNC_FNAME(zgelqf       , ZGELQF       )
#define MORSE_ZGELQS_TILE_ASYNC          MORSE_ASYNC_FNAME(zgelqs       , ZGELQS       )
#define MORSE_ZGELS_TILE_ASYNC           MORSE_ASYNC_FNAME(zgels        , ZGELS        )
#define MORSE_ZGEMM_TILE_ASYNC           MORSE_ASYNC_FNAME(zgemm        , ZGEMM        )
#define MORSE_ZGEQRF_TILE_ASYNC          MORSE_ASYNC_FNAME(zgeqrf       , ZGEQRF       )
#define MORSE_ZGEQRS_TILE_ASYNC          MORSE_ASYNC_FNAME(zgeqrs       , ZGEQRS       )
//#define MORSE_ZGESV_TILE_ASYNC           MORSE_ASYNC_FNAME(zgesv        , ZGESV        )
#define MORSE_ZGESV_INCPIV_TILE_ASYNC    MORSE_ASYNC_FNAME(zgesv_incpiv , ZGESV_INCPIV )
#define MORSE_ZGESV_NOPIV_TILE_ASYNC     MORSE_ASYNC_FNAME(zgesv_nopiv  , ZGESV_NOPIV  )
//#define MORSE_ZGESVD_TILE_ASYNC          MORSE_ASYNC_FNAME(zgesvd       , ZGESVD       )
//#define MORSE_ZGETRF_TILE_ASYNC          MORSE_ASYNC_FNAME(zgetrf       , ZGETRF       )
#define MORSE_ZGETRF_INCPIV_TILE_ASYNC   MORSE_ASYNC_FNAME(zgetrf_incpiv, ZGETRF_INCPIV)
#define MORSE_ZGETRF_NOPIV_TILE_ASYNC    MORSE_ASYNC_FNAME(zgetrf_nopiv , ZGETRF_NOPIV )
//#define MORSE_ZGETRI_TILE_ASYNC          MORSE_ASYNC_FNAME(zgetri       , ZGETRI       )
//#define MORSE_ZGETRS_TILE_ASYNC          MORSE_ASYNC_FNAME(zgetrs       , ZGETRS       )
#define MORSE_ZGETRS_INCPIV_TILE_ASYNC   MORSE_ASYNC_FNAME(zgetrs_incpiv, ZGETRS_INCPIV)
#define MORSE_ZGETRS_NOPIV_TILE_ASYNC    MORSE_ASYNC_FNAME(zgetrs_nopiv , ZGETRS_NOPIV )
//#define MORSE_ZHEEV_TILE_ASYNC           MORSE_ASYNC_FNAME(zheev        , ZHEEV        )
//#define MORSE_ZHEEVD_TILE_ASYNC          MORSE_ASYNC_FNAME(zheevd       , ZHEEVD       )
//#define MORSE_ZHEGST_TILE_ASYNC          MORSE_ASYNC_FNAME(zhegst       , ZHEGST       )
//#define MORSE_ZHEGV_TILE_ASYNC           MORSE_ASYNC_FNAME(zhegv        , ZHEGV        )
//#define MORSE_ZHEGVD_TILE_ASYNC          MORSE_ASYNC_FNAME(zhegvd       , ZHEGVD       )
#ifdef COMPLEX
#define MORSE_ZHEMM_TILE_ASYNC           MORSE_ASYNC_FNAME(zhemm        , ZHEMM        )
#define MORSE_ZHER2K_TILE_ASYNC          MORSE_ASYNC_FNAME(zher2k       , ZHER2K       )
#define MORSE_ZHERK_TILE_ASYNC           MORSE_ASYNC_FNAME(zherk        , ZHERK        )
#endif
//#define MORSE_ZHETRD_TILE_ASYNC          MORSE_ASYNC_FNAME(zhetrd       , ZHETRD       )
#define MORSE_ZLACPY_TILE_ASYNC          MORSE_ASYNC_FNAME(zlacpy       , ZLACPY       )
#define MORSE_ZLANGE_TILE_ASYNC          MORSE_ASYNC_FNAME(zlange       , ZLANGE       )
#ifdef COMPLEX
#define MORSE_ZLANHE_TILE_ASYNC          MORSE_ASYNC_FNAME(zlanhe       , ZLANHE       )
#endif
#define MORSE_ZLANSY_TILE_ASYNC          MORSE_ASYNC_FNAME(zlansy       , ZLANSY       )
#define MORSE_ZLANTR_TILE_ASYNC          MORSE_ASYNC_FNAME(zlantr       , ZLANTR       )
#define MORSE_ZLASET_TILE_ASYNC          MORSE_ASYNC_FNAME(zlaset       , ZLASET       )
//#define MORSE_ZLASWP_TILE_ASYNC          MORSE_ASYNC_FNAME(zlaswp       , ZLASWP       )
//#define MORSE_ZLASWPC_TILE_ASYNC         MORSE_ASYNC_FNAME(zlaswpc      , ZLASWPC      )
#define MORSE_ZLAUUM_TILE_ASYNC          MORSE_ASYNC_FNAME(zlauum       , ZLAUUM       )
#ifdef COMPLEX
#define MORSE_ZPLGHE_TILE_ASYNC          MORSE_ASYNC_FNAME(zplghe       , ZPLGHE       )
#endif
#define MORSE_ZPLGSY_TILE_ASYNC          MORSE_ASYNC_FNAME(zplgsy       , ZPLGSY       )
#define MORSE_ZPLRNT_TILE_ASYNC          MORSE_ASYNC_FNAME(zplrnt       , ZPLRNT       )
#define MORSE_ZPOSV_TILE_ASYNC           MORSE_ASYNC_FNAME(zposv        , ZPOSV        )
#define MORSE_ZPOTRF_TILE_ASYNC          MORSE_ASYNC_FNAME(zpotrf       , ZPOTRF       )
#define MORSE_ZPOTRI_TILE_ASYNC          MORSE_ASYNC_FNAME(zpotri       , ZPOTRI       )
#define MORSE_ZPOTRS_TILE_ASYNC          MORSE_ASYNC_FNAME(zpotrs       , ZPOTRS       )
#if defined (PRECISION_c) || defined(PRECISION_z)
#define MORSE_ZSYSV_TILE_ASYNC           MORSE_ASYNC_FNAME(zsysv        , ZSYSV        )
#define MORSE_ZSYTRF_TILE_ASYNC          MORSE_ASYNC_FNAME(zsytrf       , ZSYTRF       )
#define MORSE_ZSYTRS_TILE_ASYNC          MORSE_ASYNC_FNAME(zsytrs       , ZSYTRS       )
#endif
#define MORSE_ZSYMM_TILE_ASYNC           MORSE_ASYNC_FNAME(zsymm        , ZSYMM        )
#define MORSE_ZSYR2K_TILE_ASYNC          MORSE_ASYNC_FNAME(zsyr2k       , ZSYR2K       )
#define MORSE_ZSYRK_TILE_ASYNC           MORSE_ASYNC_FNAME(zsyrk        , ZSYRK        )
#define MORSE_ZTRMM_TILE_ASYNC           MORSE_ASYNC_FNAME(ztrmm        , ZTRMM        )
#define MORSE_ZTRSM_TILE_ASYNC           MORSE_ASYNC_FNAME(ztrsm        , ZTRSM        )
#define MORSE_ZTRSMPL_TILE_ASYNC         MORSE_ASYNC_FNAME(ztrsmpl      , ZTRSMPL      )
//#define MORSE_ZTRSMRV_TILE_ASYNC         MORSE_ASYNC_FNAME(ztrsmrv      , ZTRSMRV      )
#define MORSE_ZTRTRI_TILE_ASYNC          MORSE_ASYNC_FNAME(ztrtri       , ZTRTRI       )
#define MORSE_ZUNGLQ_TILE_ASYNC          MORSE_ASYNC_FNAME(zunglq       , ZUNGLQ       )
#define MORSE_ZUNGQR_TILE_ASYNC          MORSE_ASYNC_FNAME(zungqr       , ZUNGQR       )
#define MORSE_ZUNMLQ_TILE_ASYNC          MORSE_ASYNC_FNAME(zunmlq       , ZUNMLQ       )
#define MORSE_ZUNMQR_TILE_ASYNC          MORSE_ASYNC_FNAME(zunmqr       , ZUNMQR       )

/***************************************************************************//**
 *  FORTRAN API - workspace allocation
 **/
//#define MORSE_ALLOC_WORKSPACE_ZGEBRD              MORSE_WS_FNAME(zgebrd            , ZGEBRD            )
//#define MORSE_ALLOC_WORKSPACE_ZGEEV               MORSE_WS_FNAME(zgeev             , ZGEEV             )
//#define MORSE_ALLOC_WORKSPACE_ZGEHRD              MORSE_WS_FNAME(zgehrd            , ZGEHRD            )
#define MORSE_ALLOC_WORKSPACE_ZGELQF              MORSE_WS_FNAME(zgelqf            , ZGELQF            )
#define MORSE_ALLOC_WORKSPACE_ZGELQF_TILE         MORSE_WS_FNAME(zgelqf_tile       , ZGELQF_TILE       )
#define MORSE_ALLOC_WORKSPACE_ZGELS               MORSE_WS_FNAME(zgels             , ZGELS             )
#define MORSE_ALLOC_WORKSPACE_ZGELS_TILE          MORSE_WS_FNAME(zgels_tile        , ZGELS_TILE        )
#define MORSE_ALLOC_WORKSPACE_ZGEQRF              MORSE_WS_FNAME(zgeqrf            , ZGEQRF            )
#define MORSE_ALLOC_WORKSPACE_ZGEQRF_TILE         MORSE_WS_FNAME(zgeqrf_tile       , ZGEQRF_TILE       )
#define MORSE_ALLOC_WORKSPACE_ZGESV_INCPIV        MORSE_WS_FNAME(zgesv_incpiv      , ZGESV_INCPIV      )
#define MORSE_ALLOC_WORKSPACE_ZGESV_INCPIV_TILE   MORSE_WS_FNAME(zgesv_incpiv_tile , ZGESV_INCPIV_TILE )
//#define MORSE_ALLOC_WORKSPACE_ZGESVD              MORSE_WS_FNAME(zgesvd            , ZGESVD            )
#define MORSE_ALLOC_WORKSPACE_ZGETRF_INCPIV       MORSE_WS_FNAME(zgetrf_incpiv     , ZGETRF_INCPIV     )
#define MORSE_ALLOC_WORKSPACE_ZGETRF_INCPIV_TILE  MORSE_WS_FNAME(zgetrf_incpiv_tile, ZGETRF_INCPIV_TILE)
//#define MORSE_ALLOC_WORKSPACE_ZGETRI_TILE_ASYNC   MORSE_WS_FNAME(zgetri_tile_async , ZGETRI_TILE_ASYNC )
//#define MORSE_ALLOC_WORKSPACE_ZHEEV               MORSE_WS_FNAME(zheev             , ZHEEV             )
//#define MORSE_ALLOC_WORKSPACE_ZHEEVD              MORSE_WS_FNAME(zheevd            , ZHEEVD            )
//#define MORSE_ALLOC_WORKSPACE_ZHEGV               MORSE_WS_FNAME(zhegv             , ZHEGV             )
//#define MORSE_ALLOC_WORKSPACE_ZHEGVD              MORSE_WS_FNAME(zhegvd            , ZHEGVD            )
//#define MORSE_ALLOC_WORKSPACE_ZHETRD              MORSE_WS_FNAME(zhetrd            , ZHETRD            )



/***************************************************************************//**
 *  FORTRAN API - math functions (simple interface)
 **/
void MORSE_ZLAPACK_TO_TILE(MORSE_Complex64_t *Af77, int *LDA, MORSE_desc_t *A, int *info)
{ *info = MORSE_zLapack_to_Tile(Af77, *LDA, A); }

void MORSE_ZLAPACK_TO_TILE_ASYNC(MORSE_Complex64_t *Af77, int *LDA, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zLapack_to_Tile_Async(Af77, *LDA, A, sequence, request); }

void MORSE_ZTILE_TO_LAPACK(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int *LDA, int *info)
{ *info = MORSE_zTile_to_Lapack(A, Af77, *LDA); }

void MORSE_ZTILE_TO_LAPACK_ASYNC(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int *LDA, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zTile_to_Lapack_Async(A, Af77, *LDA, sequence, request); }

//void MORSE_ZGEBRD(int *M, int *N, MORSE_Complex64_t *A, int *LDA, double *D, double *E, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_zgebrd(*M, *N, A, *LDA, D, E, *descT); }
//
//void MORSE_ZGECFI(int *m, int *n, MORSE_Complex64_t *A, MORSE_enum *fin, int *imb, int *inb, MORSE_enum *fout, int *omb, int *onb, int *info)
//{ *info = MORSE_zgecfi(*m, *n, A, *fin, *imb, *inb, *fout, *omb, *onb); }
//
//void MORSE_ZGECFI_ASYNC(int *m, int *n, MORSE_Complex64_t *A, MORSE_enum *f_in, int *imb, int *inb, MORSE_enum *f_out, int *omb, int *onb, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgecfi_Async(*m, *n, A, *f_in, *imb, *inb, *f_out, *omb, *onb, sequence, request); }

void MORSE_ZGELQF(int *M, int *N, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, int *info)
{ *info = MORSE_zgelqf(*M, *N, A, *LDA, *descT); }

void MORSE_ZGELQS(int *M, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zgelqs(*M, *N, *NRHS, A, *LDA, *descT, B, *LDB); }

void MORSE_ZGELS(MORSE_enum *trans, int *M, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zgels(*trans, *M, *N, *NRHS, A, *LDA, *descT, B, *LDB); }

void MORSE_ZGEMM(MORSE_enum *transA, MORSE_enum *transB, int *M, int *N, int *K, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, MORSE_Complex64_t *beta, MORSE_Complex64_t *C, int *LDC, int *info)
{ *info = MORSE_zgemm(*transA, *transB, *M, *N, *K, *alpha, A, *LDA, B, *LDB, *beta, C, *LDC); }

void MORSE_ZGEQRF(int *M, int *N, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, int *info)
{ *info = MORSE_zgeqrf(*M, *N, A, *LDA, *descT); }

void MORSE_ZGEQRS(int *M, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zgeqrs(*M, *N, *NRHS, A, *LDA, *descT, B, *LDB); }

//void MORSE_ZGESV(int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, int *IPIV, MORSE_Complex64_t *B, int *LDB, int *info)
//{ *info = MORSE_zgesv(*N, *NRHS, A, *LDA, IPIV, B, *LDB); }

void MORSE_ZGESV_INCPIV(int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descL, int *IPIV, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zgesv_incpiv(*N, *NRHS, A, *LDA, *descL, IPIV, B, *LDB); }

void MORSE_ZGESV_NOPIV(int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zgesv_nopiv(*N, *NRHS, A, *LDA, B, *LDB); }

//void MORSE_ZGESVD(MORSE_enum *jobu, MORSE_enum *jobvt, int *M, int *N, MORSE_Complex64_t *A, int *LDA, double *S, MORSE_Complex64_t *U, int *LDU, MORSE_Complex64_t *VT, int *LDVT, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_zgesvd(*jobu, *jobvt, *M, *N, A, *LDA, S, U, *LDU, VT, *LDVT, *descT); }

//void MORSE_ZGETMI(int *m, int *n, MORSE_Complex64_t *A, MORSE_enum *fin, int *mb, int *nb, int *info)
//{ *info = MORSE_zgetmi(*m, *n, A, *fin, *mb, *nb); }
//
//void MORSE_ZGETMI_ASYNC(int *m, int *n, MORSE_Complex64_t *A, MORSE_enum *f_in, int *mb, int *inb, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgetmi_Async(*m, *n, A, *f_in, *mb, *inb, sequence, request); }
//
//void MORSE_ZGETRF(int *M, int *N, MORSE_Complex64_t *A, int *LDA, int *IPIV, int *info)
//{ *info = MORSE_zgetrf(*M, *N, A, *LDA, IPIV); }
void MORSE_ZGETRF_INCPIV(int *M, int *N, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descL, int *IPIV, int *info)
{ *info = MORSE_zgetrf_incpiv(*M, *N, A, *LDA, *descL, IPIV); }

void MORSE_ZGETRF_NOPIV(int *M, int *N, MORSE_Complex64_t *A, int *LDA, int *info)
{ *info = MORSE_zgetrf_nopiv(*M, *N, A, *LDA); }

//void MORSE_ZGETRI(int *N, MORSE_Complex64_t *A, int *LDA, int *IPIV, int *info)
//{ *info = MORSE_zgetri(*N, A, *LDA, IPIV); }
//
//void MORSE_ZGETRS(MORSE_enum *trans, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, int *IPIV, MORSE_Complex64_t *B, int *LDB, int *info)
//{ *info = MORSE_zgetrs(*trans, *N, *NRHS, A, *LDA, IPIV, B, *LDB); }

void MORSE_ZGETRS_INCPIV(MORSE_enum *trans, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descL, int *IPIV, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zgetrs_incpiv(*trans, *N, *NRHS, A, *LDA, *descL, IPIV, B, *LDB); }

void MORSE_ZGETRS_NOPIV(MORSE_enum *trans, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zgetrs_nopiv(*trans, *N, *NRHS, A, *LDA, B, *LDB); }

//void MORSE_ZHEEV(MORSE_enum *jobz, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, double *W, MORSE_desc_t **descT, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zheev(*jobz, *uplo, *N, A, *LDA, W, *descT, Q, *LDQ); }
//
//void MORSE_ZHEEVD(MORSE_enum *jobz, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, double *W, MORSE_desc_t **descT, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zheevd(*jobz, *uplo, *N, A, *LDA, W, *descT, Q, *LDQ); }
//
//void MORSE_ZHEGST(MORSE_enum *itype, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
//{ *info = MORSE_zhegst(*itype, *uplo, *N, A, *LDA, B, *LDB); }
//
//void MORSE_ZHEGV(MORSE_enum *itype, MORSE_enum *jobz, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, double *W, MORSE_desc_t **descT, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zhegv(*itype, *jobz, *uplo, *N, A, *LDA, B, *LDB, W, *descT, Q, *LDQ); }
//
//void MORSE_ZHEGVD(MORSE_enum *itype, MORSE_enum *jobz, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, double *W, MORSE_desc_t **descT, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zhegvd(*itype, *jobz, *uplo, *N, A, *LDA, B, *LDB, W, *descT, Q, *LDQ); }

#ifdef COMPLEX
void MORSE_ZHEMM(MORSE_enum *side, MORSE_enum *uplo, int *M, int *N, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, MORSE_Complex64_t *beta, MORSE_Complex64_t *C, int *LDC, int *info)
{ *info = MORSE_zhemm(*side, *uplo, *M, *N, *alpha, A, *LDA, B, *LDB, *beta, C, *LDC); }
#endif

#ifdef COMPLEX
void MORSE_ZHER2K(MORSE_enum *uplo, MORSE_enum *trans, int *N, int *K, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, double *beta, MORSE_Complex64_t *C, int *LDC, int *info)
{ *info = MORSE_zher2k(*uplo, *trans, *N, *K, *alpha, A, *LDA, B, *LDB, *beta, C, *LDC); }
#endif

#ifdef COMPLEX
void MORSE_ZHERK(MORSE_enum *uplo, MORSE_enum *trans, int *N, int *K, double *alpha, MORSE_Complex64_t *A, int *LDA, double *beta, MORSE_Complex64_t *C, int *LDC, int *info)
{ *info = MORSE_zherk(*uplo, *trans, *N, *K, *alpha, A, *LDA, *beta, C, *LDC); }
#endif

//void MORSE_ZHETRD(MORSE_enum *jobz, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, double *D, double *E, MORSE_desc_t **descT, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zhetrd(*jobz, *uplo, *N, A, *LDA, D, E, *descT, Q, *LDQ); }

void MORSE_ZLACPY(MORSE_enum *uplo, int *M, int *N, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zlacpy(*uplo, *M, *N, A, *LDA, B, *LDB); }

void MORSE_ZLANGE(MORSE_enum *norm, int *M, int *N, MORSE_Complex64_t *A, int *LDA, double *result)
{ *result = MORSE_zlange(*norm, *M, *N, A, *LDA); }

#ifdef COMPLEX
void MORSE_ZLANHE(MORSE_enum *norm, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, double *result)
{ *result = MORSE_zlanhe(*norm, *uplo, *N, A, *LDA); }
#endif

void MORSE_ZLANSY(MORSE_enum *norm, MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, double *result)
{ *result = MORSE_zlansy(*norm, *uplo, *N, A, *LDA); }

void MORSE_ZLANTR(MORSE_enum *norm, MORSE_enum *uplo, MORSE_enum *diag, int *M, int *N, MORSE_Complex64_t *A, int *LDA, double *result)
{ *result = MORSE_zlantr(*norm, *uplo, *diag, *M, *N, A, *LDA); }

void MORSE_ZLASET(MORSE_enum *uplo, int *M, int *N, MORSE_Complex64_t *alpha, MORSE_Complex64_t *beta, MORSE_Complex64_t *A, int *LDA, int *info)
{ *info = MORSE_zlaset(*uplo, *M, *N, *alpha, *beta, A, *LDA); }

//void MORSE_ZLASWP(int *N, MORSE_Complex64_t *A, int *LDA, int *K1, int *K2, int *IPIV, int *INCX, int *info)
//{ *info = MORSE_zlaswp(*N, A, *LDA, *K1, *K2, IPIV, *INCX); }
//
//void MORSE_ZLASWPC(int *N, MORSE_Complex64_t *A, int *LDA, int *K1, int *K2, int *IPIV, int *INCX, int *info)
//{ *info = MORSE_zlaswpc(*N, A, *LDA, *K1, *K2, IPIV, *INCX); }

void MORSE_ZLAUUM(MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, int *info)
{ *info = MORSE_zlauum(*uplo, *N, A, *LDA); }

#ifdef COMPLEX
void MORSE_ZPLGHE(double *bump, int *N, MORSE_Complex64_t *A, int *LDA, unsigned long long int  *seed, int *info)
{ *info = MORSE_zplghe(*bump, *N, A, *LDA, *seed); }
#endif

void MORSE_ZPLGSY(MORSE_Complex64_t *bump, int *N, MORSE_Complex64_t *A, int *LDA, unsigned long long int  *seed, int *info)
{ *info = MORSE_zplgsy(*bump, *N, A, *LDA, *seed); }

void MORSE_ZPLRNT(int *M, int *N, MORSE_Complex64_t *A, int *LDA, unsigned long long int  *seed, int *info)
{ *info = MORSE_zplrnt(*M, *N, A, *LDA, *seed); }

void MORSE_ZPOSV(MORSE_enum *uplo, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zposv(*uplo, *N, *NRHS, A, *LDA, B, *LDB); }

void MORSE_ZPOTRF(MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, int *info)
{ *info = MORSE_zpotrf(*uplo, *N, A, *LDA); }

void MORSE_ZPOTRI(MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, int *info)
{ *info = MORSE_zpotri(*uplo, *N, A, *LDA); }

void MORSE_ZPOTRS(MORSE_enum *uplo, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zpotrs(*uplo, *N, *NRHS, A, *LDA, B, *LDB); }

#if defined (PRECISION_c) || defined(PRECISION_z)
void MORSE_ZSYSV(MORSE_enum *uplo, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zsysv(*uplo, *N, *NRHS, A, *LDA, B, *LDB); }

void MORSE_ZSYTRF(MORSE_enum *uplo, int *N, MORSE_Complex64_t *A, int *LDA, int *info)
{ *info = MORSE_zsytrf(*uplo, *N, A, *LDA); }

void MORSE_ZSYTRS(MORSE_enum *uplo, int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zsytrs(*uplo, *N, *NRHS, A, *LDA, B, *LDB); }
#endif

void MORSE_ZSYMM(MORSE_enum *side, MORSE_enum *uplo, int *M, int *N, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, MORSE_Complex64_t *beta, MORSE_Complex64_t *C, int *LDC, int *info)
{ *info = MORSE_zsymm(*side, *uplo, *M, *N, *alpha, A, *LDA, B, *LDB, *beta, C, *LDC); }

void MORSE_ZSYR2K(MORSE_enum *uplo, MORSE_enum *trans, int *N, int *K, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, MORSE_Complex64_t *beta, MORSE_Complex64_t *C, int *LDC, int *info)
{ *info = MORSE_zsyr2k(*uplo, *trans, *N, *K, *alpha, A, *LDA, B, *LDB, *beta, C, *LDC); }

void MORSE_ZSYRK(MORSE_enum *uplo, MORSE_enum *trans, int *N, int *K, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *beta, MORSE_Complex64_t *C, int *LDC, int *info)
{ *info = MORSE_zsyrk(*uplo, *trans, *N, *K, *alpha, A, *LDA, *beta, C, *LDC); }

void MORSE_ZTRMM(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, int *N, int *NRHS, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_ztrmm(*side, *uplo, *transA, *diag, *N, *NRHS, *alpha, A, *LDA, B, *LDB); }

void MORSE_ZTRSM(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, int *N, int *NRHS, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_ztrsm(*side, *uplo, *transA, *diag, *N, *NRHS, *alpha, A, *LDA, B, *LDB); }

void MORSE_ZTRSMPL(int *N, int *NRHS, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descL, int *IPIV, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_ztrsmpl(*N, *NRHS, A, *LDA, *descL, IPIV, B, *LDB); }

//void MORSE_ZTRSMRV(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, int *N, int *NRHS, MORSE_Complex64_t *alpha, MORSE_Complex64_t *A, int *LDA, MORSE_Complex64_t *B, int *LDB, int *info)
//{ *info = MORSE_ztrsmrv(*side, *uplo, *transA, *diag, *N, *NRHS, *alpha, A, *LDA, B, *LDB); }

void MORSE_ZTRTRI(MORSE_enum *uplo, MORSE_enum *diag, int *N, MORSE_Complex64_t *A, int *LDA, int *info)
{ *info = MORSE_ztrtri(*uplo, *diag, *N, A, *LDA); }

void MORSE_ZUNGLQ(int *M, int *N, int *K, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zunglq(*M, *N, *K, A, *LDA, *descT, B, *LDB); }

void MORSE_ZUNGQR(int *M, int *N, int *K, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zungqr(*M, *N, *K, A, *LDA, *descT, B, *LDB); }

void MORSE_ZUNMLQ(MORSE_enum *side, MORSE_enum *trans, int *M, int *N, int *K, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zunmlq(*side, *trans, *M, *N, *K, A, *LDA, *descT, B, *LDB); }

void MORSE_ZUNMQR(MORSE_enum *side, MORSE_enum *trans, int *M, int *N, int *K, MORSE_Complex64_t *A, int *LDA, MORSE_desc_t **descT, MORSE_Complex64_t *B, int *LDB, int *info)
{ *info = MORSE_zunmqr(*side, *trans, *M, *N, *K, A, *LDA, *descT, B, *LDB); }


/***************************************************************************//**
 *  FORTRAN API - math functions (native interface)
 **/
//void MORSE_ZGEBRD_TILE(MORSE_desc_t *A, double *D, double *E, MORSE_desc_t *T, int *info)
//{ *info = MORSE_zgebrd_Tile(A, D, E, T); }

void MORSE_ZGELQF_TILE(MORSE_desc_t *A, MORSE_desc_t *T, int *info)
{ *info = MORSE_zgelqf_Tile(A, T); }

void MORSE_ZGELQS_TILE(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, int *info)
{ *info = MORSE_zgelqs_Tile(A, T, B); }

void MORSE_ZGELS_TILE(MORSE_enum *trans, MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, int *info)
{ *info = MORSE_zgels_Tile(*trans, A, T, B); }

void MORSE_ZGEMM_TILE(MORSE_enum *transA, MORSE_enum *transB, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, int *info)
{ *info = MORSE_zgemm_Tile(*transA, *transB, *alpha, A, B, *beta, C); }

void MORSE_ZGEQRF_TILE(MORSE_desc_t *A, MORSE_desc_t *T, int *info)
{ *info = MORSE_zgeqrf_Tile(A, T); }

void MORSE_ZGEQRS_TILE(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, int *info)
{ *info = MORSE_zgeqrs_Tile(A, T, B); }

//void MORSE_ZGESV_TILE(MORSE_desc_t *A, int *IPIV, MORSE_desc_t *B, int *info)
//{ *info = MORSE_zgesv_Tile(A, IPIV, B); }

void MORSE_ZGESV_INCPIV_TILE(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t *B, int *info)
{ *info = MORSE_zgesv_incpiv_Tile(A, L, IPIV, B); }

void MORSE_ZGESV_NOPIV_TILE(MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_zgesv_nopiv_Tile(A, B); }

//void MORSE_ZGESVD_TILE(MORSE_enum *jobu, MORSE_enum *jobvt, MORSE_desc_t *A, double *S, MORSE_desc_t *U, MORSE_desc_t *VT, MORSE_desc_t *T, int *info)
//{ *info = MORSE_zgesvd_Tile(*jobu, *jobvt, A, S, U, VT, T); }

//void MORSE_ZGETRF_TILE(MORSE_desc_t *A, int *IPIV, int *info)
//{ *info = MORSE_zgetrf_Tile(A, IPIV); }

void MORSE_ZGETRF_INCPIV_TILE(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, int *info)
{ *info = MORSE_zgetrf_incpiv_Tile(A, L, IPIV); }

void MORSE_ZGETRF_NOPIV_TILE(MORSE_desc_t *A, int *info)
{ *info = MORSE_zgetrf_nopiv_Tile(A); }

//void MORSE_ZGETRI_TILE(MORSE_desc_t *A, int *IPIV, int *info)
//{ *info = MORSE_zgetri_Tile(A, IPIV); }
//
//void MORSE_ZGETRS_TILE(MORSE_enum *trans, MORSE_desc_t *A, int *IPIV, MORSE_desc_t *B, int *info)
//{ *info = MORSE_zgetrs_Tile(*trans, A, IPIV, B); }

void MORSE_ZGETRS_INCPIV_TILE(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t *B, int *info)
{ *info = MORSE_zgetrs_incpiv_Tile(A, L, IPIV, B); }

void MORSE_ZGETRS_NOPIV_TILE(MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_zgetrs_nopiv_Tile(A, B); }

//void MORSE_ZHEEV_TILE(MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, double *W, MORSE_desc_t *T, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zheev_Tile(*jobz, *uplo, A, W, T, Q, *LDQ); }
//
//void MORSE_ZHEEVD_TILE(MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, double *W, MORSE_desc_t *T, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zheevd_Tile(*jobz, *uplo, A, W, T, Q, *LDQ); }
//
//void MORSE_ZHEGST_TILE(MORSE_enum *itype, MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
//{ *info = MORSE_zhegst_Tile(*itype, *uplo, A, B); }
//
//void MORSE_ZHEGV_TILE(MORSE_enum *itype, MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, double *W, MORSE_desc_t *T, MORSE_desc_t *Q, int *info)
//{ *info = MORSE_zhegv_Tile(*itype, *jobz, *uplo, A, B, W, T, Q); }
//
//void MORSE_ZHEGVD_TILE(MORSE_enum *itype, MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, double *W, MORSE_desc_t *T, MORSE_desc_t *Q, int *info)
//{ *info = MORSE_zhegvd_Tile(*itype, *jobz, *uplo, A, B, W, T, Q); }

#ifdef COMPLEX
void MORSE_ZHEMM_TILE(MORSE_enum *side, MORSE_enum *uplo, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, int *info)
{ *info = MORSE_zhemm_Tile(*side, *uplo, *alpha, A, B, *beta, C); }
#endif

#ifdef COMPLEX
void MORSE_ZHER2K_TILE(MORSE_enum *uplo, MORSE_enum *trans, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, double *beta, MORSE_desc_t *C, int *info)
{ *info = MORSE_zher2k_Tile(*uplo, *trans, *alpha, A, B, *beta, C); }
#endif

#ifdef COMPLEX
void MORSE_ZHERK_TILE(MORSE_enum *uplo, MORSE_enum *trans, double *alpha, MORSE_desc_t *A, double *beta, MORSE_desc_t *C, int *info)
{ *info = MORSE_zherk_Tile(*uplo, *trans, *alpha, A, *beta, C); }
#endif

//void MORSE_ZHETRD_TILE(MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, double *D, double *E, MORSE_desc_t *T, MORSE_Complex64_t *Q, int *LDQ, int *info)
//{ *info = MORSE_zhetrd_Tile(*jobz, *uplo, A, D, E, T, Q, *LDQ); }

void MORSE_ZLACPY_TILE(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_zlacpy_Tile(*uplo, A, B); }

void MORSE_ZLANGE_TILE(MORSE_enum *norm, MORSE_desc_t *A, double *result)
{ *result = MORSE_zlange_Tile(*norm, A); }

#ifdef COMPLEX
void MORSE_ZLANHE_TILE(MORSE_enum *norm, MORSE_enum *uplo, MORSE_desc_t *A, double *result)
{ *result = MORSE_zlanhe_Tile(*norm, *uplo, A); }
#endif

void MORSE_ZLANSY_TILE(MORSE_enum *norm, MORSE_enum *uplo, MORSE_desc_t *A, double *result)
{ *result = MORSE_zlansy_Tile(*norm, *uplo, A); }

void MORSE_ZLANTR_TILE(MORSE_enum *norm, MORSE_enum *uplo, MORSE_enum *diag, MORSE_desc_t *A, double *result)
{ *result = MORSE_zlantr_Tile(*norm, *uplo, *diag, A); }

void MORSE_ZLASET_TILE(MORSE_enum *uplo, MORSE_Complex64_t *alpha, MORSE_Complex64_t *beta, MORSE_desc_t *A, int *info)
{ *info = MORSE_zlaset_Tile(*uplo, *alpha, *beta, A); }

//void MORSE_ZLASWP_TILE(MORSE_desc_t *A, int *K1, int *K2, int *IPIV, int *INCX, int *info)
//{ *info = MORSE_zlaswp_Tile(A, *K1, *K2, IPIV, *INCX); }
//
//void MORSE_ZLASWPC_TILE(MORSE_desc_t *A, int *K1, int *K2, int *IPIV, int *INCX, int *info)
//{ *info = MORSE_zlaswpc_Tile(A, *K1, *K2, IPIV, *INCX); }

void MORSE_ZLAUUM_TILE(MORSE_enum *uplo, MORSE_desc_t *A, int *info)
{ *info = MORSE_zlauum_Tile(*uplo, A); }

#ifdef COMPLEX
void MORSE_ZPLGHE_TILE(double *bump, MORSE_desc_t *A, unsigned long long int  *seed, int *info)
{ *info = MORSE_zplghe_Tile(*bump, A, *seed); }
#endif

void MORSE_ZPLGSY_TILE(MORSE_Complex64_t *bump, MORSE_desc_t *A, unsigned long long int  *seed, int *info)
{ *info = MORSE_zplgsy_Tile(*bump, A, *seed); }

void MORSE_ZPLRNT_TILE(MORSE_desc_t *A, unsigned long long int  *seed, int *info)
{ *info = MORSE_zplrnt_Tile(A, *seed); }

void MORSE_ZPOSV_TILE(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_zposv_Tile(*uplo, A, B); }

void MORSE_ZPOTRF_TILE(MORSE_enum *uplo, MORSE_desc_t *A, int *info)
{ *info = MORSE_zpotrf_Tile(*uplo, A); }

void MORSE_ZPOTRI_TILE(MORSE_enum *uplo, MORSE_desc_t *A, int *info)
{ *info = MORSE_zpotri_Tile(*uplo, A); }

void MORSE_ZPOTRS_TILE(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_zpotrs_Tile(*uplo, A, B); }

#if defined (PRECISION_c) || defined(PRECISION_z)
void MORSE_ZSYSV_TILE(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_zsysv_Tile(*uplo, A, B); }

void MORSE_ZSYTRF_TILE(MORSE_enum *uplo, MORSE_desc_t *A, int *info)
{ *info = MORSE_zsytrf_Tile(*uplo, A); }

void MORSE_ZSYTRS_TILE(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_zsytrs_Tile(*uplo, A, B); }
#endif

void MORSE_ZSYMM_TILE(MORSE_enum *side, MORSE_enum *uplo, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, int *info)
{ *info = MORSE_zsymm_Tile(*side, *uplo, *alpha, A, B, *beta, C); }

void MORSE_ZSYR2K_TILE(MORSE_enum *uplo, MORSE_enum *trans, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, int *info)
{ *info = MORSE_zsyr2k_Tile(*uplo, *trans, *alpha, A, B, *beta, C); }

void MORSE_ZSYRK_TILE(MORSE_enum *uplo, MORSE_enum *trans, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_Complex64_t *beta, MORSE_desc_t *C, int *info)
{ *info = MORSE_zsyrk_Tile(*uplo, *trans, *alpha, A, *beta, C); }

void MORSE_ZTRMM_TILE(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_ztrmm_Tile(*side, *uplo, *transA, *diag, *alpha, A, B); }

void MORSE_ZTRSM_TILE(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
{ *info = MORSE_ztrsm_Tile(*side, *uplo, *transA, *diag, *alpha, A, B); }

void MORSE_ZTRSMPL_TILE(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t *B, int *info)
{ *info = MORSE_ztrsmpl_Tile(A, L, IPIV, B); }

//void MORSE_ZTRSMRV_TILE(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, int *info)
//{ *info = MORSE_ztrsmrv_Tile(*side, *uplo, *transA, *diag, *alpha, A, B); }

void MORSE_ZTRTRI_TILE(MORSE_enum *uplo, MORSE_enum *diag, MORSE_desc_t *A, int *info)
{ *info = MORSE_ztrtri_Tile(*uplo, *diag, A); }

void MORSE_ZUNGLQ_TILE(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, int *info)
{ *info = MORSE_zunglq_Tile(A, T, B); }

void MORSE_ZUNGQR_TILE(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, int *info)
{ *info = MORSE_zungqr_Tile(A, T, B); }

void MORSE_ZUNMLQ_TILE(MORSE_enum *side, MORSE_enum *trans, MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, int *info)
{ *info = MORSE_zunmlq_Tile(*side, *trans, A, T, B); }

void MORSE_ZUNMQR_TILE(MORSE_enum *side, MORSE_enum *trans, MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, int *info)
{ *info = MORSE_zunmqr_Tile(*side, *trans, A, T, B); }


/***************************************************************************//**
 *  FORTRAN API - math functions (asynchronous interface)
 **/
//void MORSE_ZGEBRD_TILE_ASYNC(MORSE_desc_t *A, double *D, double *E, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgebrd_Tile_Async(A, D, E, T, sequence, request); }

void MORSE_ZGELQF_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgelqf_Tile_Async(A, T, sequence, request); }
void MORSE_ZGELQS_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgelqs_Tile_Async(A, T, B, sequence, request); }

void MORSE_ZGELS_TILE_ASYNC(MORSE_enum *trans, MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgels_Tile_Async(*trans, A, T, B, sequence, request); }

void MORSE_ZGEMM_TILE_ASYNC(MORSE_enum *transA, MORSE_enum *transB, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgemm_Tile_Async(*transA, *transB, *alpha, A, B, *beta, C, sequence, request); }

void MORSE_ZGEQRF_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgeqrf_Tile_Async(A, T, sequence, request); }

void MORSE_ZGEQRS_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgeqrs_Tile_Async(A, T, B, sequence, request); }

//void MORSE_ZGESV_TILE_ASYNC(MORSE_desc_t *A, int *IPIV, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgesv_Tile_Async(A, IPIV, B, sequence, request); }

void MORSE_ZGESV_INCPIV_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgesv_incpiv_Tile_Async(A, L, IPIV, B, sequence, request); }

//void MORSE_ZGESV_NOPIV_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgesv_nopiv_Tile_Async(A, B, sequence, request); }
//
//void MORSE_ZGESVD_TILE_ASYNC(MORSE_enum *jobu, MORSE_enum *jobvt, MORSE_desc_t *A, double *S, MORSE_desc_t *U, MORSE_desc_t *VT, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgesvd_Tile_Async(*jobu, *jobvt, A, S, U, VT, T, sequence, request); }

//void MORSE_ZGETRF_TILE_ASYNC(MORSE_desc_t *A, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgetrf_Tile_Async(A, IPIV, sequence, request); }

void MORSE_ZGETRF_INCPIV_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgetrf_incpiv_Tile_Async(A, L, IPIV, sequence, request); }

void MORSE_ZGETRF_NOPIV_TILE_ASYNC(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgetrf_nopiv_Tile_Async(A, sequence, request); }

//void MORSE_ZGETRI_TILE_ASYNC(MORSE_desc_t *A, int *IPIV, MORSE_desc_t *W, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgetri_Tile_Async(A, IPIV, W, sequence, request); }
//
//void MORSE_ZGETRS_TILE_ASYNC(MORSE_enum *trans, MORSE_desc_t *A, int *IPIV, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zgetrs_Tile_Async(*trans, A, IPIV, B, sequence, request); }

void MORSE_ZGETRS_INCPIV_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgetrs_incpiv_Tile_Async(A, L, IPIV, B, sequence, request); }

void MORSE_ZGETRS_NOPIV_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zgetrs_nopiv_Tile_Async(A, B, sequence, request); }

//void MORSE_ZHEEV_TILE_ASYNC(MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, double *W, MORSE_desc_t *T, MORSE_Complex64_t *Q, int *LDQ, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zheev_Tile_Async(*jobz, *uplo, A, W, T, Q, *LDQ, sequence, request); }
//
//void MORSE_ZHEEVD_TILE_ASYNC(MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, double *W, MORSE_desc_t *T, MORSE_Complex64_t *Q, int *LDQ, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zheevd_Tile_Async(*jobz, *uplo, A, W, T, Q, *LDQ, sequence, request); }
//
//void MORSE_ZHEGST_TILE_ASYNC(MORSE_enum *itype, MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zhegst_Tile_Async(*itype, *uplo, A, B, sequence, request); }
//
//void MORSE_ZHEGV_TILE_ASYNC(MORSE_enum *itype, MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, double *W, MORSE_desc_t *T, MORSE_desc_t *Q, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zhegv_Tile_Async(*itype, *jobz, *uplo, A, B, W, T, Q, sequence, request); }
//
//void MORSE_ZHEGVD_TILE_ASYNC(MORSE_enum *itype, MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, double *W, MORSE_desc_t *T, MORSE_desc_t *Q, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zhegvd_Tile_Async(*itype, *jobz, *uplo, A, B, W, T, Q, sequence, request); }

#ifdef COMPLEX
void MORSE_ZHEMM_TILE_ASYNC(MORSE_enum *side, MORSE_enum *uplo, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zhemm_Tile_Async(*side, *uplo, *alpha, A, B, *beta, C, sequence, request); }
#endif

#ifdef COMPLEX
void MORSE_ZHER2K_TILE_ASYNC(MORSE_enum *uplo, MORSE_enum *trans, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, double *beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zher2k_Tile_Async(*uplo, *trans, *alpha, A, B, *beta, C, sequence, request); }
#endif

#ifdef COMPLEX
void MORSE_ZHERK_TILE_ASYNC(MORSE_enum *uplo, MORSE_enum *trans, double *alpha, MORSE_desc_t *A, double *beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zherk_Tile_Async(*uplo, *trans, *alpha, A, *beta, C, sequence, request); }
#endif

//void MORSE_ZHETRD_TILE_ASYNC(MORSE_enum *jobz, MORSE_enum *uplo, MORSE_desc_t *A, double *D, double *E, MORSE_desc_t *T, MORSE_Complex64_t *Q, int *LDQ, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zhetrd_Tile_Async(*jobz, *uplo, A, D, E, T, Q, *LDQ, sequence, request); }

void MORSE_ZLACPY_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zlacpy_Tile_Async(*uplo, A, B, sequence, request); }

void MORSE_ZLANGE_TILE_ASYNC(MORSE_enum *norm, MORSE_desc_t *A, double *value, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zlange_Tile_Async(*norm, A, value, sequence, request); }

#ifdef COMPLEX
void MORSE_ZLANHE_TILE_ASYNC(MORSE_enum *norm, MORSE_enum *uplo, MORSE_desc_t *A, double *value, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zlanhe_Tile_Async(*norm, *uplo, A, value, sequence, request); }
#endif

void MORSE_ZLANSY_TILE_ASYNC(MORSE_enum *norm, MORSE_enum *uplo, MORSE_desc_t *A, double *value, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zlansy_Tile_Async(*norm, *uplo, A, value, sequence, request); }

void MORSE_ZLANTR_TILE_ASYNC(MORSE_enum *norm, MORSE_enum *uplo, MORSE_enum *diag, MORSE_desc_t *A, double *value, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zlantr_Tile_Async(*norm, *uplo, *diag, A, value, sequence, request); }

void MORSE_ZLASET_TILE_ASYNC(MORSE_enum *uplo, MORSE_Complex64_t *alpha, MORSE_Complex64_t *beta, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zlaset_Tile_Async(*uplo, *alpha, *beta, A, sequence, request); }

//void MORSE_ZLASWP_TILE_ASYNC(MORSE_desc_t *A, int *K1, int *K2, int *IPIV, int *INCX, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zlaswp_Tile_Async(A, *K1, *K2, IPIV, *INCX, sequence, request); }
//
//void MORSE_ZLASWPC_TILE_ASYNC(MORSE_desc_t *A, int *K1, int *K2, int *IPIV, int *INCX, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_zlaswpc_Tile_Async(A, *K1, *K2, IPIV, *INCX, sequence, request); }

void MORSE_ZLAUUM_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zlauum_Tile_Async(*uplo, A, sequence, request); }

#ifdef COMPLEX
void MORSE_ZPLGHE_TILE_ASYNC(double *bump, MORSE_desc_t *A, unsigned long long int *seed, MORSE_sequence_t *sequence, MORSE_request_t * *request, int *info)
{ *info = MORSE_zplghe_Tile_Async(*bump, A, *seed, sequence, *request); }
#endif

void MORSE_ZPLGSY_TILE_ASYNC(MORSE_Complex64_t *bump, MORSE_desc_t *A, unsigned long long int *seed, MORSE_sequence_t *sequence, MORSE_request_t * *request, int *info)
{ *info = MORSE_zplgsy_Tile_Async(*bump, A, *seed, sequence, *request); }

void MORSE_ZPLRNT_TILE_ASYNC(MORSE_desc_t *A, unsigned long long int *seed, MORSE_sequence_t *sequence, MORSE_request_t * *request, int *info)
{ *info = MORSE_zplrnt_Tile_Async(A, *seed, sequence, *request); }

void MORSE_ZPOSV_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zposv_Tile_Async(*uplo, A, B, sequence, request); }

void MORSE_ZPOTRF_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zpotrf_Tile_Async(*uplo, A, sequence, request); }

void MORSE_ZPOTRI_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zpotri_Tile_Async(*uplo, A, sequence, request); }

void MORSE_ZPOTRS_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zpotrs_Tile_Async(*uplo, A, B, sequence, request); }

#if defined (PRECISION_c) || defined(PRECISION_z)
void MORSE_ZSYSV_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zsysv_Tile_Async(*uplo, A, B, sequence, request); }

void MORSE_ZSYTRF_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zsytrf_Tile_Async(*uplo, A, sequence, request); }
void MORSE_ZSYTRS_TILE_ASYNC(MORSE_enum *uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zsytrs_Tile_Async(*uplo, A, B, sequence, request); }
#endif

void MORSE_ZSYMM_TILE_ASYNC(MORSE_enum *side, MORSE_enum *uplo, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zsymm_Tile_Async(*side, *uplo, *alpha, A, B, *beta, C, sequence, request); }

void MORSE_ZSYR2K_TILE_ASYNC(MORSE_enum *uplo, MORSE_enum *trans, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t *beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zsyr2k_Tile_Async(*uplo, *trans, *alpha, A, B, *beta, C, sequence, request); }

void MORSE_ZSYRK_TILE_ASYNC(MORSE_enum *uplo, MORSE_enum *trans, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_Complex64_t *beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zsyrk_Tile_Async(*uplo, *trans, *alpha, A, *beta, C, sequence, request); }

void MORSE_ZTRMM_TILE_ASYNC(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_ztrmm_Tile_Async(*side, *uplo, *transA, *diag, *alpha, A, B, sequence, request); }

void MORSE_ZTRSM_TILE_ASYNC(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_ztrsm_Tile_Async(*side, *uplo, *transA, *diag, *alpha, A, B, sequence, request); }

void MORSE_ZTRSMPL_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_ztrsmpl_Tile_Async(A, L, IPIV, B, sequence, request); }

//void MORSE_ZTRSMRV_TILE_ASYNC(MORSE_enum *side, MORSE_enum *uplo, MORSE_enum *transA, MORSE_enum *diag, MORSE_Complex64_t *alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
//{ *info = MORSE_ztrsmrv_Tile_Async(*side, *uplo, *transA, *diag, *alpha, A, B, sequence, request); }

void MORSE_ZTRTRI_TILE_ASYNC(MORSE_enum *uplo, MORSE_enum *diag, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_ztrtri_Tile_Async(*uplo, *diag, A, sequence, request); }

void MORSE_ZUNGLQ_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zunglq_Tile_Async(A, T, B, sequence, request); }

void MORSE_ZUNGQR_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zungqr_Tile_Async(A, T, B, sequence, request); }

void MORSE_ZUNMLQ_TILE_ASYNC(MORSE_enum *side, MORSE_enum *trans, MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zunmlq_Tile_Async(*side, *trans, A, T, B, sequence, request); }

void MORSE_ZUNMQR_TILE_ASYNC(MORSE_enum *side, MORSE_enum *trans, MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request, int *info)
{ *info = MORSE_zunmqr_Tile_Async(*side, *trans, A, T, B, sequence, request); }


/***************************************************************************//**
 *  FORTRAN API - workspace allocation
 **/
//void MORSE_ALLOC_WORKSPACE_ZGEBRD(int *M, int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zgebrd(*M, *N, descT); }
//
//void MORSE_ALLOC_WORKSPACE_ZGEEV(int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zgeev(*N, descT); }
//
//void MORSE_ALLOC_WORKSPACE_ZGEHRD(int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zgehrd(*N, descT); }

void MORSE_ALLOC_WORKSPACE_ZGELQF(int *M, int *N, MORSE_desc_t **T, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgelqf(*M, *N, T, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGELQF_TILE(int *M, int *N, MORSE_desc_t **descT, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgelqf_Tile(*M, *N, descT, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGELS(int *M, int *N, MORSE_desc_t **T, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgels(*M, *N, T, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGELS_TILE(int *M, int *N, MORSE_desc_t **descT, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgels_Tile(*M, *N, descT, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGEQRF(int *M, int *N, MORSE_desc_t **T, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgeqrf(*M, *N, T, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGEQRF_TILE(int *M, int *N, MORSE_desc_t **descT, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgeqrf_Tile(*M, *N, descT, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGESV_INCPIV(int *N, MORSE_desc_t **descL, int **IPIV, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgesv_incpiv(*N, descL, IPIV, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGESV_INCPIV_TILE (int *N, MORSE_desc_t **descL, int **IPIV, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgesv_incpiv_Tile (*N, descL, IPIV, *p, *q); }

//void MORSE_ALLOC_WORKSPACE_ZGESVD(int *M, int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zgesvd(*M, *N, descT); }

void MORSE_ALLOC_WORKSPACE_ZGETRF_INCPIV(int *M, int *N, MORSE_desc_t **descL, int **IPIV, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgetrf_incpiv(*M, *N, descL, IPIV, *p, *q); }

void MORSE_ALLOC_WORKSPACE_ZGETRF_INCPIV_TILE(int *N, MORSE_desc_t **descL, int **IPIV, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgetrf_incpiv_Tile(*N, descL, IPIV, *p, *q); }

//void MORSE_ALLOC_WORKSPACE_ZGETRI_TILE_ASYNC(MORSE_desc_t *A, MORSE_desc_t *W, int *info)
//{ *info = MORSE_Alloc_Workspace_zgetri_Tile_Async(A, W); }

//void MORSE_ALLOC_WORKSPACE_ZHEEV(int *M, int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zheev(*M, *N, descT); }
//
//void MORSE_ALLOC_WORKSPACE_ZHEEVD(int *M, int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zheevd(*M, *N, descT); }
//
//void MORSE_ALLOC_WORKSPACE_ZHEGV(int *M, int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zhegv(*M, *N, descT); }
//
//void MORSE_ALLOC_WORKSPACE_ZHEGVD(int *M, int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zhegvd(*M, *N, descT); }
//
//void MORSE_ALLOC_WORKSPACE_ZHETRD(int *M, int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zhetrd(*M, *N, descT); }