Merge branch 'develop' into issue1593-2
This commit is contained in:
commit
358d4df2bd
|
@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 2.8.5)
|
||||||
project(OpenBLAS C ASM)
|
project(OpenBLAS C ASM)
|
||||||
set(OpenBLAS_MAJOR_VERSION 0)
|
set(OpenBLAS_MAJOR_VERSION 0)
|
||||||
set(OpenBLAS_MINOR_VERSION 3)
|
set(OpenBLAS_MINOR_VERSION 3)
|
||||||
set(OpenBLAS_PATCH_VERSION 0.dev)
|
set(OpenBLAS_PATCH_VERSION 1.dev)
|
||||||
set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}")
|
set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}")
|
||||||
|
|
||||||
# Adhere to GNU filesystem layout conventions
|
# Adhere to GNU filesystem layout conventions
|
||||||
|
|
9
Makefile
9
Makefile
|
@ -294,9 +294,10 @@ endif
|
||||||
|
|
||||||
lapack-test :
|
lapack-test :
|
||||||
(cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out)
|
(cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out)
|
||||||
$(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintstrfd xlintstrfz xlintsts xlintstz xlintstzc xlintstrfs xlintstrfc
|
$(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING/EIG xeigtstc xeigtstd xeigtsts xeigtstz
|
||||||
|
$(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING/LIN xlintstc xlintstd xlintstds xlintstrfd xlintstrfz xlintsts xlintstz xlintstzc xlintstrfs xlintstrfc
|
||||||
ifneq ($(CROSS), 1)
|
ifneq ($(CROSS), 1)
|
||||||
( cd $(NETLIB_LAPACK_DIR)/INSTALL; ./testlsame; ./testslamch; ./testdlamch; \
|
( cd $(NETLIB_LAPACK_DIR)/INSTALL; make all; ./testlsame; ./testslamch; ./testdlamch; \
|
||||||
./testsecond; ./testdsecnd; ./testieee; ./testversion )
|
./testsecond; ./testdsecnd; ./testieee; ./testversion )
|
||||||
(cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
|
(cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
|
||||||
endif
|
endif
|
||||||
|
@ -308,9 +309,9 @@ lapack-runtest:
|
||||||
|
|
||||||
|
|
||||||
blas-test:
|
blas-test:
|
||||||
(cd $(NETLIB_LAPACK_DIR)/BLAS && rm -f x* *.out)
|
(cd $(NETLIB_LAPACK_DIR)/BLAS/TESTING && rm -f x* *.out)
|
||||||
$(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing
|
$(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing
|
||||||
(cd $(NETLIB_LAPACK_DIR)/BLAS && cat *.out)
|
(cd $(NETLIB_LAPACK_DIR)/BLAS/TESTING && cat *.out)
|
||||||
|
|
||||||
|
|
||||||
dummy :
|
dummy :
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
# This library's version
|
# This library's version
|
||||||
VERSION = 0.3.0.dev
|
VERSION = 0.3.1.dev
|
||||||
|
|
||||||
# If you set the suffix, the library name will be libopenblas_$(LIBNAMESUFFIX).a
|
# If you set the suffix, the library name will be libopenblas_$(LIBNAMESUFFIX).a
|
||||||
# and libopenblas_$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library
|
# and libopenblas_$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library
|
||||||
|
|
16
c_check
16
c_check
|
@ -201,6 +201,21 @@ $architecture = zarch if ($data =~ /ARCH_ZARCH/);
|
||||||
$binformat = bin32;
|
$binformat = bin32;
|
||||||
$binformat = bin64 if ($data =~ /BINARY_64/);
|
$binformat = bin64 if ($data =~ /BINARY_64/);
|
||||||
|
|
||||||
|
$no_avx512= 0;
|
||||||
|
if (($architecture eq "x86") || ($architecture eq "x86_64")) {
|
||||||
|
$code = '"vaddps %zmm1, %zmm0, %zmm0"';
|
||||||
|
print $tmpf "void main(void){ __asm__ volatile($code); }\n";
|
||||||
|
$args = " -o $tmpf.o -x c $tmpf";
|
||||||
|
my @cmd = ("$compiler_name $args");
|
||||||
|
system(@cmd) == 0;
|
||||||
|
if ($? != 0) {
|
||||||
|
$no_avx512 = 1;
|
||||||
|
} else {
|
||||||
|
$no_avx512 = 0;
|
||||||
|
}
|
||||||
|
unlink("tmpf.o");
|
||||||
|
}
|
||||||
|
|
||||||
$data = `$compiler_name -S ctest1.c && grep globl ctest1.s | head -n 1 && rm -f ctest1.s`;
|
$data = `$compiler_name -S ctest1.c && grep globl ctest1.s | head -n 1 && rm -f ctest1.s`;
|
||||||
|
|
||||||
$data =~ /globl\s([_\.]*)(.*)/;
|
$data =~ /globl\s([_\.]*)(.*)/;
|
||||||
|
@ -288,6 +303,7 @@ print MAKEFILE "CROSS=1\n" if $cross != 0;
|
||||||
print MAKEFILE "CEXTRALIB=$linker_L $linker_l $linker_a\n";
|
print MAKEFILE "CEXTRALIB=$linker_L $linker_l $linker_a\n";
|
||||||
print MAKEFILE "HAVE_MSA=1\n" if $have_msa eq 1;
|
print MAKEFILE "HAVE_MSA=1\n" if $have_msa eq 1;
|
||||||
print MAKEFILE "MSA_FLAGS=$msa_flags\n" if $have_msa eq 1;
|
print MAKEFILE "MSA_FLAGS=$msa_flags\n" if $have_msa eq 1;
|
||||||
|
print MAKEFILE "NO_AVX512=1\n" if $no_avx512 eq 1;
|
||||||
|
|
||||||
$os =~ tr/[a-z]/[A-Z]/;
|
$os =~ tr/[a-z]/[A-Z]/;
|
||||||
$architecture =~ tr/[a-z]/[A-Z]/;
|
$architecture =~ tr/[a-z]/[A-Z]/;
|
||||||
|
|
|
@ -66,3 +66,12 @@ else()
|
||||||
set(BINARY32 1)
|
set(BINARY32 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (X86_64 OR X86)
|
||||||
|
file(WRITE ${PROJECT_BINARY_DIR}/avx512.tmp "void main(void){ __asm__ volatile(\"vaddps %zmm1, %zmm0, %zmm0\"); }")
|
||||||
|
execute_process(COMMAND ${CMAKE_C_COMPILER} -v -o ${PROJECT_BINARY_DIR}/avx512.o -x c ${PROJECT_BINARY_DIR}/avx512.tmp RESULT_VARIABLE NO_AVX512)
|
||||||
|
if (NO_AVX512 EQUAL 1)
|
||||||
|
set (CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX512")
|
||||||
|
endif()
|
||||||
|
file(REMOVE "avx512.tmp" "avx512.o")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
2
common.h
2
common.h
|
@ -642,6 +642,7 @@ void gotoblas_profile_init(void);
|
||||||
void gotoblas_profile_quit(void);
|
void gotoblas_profile_quit(void);
|
||||||
|
|
||||||
#ifdef USE_OPENMP
|
#ifdef USE_OPENMP
|
||||||
|
|
||||||
#ifndef C_MSVC
|
#ifndef C_MSVC
|
||||||
int omp_in_parallel(void);
|
int omp_in_parallel(void);
|
||||||
int omp_get_num_procs(void);
|
int omp_get_num_procs(void);
|
||||||
|
@ -663,7 +664,6 @@ __declspec(dllimport) int __cdecl omp_get_num_procs(void);
|
||||||
#define _Atomic volatile
|
#define _Atomic volatile
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#ifdef __ELF__
|
#ifdef __ELF__
|
||||||
int omp_in_parallel (void) __attribute__ ((weak));
|
int omp_in_parallel (void) __attribute__ ((weak));
|
||||||
|
|
|
@ -362,7 +362,7 @@ cgemm_ct.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm_cr.$(SUFFIX) : gemm.c level3.c ../../param.h
|
cgemm_cr.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm_cc.$(SUFFIX) : gemm.c level3.c ../../param.h
|
cgemm_cc.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -410,7 +410,7 @@ zgemm_ct.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm_cr.$(SUFFIX) : gemm.c level3.c ../../param.h
|
zgemm_cr.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm_cc.$(SUFFIX) : gemm.c level3.c ../../param.h
|
zgemm_cc.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -458,7 +458,7 @@ xgemm_ct.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm_cr.$(SUFFIX) : gemm.c level3.c ../../param.h
|
xgemm_cr.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm_cc.$(SUFFIX) : gemm.c level3.c ../../param.h
|
xgemm_cc.$(SUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -558,7 +558,7 @@ cgemm_thread_ct.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm_thread_cr.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
cgemm_thread_cr.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm_thread_cc.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
cgemm_thread_cc.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -606,7 +606,7 @@ zgemm_thread_ct.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm_thread_cr.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
zgemm_thread_cr.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm_thread_cc.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
zgemm_thread_cc.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -654,7 +654,7 @@ xgemm_thread_ct.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm_thread_cr.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
xgemm_thread_cr.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm_thread_cc.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
xgemm_thread_cc.$(SUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -1821,7 +1821,7 @@ cgemm3m_ct.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_cr.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
cgemm3m_cr.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_cc.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
cgemm3m_cc.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -1869,7 +1869,7 @@ zgemm3m_ct.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_cr.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
zgemm3m_cr.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_cc.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
zgemm3m_cc.$(SUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -1917,7 +1917,7 @@ xgemm3m_ct.$(SUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_cr.$(SUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
xgemm3m_cr.$(SUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_cc.$(SUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
xgemm3m_cc.$(SUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -1974,7 +1974,7 @@ cgemm3m_thread_ct.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_thread_cr.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
cgemm3m_thread_cr.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_thread_cc.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
cgemm3m_thread_cc.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -2022,7 +2022,7 @@ zgemm3m_thread_ct.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_thread_cr.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
zgemm3m_thread_cr.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_thread_cc.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
zgemm3m_thread_cc.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -2070,7 +2070,7 @@ xgemm3m_thread_ct.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_thread_cr.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
xgemm3m_thread_cr.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_thread_cc.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
xgemm3m_thread_cc.$(SUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(CFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -2731,7 +2731,7 @@ cgemm_ct.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm_cr.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
cgemm_cr.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm_cc.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
cgemm_cc.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -2779,7 +2779,7 @@ zgemm_ct.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm_cr.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
zgemm_cr.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm_cc.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
zgemm_cc.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -2827,7 +2827,7 @@ xgemm_ct.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm_cr.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
xgemm_cr.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm_cc.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
xgemm_cc.$(PSUFFIX) : gemm.c level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -2927,7 +2927,7 @@ cgemm_thread_ct.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm_thread_cr.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
cgemm_thread_cr.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm_thread_cc.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
cgemm_thread_cc.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -2975,7 +2975,7 @@ zgemm_thread_ct.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm_thread_cr.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
zgemm_thread_cr.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm_thread_cc.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
zgemm_thread_cc.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -3023,7 +3023,7 @@ xgemm_thread_ct.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm_thread_cr.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
xgemm_thread_cr.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm_thread_cc.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
xgemm_thread_cc.$(PSUFFIX) : gemm.c level3_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -4190,7 +4190,7 @@ cgemm3m_ct.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_cr.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
cgemm3m_cr.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_cc.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
cgemm3m_cc.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -4238,7 +4238,7 @@ zgemm3m_ct.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_cr.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
zgemm3m_cr.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_cc.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
zgemm3m_cc.$(PSUFFIX) : gemm3m.c gemm3m_level3.c
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -4286,7 +4286,7 @@ xgemm3m_ct.$(PSUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_cr.$(PSUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
xgemm3m_cr.$(PSUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_cc.$(PSUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
xgemm3m_cc.$(PSUFFIX) : gemm3m.c gemm3m_level3.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -4343,7 +4343,7 @@ cgemm3m_thread_ct.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_thread_cr.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
cgemm3m_thread_cr.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
cgemm3m_thread_cc.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
cgemm3m_thread_cc.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -UDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -4391,7 +4391,7 @@ zgemm3m_thread_ct.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_thread_cr.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
zgemm3m_thread_cr.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
zgemm3m_thread_cc.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
zgemm3m_thread_cc.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
@ -4439,7 +4439,7 @@ xgemm3m_thread_ct.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCT $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_thread_cr.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
xgemm3m_thread_cr.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCR=CR $< -o $(@F)
|
||||||
|
|
||||||
xgemm3m_thread_cc.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
xgemm3m_thread_cc.$(PSUFFIX) : gemm3m.c level3_gemm3m_thread.c ../../param.h
|
||||||
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
$(CC) $(PFLAGS) $(BLOCKS) -c -DTHREADED_LEVEL3 -DXDOUBLE -DCOMPLEX -DCC $< -o $(@F)
|
||||||
|
|
|
@ -180,7 +180,7 @@ int get_num_procs(void) {
|
||||||
cpu_set_t *cpusetp;
|
cpu_set_t *cpusetp;
|
||||||
size_t size;
|
size_t size;
|
||||||
int ret;
|
int ret;
|
||||||
// int i,n;
|
int i,n;
|
||||||
|
|
||||||
if (!nums) nums = sysconf(_SC_NPROCESSORS_CONF);
|
if (!nums) nums = sysconf(_SC_NPROCESSORS_CONF);
|
||||||
#if !defined(OS_LINUX)
|
#if !defined(OS_LINUX)
|
||||||
|
|
|
@ -128,6 +128,8 @@ so : ../$(LIBSONAME)
|
||||||
|
|
||||||
ifeq ($(OSNAME), Android)
|
ifeq ($(OSNAME), Android)
|
||||||
INTERNALNAME = $(LIBPREFIX).so
|
INTERNALNAME = $(LIBPREFIX).so
|
||||||
|
FEXTRALIB += -lm
|
||||||
|
EXTRALIB += -lm
|
||||||
else
|
else
|
||||||
INTERNALNAME = $(LIBPREFIX).so.$(MAJOR_VERSION)
|
INTERNALNAME = $(LIBPREFIX).so.$(MAJOR_VERSION)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -133,7 +133,7 @@ ZNRM2KERNEL = ../arm/znrm2.c
|
||||||
#
|
#
|
||||||
SROTKERNEL = srot.c
|
SROTKERNEL = srot.c
|
||||||
DROTKERNEL = drot.c
|
DROTKERNEL = drot.c
|
||||||
#CROTKERNEL = ../arm/zrot.c
|
CROTKERNEL = zrot.c
|
||||||
ZROTKERNEL = zrot.c
|
ZROTKERNEL = zrot.c
|
||||||
#
|
#
|
||||||
SSCALKERNEL = sscal.c
|
SSCALKERNEL = sscal.c
|
||||||
|
|
|
@ -1,3 +1 @@
|
||||||
include $(KERNELDIR)/KERNEL.PENRYN
|
include $(KERNELDIR)/KERNEL.PENRYN
|
||||||
SSWAPKERNEL = ../arm/swap.c
|
|
||||||
DSWAPKERNEL = ../arm/swap.c
|
|
||||||
|
|
|
@ -138,6 +138,14 @@
|
||||||
/* INCX != 1 or INCY != 1 */
|
/* INCX != 1 or INCY != 1 */
|
||||||
|
|
||||||
.L14:
|
.L14:
|
||||||
|
cmpl $0, %ebx
|
||||||
|
jne .L141
|
||||||
|
cmpl $0, %ecx
|
||||||
|
jne .L141
|
||||||
|
/* INCX == 0 and INCY == 0 */
|
||||||
|
jmp .L27
|
||||||
|
|
||||||
|
.L141:
|
||||||
movl %edx, %eax
|
movl %edx, %eax
|
||||||
sarl $2, %eax
|
sarl $2, %eax
|
||||||
jle .L28
|
jle .L28
|
||||||
|
|
|
@ -41,7 +41,7 @@ lapack_int LAPACKE_chetrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
lapack_int info = 0;
|
lapack_int info = 0;
|
||||||
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_chetrf( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
LAPACK_chetrf_aa( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ lapack_int LAPACKE_chetrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
}
|
}
|
||||||
/* Query optimal working array(s) size if requested */
|
/* Query optimal working array(s) size if requested */
|
||||||
if( lwork == -1 ) {
|
if( lwork == -1 ) {
|
||||||
LAPACK_chetrf( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_chetrf_aa( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
||||||
return (info < 0) ? (info - 1) : info;
|
return (info < 0) ? (info - 1) : info;
|
||||||
}
|
}
|
||||||
/* Allocate memory for temporary array(s) */
|
/* Allocate memory for temporary array(s) */
|
||||||
|
@ -69,7 +69,7 @@ lapack_int LAPACKE_chetrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
/* Transpose input matrices */
|
/* Transpose input matrices */
|
||||||
LAPACKE_che_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
LAPACKE_che_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_chetrf( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_chetrf_aa( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ lapack_int LAPACKE_csytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
lapack_int info = 0;
|
lapack_int info = 0;
|
||||||
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_csytrf( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
LAPACK_csytrf_aa( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ lapack_int LAPACKE_csytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
}
|
}
|
||||||
/* Query optimal working array(s) size if requested */
|
/* Query optimal working array(s) size if requested */
|
||||||
if( lwork == -1 ) {
|
if( lwork == -1 ) {
|
||||||
LAPACK_csytrf( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_csytrf_aa( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
||||||
return (info < 0) ? (info - 1) : info;
|
return (info < 0) ? (info - 1) : info;
|
||||||
}
|
}
|
||||||
/* Allocate memory for temporary array(s) */
|
/* Allocate memory for temporary array(s) */
|
||||||
|
@ -69,7 +69,7 @@ lapack_int LAPACKE_csytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
/* Transpose input matrices */
|
/* Transpose input matrices */
|
||||||
LAPACKE_csy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
LAPACKE_csy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_csytrf( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_csytrf_aa( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ lapack_int LAPACKE_dsytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
lapack_int info = 0;
|
lapack_int info = 0;
|
||||||
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_dsytrf( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
LAPACK_dsytrf_aa( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ lapack_int LAPACKE_dsytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
}
|
}
|
||||||
/* Query optimal working array(s) size if requested */
|
/* Query optimal working array(s) size if requested */
|
||||||
if( lwork == -1 ) {
|
if( lwork == -1 ) {
|
||||||
LAPACK_dsytrf( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_dsytrf_aa( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
||||||
return (info < 0) ? (info - 1) : info;
|
return (info < 0) ? (info - 1) : info;
|
||||||
}
|
}
|
||||||
/* Allocate memory for temporary array(s) */
|
/* Allocate memory for temporary array(s) */
|
||||||
|
@ -67,7 +67,7 @@ lapack_int LAPACKE_dsytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
/* Transpose input matrices */
|
/* Transpose input matrices */
|
||||||
LAPACKE_dsy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
LAPACKE_dsy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_dsytrf( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_dsytrf_aa( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ lapack_int LAPACKE_ssytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
lapack_int info = 0;
|
lapack_int info = 0;
|
||||||
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_ssytrf( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
LAPACK_ssytrf_aa( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ lapack_int LAPACKE_ssytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
}
|
}
|
||||||
/* Query optimal working array(s) size if requested */
|
/* Query optimal working array(s) size if requested */
|
||||||
if( lwork == -1 ) {
|
if( lwork == -1 ) {
|
||||||
LAPACK_ssytrf( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_ssytrf_aa( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
||||||
return (info < 0) ? (info - 1) : info;
|
return (info < 0) ? (info - 1) : info;
|
||||||
}
|
}
|
||||||
/* Allocate memory for temporary array(s) */
|
/* Allocate memory for temporary array(s) */
|
||||||
|
@ -67,7 +67,7 @@ lapack_int LAPACKE_ssytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
/* Transpose input matrices */
|
/* Transpose input matrices */
|
||||||
LAPACKE_ssy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
LAPACKE_ssy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_ssytrf( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_ssytrf_aa( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ lapack_int LAPACKE_zhetrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
lapack_int info = 0;
|
lapack_int info = 0;
|
||||||
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_zhetrf( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
LAPACK_zhetrf_aa( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ lapack_int LAPACKE_zhetrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
}
|
}
|
||||||
/* Query optimal working array(s) size if requested */
|
/* Query optimal working array(s) size if requested */
|
||||||
if( lwork == -1 ) {
|
if( lwork == -1 ) {
|
||||||
LAPACK_zhetrf( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_zhetrf_aa( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
||||||
return (info < 0) ? (info - 1) : info;
|
return (info < 0) ? (info - 1) : info;
|
||||||
}
|
}
|
||||||
/* Allocate memory for temporary array(s) */
|
/* Allocate memory for temporary array(s) */
|
||||||
|
@ -69,7 +69,7 @@ lapack_int LAPACKE_zhetrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
/* Transpose input matrices */
|
/* Transpose input matrices */
|
||||||
LAPACKE_zhe_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
LAPACKE_zhe_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_zhetrf( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_zhetrf_aa( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ lapack_int LAPACKE_zsytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
lapack_int info = 0;
|
lapack_int info = 0;
|
||||||
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
if( matrix_layout == LAPACK_COL_MAJOR ) {
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_zsytrf( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
LAPACK_zsytrf_aa( &uplo, &n, a, &lda, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ lapack_int LAPACKE_zsytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
}
|
}
|
||||||
/* Query optimal working array(s) size if requested */
|
/* Query optimal working array(s) size if requested */
|
||||||
if( lwork == -1 ) {
|
if( lwork == -1 ) {
|
||||||
LAPACK_zsytrf( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_zsytrf_aa( &uplo, &n, a, &lda_t, ipiv, work, &lwork, &info );
|
||||||
return (info < 0) ? (info - 1) : info;
|
return (info < 0) ? (info - 1) : info;
|
||||||
}
|
}
|
||||||
/* Allocate memory for temporary array(s) */
|
/* Allocate memory for temporary array(s) */
|
||||||
|
@ -69,7 +69,7 @@ lapack_int LAPACKE_zsytrf_aa_work( int matrix_layout, char uplo, lapack_int n,
|
||||||
/* Transpose input matrices */
|
/* Transpose input matrices */
|
||||||
LAPACKE_zsy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
LAPACKE_zsy_trans( matrix_layout, uplo, n, a, lda, a_t, lda_t );
|
||||||
/* Call LAPACK function and adjust info */
|
/* Call LAPACK function and adjust info */
|
||||||
LAPACK_zsytrf( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
LAPACK_zsytrf_aa( &uplo, &n, a_t, &lda_t, ipiv, work, &lwork, &info );
|
||||||
if( info < 0 ) {
|
if( info < 0 ) {
|
||||||
info = info - 1;
|
info = info - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -701,7 +701,7 @@
|
||||||
LWSVDJ = MAX( 2 * N, 1 )
|
LWSVDJ = MAX( 2 * N, 1 )
|
||||||
LWSVDJV = MAX( 2 * N, 1 )
|
LWSVDJV = MAX( 2 * N, 1 )
|
||||||
* .. minimal REAL workspace length for CGEQP3, CPOCON, CGESVJ
|
* .. minimal REAL workspace length for CGEQP3, CPOCON, CGESVJ
|
||||||
LRWQP3 = N
|
LRWQP3 = 2 * N
|
||||||
LRWCON = N
|
LRWCON = N
|
||||||
LRWSVDJ = N
|
LRWSVDJ = N
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
|
@ -939,7 +939,7 @@
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
MINWRK = MAX( 2, MINWRK )
|
MINWRK = MAX( 2, MINWRK )
|
||||||
OPTWRK = MAX( 2, OPTWRK )
|
OPTWRK = MAX( OPTWRK, MINWRK )
|
||||||
IF ( LWORK .LT. MINWRK .AND. (.NOT.LQUERY) ) INFO = - 17
|
IF ( LWORK .LT. MINWRK .AND. (.NOT.LQUERY) ) INFO = - 17
|
||||||
IF ( LRWORK .LT. MINRWRK .AND. (.NOT.LQUERY) ) INFO = - 19
|
IF ( LRWORK .LT. MINRWRK .AND. (.NOT.LQUERY) ) INFO = - 19
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -209,6 +209,8 @@
|
||||||
INFO = -5
|
INFO = -5
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -8
|
INFO = -8
|
||||||
|
ELSE IF( LWORK.LT.MAX( 2*N, 3*N-2 ) .AND. .NOT.LQUERY ) THEN
|
||||||
|
INFO = -10
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
|
@ -219,9 +221,6 @@
|
||||||
LWKOPT_HETRS = INT( WORK(1) )
|
LWKOPT_HETRS = INT( WORK(1) )
|
||||||
LWKOPT = MAX( LWKOPT_HETRF, LWKOPT_HETRS )
|
LWKOPT = MAX( LWKOPT_HETRF, LWKOPT_HETRS )
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
|
|
||||||
INFO = -10
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -105,6 +105,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -124,7 +125,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -150,6 +151,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -233,19 +235,18 @@
|
||||||
INFO = -3
|
INFO = -3
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
|
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
|
||||||
|
INFO = -7
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -11
|
INFO = -11
|
||||||
|
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
|
||||||
|
INFO = -13
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
CALL CHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
CALL CHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
||||||
$ IPIV2, WORK, -1, INFO )
|
$ IPIV2, WORK, -1, INFO )
|
||||||
LWKOPT = INT( WORK(1) )
|
LWKOPT = INT( WORK(1) )
|
||||||
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
|
|
||||||
INFO = -7
|
|
||||||
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
|
|
||||||
INFO = -13
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -270,6 +271,8 @@
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of CHESV_AA_2STAGE
|
* End of CHESV_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -112,7 +113,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -125,6 +126,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -658,6 +660,8 @@ c $ (J+1)*NB+1, (J+1)*NB+KB, IPIV, 1 )
|
||||||
*
|
*
|
||||||
* Factor the band matrix
|
* Factor the band matrix
|
||||||
CALL CGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
CALL CGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of CHETRF_AA_2STAGE
|
* End of CHETRF_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -87,6 +87,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N.
|
*> The size of the array TB. LTB >= 4*N.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
|
|
@ -241,7 +241,7 @@
|
||||||
INFO = 10
|
INFO = 10
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 )THEN
|
IF( INFO.NE.0 )THEN
|
||||||
CALL XERBLA( 'SSYMV ', INFO )
|
CALL XERBLA( 'CLA_SYAMV', INFO )
|
||||||
RETURN
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -142,6 +142,13 @@
|
||||||
CABS1( CDUM ) = ABS( REAL( CDUM ) ) + ABS( AIMAG( CDUM ) )
|
CABS1( CDUM ) = ABS( REAL( CDUM ) ) + ABS( AIMAG( CDUM ) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Quick return if possible
|
||||||
|
*
|
||||||
|
IF( N.NE.2 .AND. N.NE.3 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
IF( N.EQ.2 ) THEN
|
IF( N.EQ.2 ) THEN
|
||||||
S = CABS1( H( 1, 1 )-S2 ) + CABS1( H( 2, 1 ) )
|
S = CABS1( H( 1, 1 )-S2 ) + CABS1( H( 2, 1 ) )
|
||||||
IF( S.EQ.RZERO ) THEN
|
IF( S.EQ.RZERO ) THEN
|
||||||
|
|
|
@ -221,9 +221,6 @@
|
||||||
LWKOPT_SYTRS = INT( WORK(1) )
|
LWKOPT_SYTRS = INT( WORK(1) )
|
||||||
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
|
|
||||||
INFO = -10
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -105,6 +105,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -124,7 +125,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -150,6 +151,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -233,19 +235,18 @@
|
||||||
INFO = -3
|
INFO = -3
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
|
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
|
||||||
|
INFO = -7
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -11
|
INFO = -11
|
||||||
|
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
|
||||||
|
INFO = -13
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
CALL CSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
CALL CSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
||||||
$ IPIV2, WORK, -1, INFO )
|
$ IPIV2, WORK, -1, INFO )
|
||||||
LWKOPT = INT( WORK(1) )
|
LWKOPT = INT( WORK(1) )
|
||||||
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
|
|
||||||
INFO = -7
|
|
||||||
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
|
|
||||||
INFO = -13
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -270,6 +271,8 @@
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of CSYSV_AA_2STAGE
|
* End of CSYSV_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -112,7 +113,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -125,6 +126,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -662,6 +664,8 @@ c $ (J+1)*NB+1, (J+1)*NB+KB, IPIV, 1 )
|
||||||
*
|
*
|
||||||
* Factor the band matrix
|
* Factor the band matrix
|
||||||
CALL CGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
CALL CGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of CSYTRF_AA_2STAGE
|
* End of CSYTRF_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -96,11 +96,11 @@
|
||||||
*> LWORK is INTEGER
|
*> LWORK is INTEGER
|
||||||
*> The dimension of the array WORK.
|
*> The dimension of the array WORK.
|
||||||
*> WORK is size >= (N+NB+1)*(NB+3)
|
*> WORK is size >= (N+NB+1)*(NB+3)
|
||||||
*> If LDWORK = -1, then a workspace query is assumed; the routine
|
*> If LWORK = -1, then a workspace query is assumed; the routine
|
||||||
*> calculates:
|
*> calculates:
|
||||||
*> - the optimal size of the WORK array, returns
|
*> - the optimal size of the WORK array, returns
|
||||||
*> this value as the first entry of the WORK array,
|
*> this value as the first entry of the WORK array,
|
||||||
*> - and no error message related to LDWORK is issued by XERBLA.
|
*> - and no error message related to LWORK is issued by XERBLA.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] INFO
|
*> \param[out] INFO
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
UPPER = LSAME( UPLO, 'U' )
|
UPPER = LSAME( UPLO, 'U' )
|
||||||
LQUERY = ( LWORK.EQ.-1 )
|
LQUERY = ( LWORK.EQ.-1 )
|
||||||
* Get blocksize
|
* Get blocksize
|
||||||
NBMAX = ILAENV( 1, 'CSYTRF', UPLO, N, -1, -1, -1 )
|
NBMAX = ILAENV( 1, 'CSYTRI2', UPLO, N, -1, -1, -1 )
|
||||||
IF ( NBMAX .GE. N ) THEN
|
IF ( NBMAX .GE. N ) THEN
|
||||||
MINSIZE = N
|
MINSIZE = N
|
||||||
ELSE
|
ELSE
|
||||||
|
|
|
@ -85,6 +85,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N.
|
*> The size of the array TB. LTB >= 4*N.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
|
|
@ -158,7 +158,7 @@
|
||||||
INTEGER I, IB, IINFO, K
|
INTEGER I, IB, IINFO, K
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL DGEQRT2, DGELQT3, DGEQRT3, DLARFB, XERBLA
|
EXTERNAL DGELQT3, DLARFB, XERBLA
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
|
|
|
@ -230,7 +230,7 @@
|
||||||
INFO = 10
|
INFO = 10
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 )THEN
|
IF( INFO.NE.0 )THEN
|
||||||
CALL XERBLA( 'DSYMV ', INFO )
|
CALL XERBLA( 'DLA_SYAMV', INFO )
|
||||||
RETURN
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -147,6 +147,13 @@
|
||||||
INTRINSIC ABS
|
INTRINSIC ABS
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Quick return if possible
|
||||||
|
*
|
||||||
|
IF( N.NE.2 .AND. N.NE.3 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
IF( N.EQ.2 ) THEN
|
IF( N.EQ.2 ) THEN
|
||||||
S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) )
|
S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) )
|
||||||
IF( S.EQ.ZERO ) THEN
|
IF( S.EQ.ZERO ) THEN
|
||||||
|
|
|
@ -221,9 +221,6 @@
|
||||||
LWKOPT_SYTRS = INT( WORK(1) )
|
LWKOPT_SYTRS = INT( WORK(1) )
|
||||||
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
|
|
||||||
INFO = -10
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -107,6 +107,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -126,7 +127,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -152,6 +153,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -235,19 +237,18 @@
|
||||||
INFO = -3
|
INFO = -3
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
|
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
|
||||||
|
INFO = -7
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -11
|
INFO = -11
|
||||||
|
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
|
||||||
|
INFO = -13
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
CALL DSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
CALL DSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
||||||
$ IPIV2, WORK, -1, INFO )
|
$ IPIV2, WORK, -1, INFO )
|
||||||
LWKOPT = INT( WORK(1) )
|
LWKOPT = INT( WORK(1) )
|
||||||
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
|
|
||||||
INFO = -7
|
|
||||||
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
|
|
||||||
INFO = -13
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -109,6 +110,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -128,10 +130,10 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV2(k).
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] INFO
|
*> \param[out] INFO
|
||||||
|
@ -641,6 +643,8 @@ c $ (J+1)*NB+1, (J+1)*NB+KB, IPIV, 1 )
|
||||||
*
|
*
|
||||||
* Factor the band matrix
|
* Factor the band matrix
|
||||||
CALL DGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
CALL DGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of DSYTRF_AA_2STAGE
|
* End of DSYTRF_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -96,11 +96,11 @@
|
||||||
*> LWORK is INTEGER
|
*> LWORK is INTEGER
|
||||||
*> The dimension of the array WORK.
|
*> The dimension of the array WORK.
|
||||||
*> WORK is size >= (N+NB+1)*(NB+3)
|
*> WORK is size >= (N+NB+1)*(NB+3)
|
||||||
*> If LDWORK = -1, then a workspace query is assumed; the routine
|
*> If LWORK = -1, then a workspace query is assumed; the routine
|
||||||
*> calculates:
|
*> calculates:
|
||||||
*> - the optimal size of the WORK array, returns
|
*> - the optimal size of the WORK array, returns
|
||||||
*> this value as the first entry of the WORK array,
|
*> this value as the first entry of the WORK array,
|
||||||
*> - and no error message related to LDWORK is issued by XERBLA.
|
*> - and no error message related to LWORK is issued by XERBLA.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] INFO
|
*> \param[out] INFO
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
UPPER = LSAME( UPLO, 'U' )
|
UPPER = LSAME( UPLO, 'U' )
|
||||||
LQUERY = ( LWORK.EQ.-1 )
|
LQUERY = ( LWORK.EQ.-1 )
|
||||||
* Get blocksize
|
* Get blocksize
|
||||||
NBMAX = ILAENV( 1, 'DSYTRF', UPLO, N, -1, -1, -1 )
|
NBMAX = ILAENV( 1, 'DSYTRI2', UPLO, N, -1, -1, -1 )
|
||||||
IF ( NBMAX .GE. N ) THEN
|
IF ( NBMAX .GE. N ) THEN
|
||||||
MINSIZE = N
|
MINSIZE = N
|
||||||
ELSE
|
ELSE
|
||||||
|
|
|
@ -85,6 +85,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N.
|
*> The size of the array TB. LTB >= 4*N.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
|
|
@ -45,9 +45,9 @@
|
||||||
*> The right eigenvector x and the left eigenvector y of T corresponding
|
*> The right eigenvector x and the left eigenvector y of T corresponding
|
||||||
*> to an eigenvalue w are defined by:
|
*> to an eigenvalue w are defined by:
|
||||||
*>
|
*>
|
||||||
*> T*x = w*x, (y**H)*T = w*(y**H)
|
*> T*x = w*x, (y**T)*T = w*(y**T)
|
||||||
*>
|
*>
|
||||||
*> where y**H denotes the conjugate transpose of y.
|
*> where y**T denotes the transpose of the vector y.
|
||||||
*> The eigenvalues are not input to this routine, but are read directly
|
*> The eigenvalues are not input to this routine, but are read directly
|
||||||
*> from the diagonal blocks of T.
|
*> from the diagonal blocks of T.
|
||||||
*>
|
*>
|
||||||
|
|
|
@ -104,13 +104,13 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] NAME
|
*> \param[in] NAME
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> NAME is character string
|
*> NAME is CHARACTER string
|
||||||
*> Name of the calling subroutine
|
*> Name of the calling subroutine
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] OPTS
|
*> \param[in] OPTS
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> OPTS is character string
|
*> OPTS is CHARACTER string
|
||||||
*> This is a concatenation of the string arguments to
|
*> This is a concatenation of the string arguments to
|
||||||
*> TTQRE.
|
*> TTQRE.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
|
|
@ -230,7 +230,7 @@
|
||||||
INFO = 10
|
INFO = 10
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 )THEN
|
IF( INFO.NE.0 )THEN
|
||||||
CALL XERBLA( 'SSYMV ', INFO )
|
CALL XERBLA( 'SLA_SYAMV', INFO )
|
||||||
RETURN
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -147,6 +147,13 @@
|
||||||
INTRINSIC ABS
|
INTRINSIC ABS
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Quick return if possible
|
||||||
|
*
|
||||||
|
IF( N.NE.2 .AND. N.NE.3 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
IF( N.EQ.2 ) THEN
|
IF( N.EQ.2 ) THEN
|
||||||
S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) )
|
S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) )
|
||||||
IF( S.EQ.ZERO ) THEN
|
IF( S.EQ.ZERO ) THEN
|
||||||
|
|
|
@ -220,9 +220,6 @@
|
||||||
LWKOPT_SYTRS = INT( WORK(1) )
|
LWKOPT_SYTRS = INT( WORK(1) )
|
||||||
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
|
|
||||||
INFO = -10
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -106,6 +106,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -125,7 +126,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -151,6 +152,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -234,19 +236,18 @@
|
||||||
INFO = -3
|
INFO = -3
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
|
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
|
||||||
|
INFO = -7
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -11
|
INFO = -11
|
||||||
|
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
|
||||||
|
INFO = -13
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
CALL SSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
CALL SSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
||||||
$ IPIV2, WORK, -1, INFO )
|
$ IPIV2, WORK, -1, INFO )
|
||||||
LWKOPT = INT( WORK(1) )
|
LWKOPT = INT( WORK(1) )
|
||||||
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
|
|
||||||
INFO = -7
|
|
||||||
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
|
|
||||||
INFO = -13
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -112,7 +113,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -125,6 +126,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -641,6 +643,8 @@ c $ (J+1)*NB+1, (J+1)*NB+KB, IPIV, 1 )
|
||||||
*
|
*
|
||||||
* Factor the band matrix
|
* Factor the band matrix
|
||||||
CALL SGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
CALL SGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of SSYTRF_AA_2STAGE
|
* End of SSYTRF_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -96,11 +96,11 @@
|
||||||
*> LWORK is INTEGER
|
*> LWORK is INTEGER
|
||||||
*> The dimension of the array WORK.
|
*> The dimension of the array WORK.
|
||||||
*> WORK is size >= (N+NB+1)*(NB+3)
|
*> WORK is size >= (N+NB+1)*(NB+3)
|
||||||
*> If LDWORK = -1, then a workspace query is assumed; the routine
|
*> If LWORK = -1, then a workspace query is assumed; the routine
|
||||||
*> calculates:
|
*> calculates:
|
||||||
*> - the optimal size of the WORK array, returns
|
*> - the optimal size of the WORK array, returns
|
||||||
*> this value as the first entry of the WORK array,
|
*> this value as the first entry of the WORK array,
|
||||||
*> - and no error message related to LDWORK is issued by XERBLA.
|
*> - and no error message related to LWORK is issued by XERBLA.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] INFO
|
*> \param[out] INFO
|
||||||
|
|
|
@ -85,6 +85,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N.
|
*> The size of the array TB. LTB >= 4*N.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
|
|
@ -45,9 +45,9 @@
|
||||||
*> The right eigenvector x and the left eigenvector y of T corresponding
|
*> The right eigenvector x and the left eigenvector y of T corresponding
|
||||||
*> to an eigenvalue w are defined by:
|
*> to an eigenvalue w are defined by:
|
||||||
*>
|
*>
|
||||||
*> T*x = w*x, (y**H)*T = w*(y**H)
|
*> T*x = w*x, (y**T)*T = w*(y**T)
|
||||||
*>
|
*>
|
||||||
*> where y**H denotes the conjugate transpose of y.
|
*> where y**T denotes the transpose of the vector y.
|
||||||
*> The eigenvalues are not input to this routine, but are read directly
|
*> The eigenvalues are not input to this routine, but are read directly
|
||||||
*> from the diagonal blocks of T.
|
*> from the diagonal blocks of T.
|
||||||
*>
|
*>
|
||||||
|
|
|
@ -704,7 +704,7 @@
|
||||||
LWSVDJ = MAX( 2 * N, 1 )
|
LWSVDJ = MAX( 2 * N, 1 )
|
||||||
LWSVDJV = MAX( 2 * N, 1 )
|
LWSVDJV = MAX( 2 * N, 1 )
|
||||||
* .. minimal REAL workspace length for ZGEQP3, ZPOCON, ZGESVJ
|
* .. minimal REAL workspace length for ZGEQP3, ZPOCON, ZGESVJ
|
||||||
LRWQP3 = N
|
LRWQP3 = 2 * N
|
||||||
LRWCON = N
|
LRWCON = N
|
||||||
LRWSVDJ = N
|
LRWSVDJ = N
|
||||||
IF ( LQUERY ) THEN
|
IF ( LQUERY ) THEN
|
||||||
|
@ -942,7 +942,7 @@
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
MINWRK = MAX( 2, MINWRK )
|
MINWRK = MAX( 2, MINWRK )
|
||||||
OPTWRK = MAX( 2, OPTWRK )
|
OPTWRK = MAX( MINWRK, OPTWRK )
|
||||||
IF ( LWORK .LT. MINWRK .AND. (.NOT.LQUERY) ) INFO = - 17
|
IF ( LWORK .LT. MINWRK .AND. (.NOT.LQUERY) ) INFO = - 17
|
||||||
IF ( LRWORK .LT. MINRWRK .AND. (.NOT.LQUERY) ) INFO = - 19
|
IF ( LRWORK .LT. MINRWRK .AND. (.NOT.LQUERY) ) INFO = - 19
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -209,6 +209,8 @@
|
||||||
INFO = -5
|
INFO = -5
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -8
|
INFO = -8
|
||||||
|
ELSE IF( LWORK.LT.MAX(2*N, 3*N-2) .AND. .NOT.LQUERY ) THEN
|
||||||
|
INFO = -10
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
|
@ -219,9 +221,6 @@
|
||||||
LWKOPT_HETRS = INT( WORK(1) )
|
LWKOPT_HETRS = INT( WORK(1) )
|
||||||
LWKOPT = MAX( LWKOPT_HETRF, LWKOPT_HETRS )
|
LWKOPT = MAX( LWKOPT_HETRF, LWKOPT_HETRS )
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
|
|
||||||
INFO = -10
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -106,6 +106,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -125,7 +126,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -151,6 +152,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -240,19 +242,18 @@
|
||||||
INFO = -3
|
INFO = -3
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
|
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
|
||||||
|
INFO = -7
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -11
|
INFO = -11
|
||||||
|
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
|
||||||
|
INFO = -13
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
CALL ZHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
CALL ZHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
||||||
$ IPIV2, WORK, -1, INFO )
|
$ IPIV2, WORK, -1, INFO )
|
||||||
LWKOPT = INT( WORK(1) )
|
LWKOPT = INT( WORK(1) )
|
||||||
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
|
|
||||||
INFO = -7
|
|
||||||
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
|
|
||||||
INFO = -13
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -112,7 +113,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -125,6 +126,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -657,6 +659,8 @@ c $ (J+1)*NB+1, (J+1)*NB+KB, IPIV, 1 )
|
||||||
*
|
*
|
||||||
* Factor the band matrix
|
* Factor the band matrix
|
||||||
CALL ZGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
CALL ZGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of ZHETRF_AA_2STAGE
|
* End of ZHETRF_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] A
|
*> \param[in] A
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> A is COMPLEX*16array, dimension (LDA,N)
|
*> A is COMPLEX*16 array, dimension (LDA,N)
|
||||||
*> Details of factors computed by ZHETRF_AA_2STAGE.
|
*> Details of factors computed by ZHETRF_AA_2STAGE.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
@ -81,12 +81,13 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] TB
|
*> \param[out] TB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> TB is COMPLEX*16array, dimension (LTB)
|
*> TB is COMPLEX*16 array, dimension (LTB)
|
||||||
*> Details of factors computed by ZHETRF_AA_2STAGE.
|
*> Details of factors computed by ZHETRF_AA_2STAGE.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N.
|
*> The size of the array TB. LTB >= 4*N.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
@ -106,7 +107,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] B
|
*> \param[in,out] B
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> B is COMPLEX*16array, dimension (LDB,NRHS)
|
*> B is COMPLEX*16 array, dimension (LDB,NRHS)
|
||||||
*> On entry, the right hand side matrix B.
|
*> On entry, the right hand side matrix B.
|
||||||
*> On exit, the solution matrix X.
|
*> On exit, the solution matrix X.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
|
|
@ -241,7 +241,7 @@
|
||||||
INFO = 10
|
INFO = 10
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 )THEN
|
IF( INFO.NE.0 )THEN
|
||||||
CALL XERBLA( 'DSYMV ', INFO )
|
CALL XERBLA( 'ZLA_SYAMV', INFO )
|
||||||
RETURN
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -142,6 +142,13 @@
|
||||||
CABS1( CDUM ) = ABS( DBLE( CDUM ) ) + ABS( DIMAG( CDUM ) )
|
CABS1( CDUM ) = ABS( DBLE( CDUM ) ) + ABS( DIMAG( CDUM ) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Quick return if possible
|
||||||
|
*
|
||||||
|
IF( N.NE.2 .AND. N.NE.3 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
IF( N.EQ.2 ) THEN
|
IF( N.EQ.2 ) THEN
|
||||||
S = CABS1( H( 1, 1 )-S2 ) + CABS1( H( 2, 1 ) )
|
S = CABS1( H( 1, 1 )-S2 ) + CABS1( H( 2, 1 ) )
|
||||||
IF( S.EQ.RZERO ) THEN
|
IF( S.EQ.RZERO ) THEN
|
||||||
|
|
|
@ -221,9 +221,6 @@
|
||||||
LWKOPT_SYTRS = INT( WORK(1) )
|
LWKOPT_SYTRS = INT( WORK(1) )
|
||||||
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
|
||||||
WORK( 1 ) = LWKOPT
|
WORK( 1 ) = LWKOPT
|
||||||
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
|
|
||||||
INFO = -10
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -105,6 +105,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -124,7 +125,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -150,6 +151,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -233,19 +235,18 @@
|
||||||
INFO = -3
|
INFO = -3
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
|
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
|
||||||
|
INFO = -7
|
||||||
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -11
|
INFO = -11
|
||||||
|
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
|
||||||
|
INFO = -13
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.EQ.0 ) THEN
|
IF( INFO.EQ.0 ) THEN
|
||||||
CALL ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
CALL ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
|
||||||
$ IPIV2, WORK, -1, INFO )
|
$ IPIV2, WORK, -1, INFO )
|
||||||
LWKOPT = INT( WORK(1) )
|
LWKOPT = INT( WORK(1) )
|
||||||
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
|
|
||||||
INFO = -7
|
|
||||||
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
|
|
||||||
INFO = -13
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N, internally
|
*> The size of the array TB. LTB >= 4*N, internally
|
||||||
*> used to select NB such that LTB >= (3*NB+1)*N.
|
*> used to select NB such that LTB >= (3*NB+1)*N.
|
||||||
*>
|
*>
|
||||||
|
@ -112,7 +113,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] IPIV2
|
*> \param[out] IPIV2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (N)
|
*> IPIV2 is INTEGER array, dimension (N)
|
||||||
*> On exit, it contains the details of the interchanges, i.e.,
|
*> On exit, it contains the details of the interchanges, i.e.,
|
||||||
*> the row and column k of T were interchanged with the
|
*> the row and column k of T were interchanged with the
|
||||||
*> row and column IPIV(k).
|
*> row and column IPIV(k).
|
||||||
|
@ -125,6 +126,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LWORK
|
*> \param[in] LWORK
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
*> The size of WORK. LWORK >= N, internally used to select NB
|
*> The size of WORK. LWORK >= N, internally used to select NB
|
||||||
*> such that LWORK >= N*NB.
|
*> such that LWORK >= N*NB.
|
||||||
*>
|
*>
|
||||||
|
@ -662,6 +664,8 @@ c $ (J+1)*NB+1, (J+1)*NB+KB, IPIV, 1 )
|
||||||
*
|
*
|
||||||
* Factor the band matrix
|
* Factor the band matrix
|
||||||
CALL ZGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
CALL ZGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
*
|
*
|
||||||
* End of ZSYTRF_AA_2STAGE
|
* End of ZSYTRF_AA_2STAGE
|
||||||
*
|
*
|
||||||
|
|
|
@ -163,7 +163,7 @@
|
||||||
UPPER = LSAME( UPLO, 'U' )
|
UPPER = LSAME( UPLO, 'U' )
|
||||||
LQUERY = ( LWORK.EQ.-1 )
|
LQUERY = ( LWORK.EQ.-1 )
|
||||||
* Get blocksize
|
* Get blocksize
|
||||||
NBMAX = ILAENV( 1, 'ZSYTRF', UPLO, N, -1, -1, -1 )
|
NBMAX = ILAENV( 1, 'ZSYTRI2', UPLO, N, -1, -1, -1 )
|
||||||
IF ( NBMAX .GE. N ) THEN
|
IF ( NBMAX .GE. N ) THEN
|
||||||
MINSIZE = N
|
MINSIZE = N
|
||||||
ELSE
|
ELSE
|
||||||
|
|
|
@ -85,6 +85,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] LTB
|
*> \param[in] LTB
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
|
*> LTB is INTEGER
|
||||||
*> The size of the array TB. LTB >= 4*N.
|
*> The size of the array TB. LTB >= 4*N.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
|
|
@ -218,7 +218,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL ALAERH, ALAHD, ALASUM, DERRSY, DLACPY, DLARHS,
|
EXTERNAL ALAERH, ALAHD, ALASUM, DERRSY, DLACPY, DLARHS,
|
||||||
$ DLATB4, DLATMS, DPOT02, DSYTRF_AA_2STAGE
|
$ DLATB4, DLATMS, DPOT02, DSYTRF_AA_2STAGE,
|
||||||
$ DSYTRS_AA_2STAGE, XLAENV
|
$ DSYTRS_AA_2STAGE, XLAENV
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
|
|
|
@ -204,7 +204,7 @@
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL ALADHD, ALAERH, ALASVM, XLAENV, DERRVX,
|
EXTERNAL ALADHD, ALAERH, ALASVM, XLAENV, DERRVX,
|
||||||
$ DGET04, DLACPY, DLARHS, DLATB4, DLATMS,
|
$ DGET04, DLACPY, DLARHS, DLATB4, DLATMS,
|
||||||
$ DSYSV_AA_2STAGE, CHET01_AA, DPOT02,
|
$ DSYSV_AA_2STAGE, DPOT02,
|
||||||
$ DSYTRF_AA_2STAGE
|
$ DSYTRF_AA_2STAGE
|
||||||
* ..
|
* ..
|
||||||
* .. Scalars in Common ..
|
* .. Scalars in Common ..
|
||||||
|
|
|
@ -203,7 +203,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL ALADHD, ALAERH, ALASVM, XLAENV, SERRVX,
|
EXTERNAL ALADHD, ALAERH, ALASVM, XLAENV, SERRVX,
|
||||||
$ CGET04, SLACPY, SLARHS, SLATB4, SLATMS,
|
$ SLACPY, SLARHS, SLATB4, SLATMS,
|
||||||
$ SSYSV_AA_2STAGE, SSYT01_AA, SPOT02,
|
$ SSYSV_AA_2STAGE, SSYT01_AA, SPOT02,
|
||||||
$ SSYTRF_AA_2STAGE
|
$ SSYTRF_AA_2STAGE
|
||||||
* ..
|
* ..
|
||||||
|
|
|
@ -217,8 +217,8 @@
|
||||||
DOUBLE PRECISION RESULT( NTESTS )
|
DOUBLE PRECISION RESULT( NTESTS )
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL ALAERH, ALAHD, ALASUM, CERRSY, ZLACPY, ZLARHS,
|
EXTERNAL ALAERH, ALAHD, ALASUM, ZERRSY, ZLACPY, ZLARHS,
|
||||||
$ CLATB4, ZLATMS, ZSYT02, ZSYT01,
|
$ ZLATB4, ZLATMS, ZSYT02, ZSYT01,
|
||||||
$ ZSYTRF_AA_2STAGE, ZSYTRS_AA_2STAGE,
|
$ ZSYTRF_AA_2STAGE, ZSYTRS_AA_2STAGE,
|
||||||
$ XLAENV
|
$ XLAENV
|
||||||
* ..
|
* ..
|
||||||
|
|
|
@ -257,16 +257,16 @@ for dtype in range_prec:
|
||||||
else:
|
else:
|
||||||
if dtest==16:
|
if dtest==16:
|
||||||
# LIN TESTS
|
# LIN TESTS
|
||||||
cmdbase="xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
cmdbase="LIN/xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
||||||
elif dtest==17:
|
elif dtest==17:
|
||||||
# PROTO LIN TESTS
|
# PROTO LIN TESTS
|
||||||
cmdbase="xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
cmdbase="LIN/xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
||||||
elif dtest==18:
|
elif dtest==18:
|
||||||
# PROTO LIN TESTS
|
# PROTO LIN TESTS
|
||||||
cmdbase="xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
cmdbase="LIN/xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
||||||
else:
|
else:
|
||||||
# EIG TESTS
|
# EIG TESTS
|
||||||
cmdbase="xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
cmdbase="EIG/xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
|
||||||
if (not just_errors and not short_summary):
|
if (not just_errors and not short_summary):
|
||||||
print("Testing "+name+" "+dtests[1][dtest]+"-"+cmdbase, end=' ')
|
print("Testing "+name+" "+dtests[1][dtest]+"-"+cmdbase, end=' ')
|
||||||
# Run the process: either to read the file or run the LAPACK testing
|
# Run the process: either to read the file or run the LAPACK testing
|
||||||
|
|
Loading…
Reference in New Issue