@@ -29,15 +29,16 @@ void RELAPACK_dgetrf( | |||||
return; | return; | ||||
} | } | ||||
const blasint sn = MIN(*m, *n); | |||||
if (*m == 0 || *n == 0) return; | |||||
const blasint sn = MIN(*m, *n); | |||||
RELAPACK_dgetrf_rec(m, &sn, A, ldA, ipiv, info); | RELAPACK_dgetrf_rec(m, &sn, A, ldA, ipiv, info); | ||||
// Right remainder | // Right remainder | ||||
if (*m < *n) { | if (*m < *n) { | ||||
// Constants | // Constants | ||||
const double ONE[] = { 1. }; | const double ONE[] = { 1. }; | ||||
const blasint iONE[] = { 1. }; | |||||
const blasint iONE[] = { 1 }; | |||||
// Splitting | // Splitting | ||||
const blasint rn = *n - *m; | const blasint rn = *n - *m; | ||||
@@ -60,13 +61,11 @@ static void RELAPACK_dgetrf_rec( | |||||
double *A, const blasint *ldA, blasint *ipiv, | double *A, const blasint *ldA, blasint *ipiv, | ||||
blasint *info | blasint *info | ||||
) { | ) { | ||||
if (*n <= MAX(CROSSOVER_DGETRF, 1)) { | |||||
if ( *n <= MAX(CROSSOVER_DGETRF, 1)) { | |||||
// Unblocked | // Unblocked | ||||
LAPACK(dgetf2)(m, n, A, ldA, ipiv, info); | |||||
LAPACK(dgetrf2)(m, n, A, ldA, ipiv, info); | |||||
return; | return; | ||||
} | } | ||||
// Constants | // Constants | ||||
const double ONE[] = { 1. }; | const double ONE[] = { 1. }; | ||||
const double MONE[] = { -1. }; | const double MONE[] = { -1. }; | ||||
@@ -95,6 +94,7 @@ static void RELAPACK_dgetrf_rec( | |||||
// recursion(A_L, ipiv_T) | // recursion(A_L, ipiv_T) | ||||
RELAPACK_dgetrf_rec(m, &n1, A_L, ldA, ipiv_T, info); | RELAPACK_dgetrf_rec(m, &n1, A_L, ldA, ipiv_T, info); | ||||
if (*info) return; | |||||
// apply pivots to A_R | // apply pivots to A_R | ||||
LAPACK(dlaswp)(&n2, A_R, ldA, iONE, &n1, ipiv_T, iONE); | LAPACK(dlaswp)(&n2, A_R, ldA, iONE, &n1, ipiv_T, iONE); | ||||
@@ -36,7 +36,7 @@ void RELAPACK_dsytrf( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork < 1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -67,6 +67,7 @@ void RELAPACK_dsytrf( | |||||
blasint nout; | blasint nout; | ||||
// Recursive kernel | // Recursive kernel | ||||
if (*n != 0) | |||||
RELAPACK_dsytrf_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | RELAPACK_dsytrf_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | ||||
#if XSYTRF_ALLOW_MALLOC | #if XSYTRF_ALLOW_MALLOC | ||||
@@ -36,7 +36,7 @@ void RELAPACK_dsytrf_rook( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork <1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -56,7 +56,7 @@ void RELAPACK_dsytrf_rook( | |||||
if (*info) { | if (*info) { | ||||
const blasint minfo = -*info; | const blasint minfo = -*info; | ||||
LAPACK(xerbla)("DSYTRF", &minfo, strlen("DSYTRF")); | |||||
LAPACK(xerbla)("DSYTRF_ROOK", &minfo, strlen("DSYTRF_ROOK")); | |||||
return; | return; | ||||
} | } | ||||
@@ -49,6 +49,11 @@ void RELAPACK_dtrsyl( | |||||
return; | return; | ||||
} | } | ||||
if (*m == 0 || *n == 0) { | |||||
*scale = 1.; | |||||
return; | |||||
} | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleantranA = notransA ? 'N' : (transA ? 'T' : 'C'); | const char cleantranA = notransA ? 'N' : (transA ? 'T' : 'C'); | ||||
const char cleantranB = notransB ? 'N' : (transB ? 'T' : 'C'); | const char cleantranB = notransB ? 'N' : (transB ? 'T' : 'C'); | ||||
@@ -30,6 +30,7 @@ void RELAPACK_zgetrf( | |||||
return; | return; | ||||
} | } | ||||
if (*m == 0 || *n == 0) return; | |||||
const blasint sn = MIN(*m, *n); | const blasint sn = MIN(*m, *n); | ||||
RELAPACK_zgetrf_rec(m, &sn, A, ldA, ipiv, info); | RELAPACK_zgetrf_rec(m, &sn, A, ldA, ipiv, info); | ||||
@@ -62,9 +63,11 @@ static void RELAPACK_zgetrf_rec( | |||||
blasint *info | blasint *info | ||||
) { | ) { | ||||
if (*n <= MAX(CROSSOVER_ZGETRF, 1)) { | |||||
if (*m == 0 || *n == 0) return; | |||||
if ( *n <= MAX(CROSSOVER_ZGETRF, 1)) { | |||||
// Unblocked | // Unblocked | ||||
LAPACK(zgetf2)(m, n, A, ldA, ipiv, info); | |||||
LAPACK(zgetrf2)(m, n, A, ldA, ipiv, info); | |||||
return; | return; | ||||
} | } | ||||
@@ -96,6 +99,8 @@ static void RELAPACK_zgetrf_rec( | |||||
// recursion(A_L, ipiv_T) | // recursion(A_L, ipiv_T) | ||||
RELAPACK_zgetrf_rec(m, &n1, A_L, ldA, ipiv_T, info); | RELAPACK_zgetrf_rec(m, &n1, A_L, ldA, ipiv_T, info); | ||||
if (*info) return; | |||||
// apply pivots to A_R | // apply pivots to A_R | ||||
LAPACK(zlaswp)(&n2, A_R, ldA, iONE, &n1, ipiv_T, iONE); | LAPACK(zlaswp)(&n2, A_R, ldA, iONE, &n1, ipiv_T, iONE); | ||||
@@ -36,7 +36,7 @@ void RELAPACK_zhetrf_rook( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork < 1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -56,7 +56,7 @@ void RELAPACK_zhetrf_rook( | |||||
if (*info) { | if (*info) { | ||||
const blasint minfo = -*info; | const blasint minfo = -*info; | ||||
LAPACK(xerbla)("ZHETRF", &minfo, strlen("ZHETRF")); | |||||
LAPACK(xerbla)("ZHETRF_ROOK", &minfo, strlen("ZHETRF_ROOK")); | |||||
return; | return; | ||||
} | } | ||||
@@ -36,7 +36,7 @@ void RELAPACK_zsytrf( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork < 1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -67,6 +67,7 @@ void RELAPACK_zsytrf( | |||||
blasint nout; | blasint nout; | ||||
// Recursive kernel | // Recursive kernel | ||||
if (*n != 0) | |||||
RELAPACK_zsytrf_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | RELAPACK_zsytrf_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | ||||
#if XSYTRF_ALLOW_MALLOC | #if XSYTRF_ALLOW_MALLOC | ||||
@@ -36,7 +36,7 @@ void RELAPACK_zsytrf_rook( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork < 1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -56,7 +56,7 @@ void RELAPACK_zsytrf_rook( | |||||
if (*info) { | if (*info) { | ||||
const blasint minfo = -*info; | const blasint minfo = -*info; | ||||
LAPACK(xerbla)("ZSYTRF", &minfo, strlen("ZSYTRF")); | |||||
LAPACK(xerbla)("ZSYTRF_ROOK", &minfo, strlen("ZSYTRF_ROOK")); | |||||
return; | return; | ||||
} | } | ||||
@@ -67,6 +67,7 @@ void RELAPACK_zsytrf_rook( | |||||
blasint nout; | blasint nout; | ||||
// Recursive kernel | // Recursive kernel | ||||
if (*n != 0) | |||||
RELAPACK_zsytrf_rook_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | RELAPACK_zsytrf_rook_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | ||||
#if XSYTRF_ALLOW_MALLOC | #if XSYTRF_ALLOW_MALLOC | ||||
@@ -47,6 +47,11 @@ void RELAPACK_ztrsyl( | |||||
return; | return; | ||||
} | } | ||||
if (*m == 0 || *n == 0) { | |||||
*scale = 1.; | |||||
return; | |||||
} | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleantranA = notransA ? 'N' : 'C'; | const char cleantranA = notransA ? 'N' : 'C'; | ||||
const char cleantranB = notransB ? 'N' : 'C'; | const char cleantranB = notransB ? 'N' : 'C'; | ||||
@@ -69,8 +69,8 @@ static void RELAPACK_ztrtri_rec( | |||||
} | } | ||||
// Constants | // Constants | ||||
const double ONE[] = { 1. }; | |||||
const double MONE[] = { -1. }; | |||||
const double ONE[] = { 1., 0. }; | |||||
const double MONE[] = { -1. , 0. }; | |||||
// Splitting | // Splitting | ||||
const blasint n1 = ZREC_SPLIT(*n); | const blasint n1 = ZREC_SPLIT(*n); | ||||