forked from lijiext/lammps
Merge pull request #920 from junghans/mscg
cmake: add DOWNLOAD_MSCG option
This commit is contained in:
commit
16cc613993
|
@ -154,16 +154,6 @@ if(PKG_MEAM OR PKG_USER-H5MD OR PKG_USER-QMMM)
|
||||||
enable_language(C)
|
enable_language(C)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PKG_MSCG)
|
|
||||||
if (CMAKE_VERSION VERSION_LESS "3.1")
|
|
||||||
message(FATAL_ERROR "For the MSCG package you need at least cmake-3.1")
|
|
||||||
endif()
|
|
||||||
# starting with CMake 3.1 this is all you have to do to enforce C++11
|
|
||||||
set(CMAKE_CXX_STANDARD 11) # C++11...
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
|
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(OpenMP QUIET)
|
find_package(OpenMP QUIET)
|
||||||
option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND})
|
option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND})
|
||||||
if(BUILD_OMP OR PKG_USER-OMP OR PKG_KOKKOS OR PKG_USER-INTEL)
|
if(BUILD_OMP OR PKG_USER-OMP OR PKG_KOKKOS OR PKG_USER-INTEL)
|
||||||
|
@ -207,7 +197,7 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE)
|
||||||
find_package(LAPACK)
|
find_package(LAPACK)
|
||||||
if(NOT LAPACK_FOUND)
|
if(NOT LAPACK_FOUND)
|
||||||
enable_language(Fortran)
|
enable_language(Fortran)
|
||||||
file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/*.f)
|
file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/*.[fF])
|
||||||
add_library(linalg STATIC ${LAPACK_SOURCES})
|
add_library(linalg STATIC ${LAPACK_SOURCES})
|
||||||
set(LAPACK_LIBRARIES linalg)
|
set(LAPACK_LIBRARIES linalg)
|
||||||
endif()
|
endif()
|
||||||
|
@ -340,13 +330,10 @@ if(PKG_USER-SMD)
|
||||||
ExternalProject_Add(Eigen3_build
|
ExternalProject_Add(Eigen3_build
|
||||||
URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz
|
URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz
|
||||||
URL_MD5 1a47e78efe365a97de0c022d127607c3
|
URL_MD5 1a47e78efe365a97de0c022d127607c3
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -DEIGEN_TEST_NOQT=ON
|
CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ""
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_LAPACK=ON -DCMAKE_DISABLE_FIND_PACKAGE_Cholmod=ON -DCMAKE_DISABLE_FIND_PACKAGE_Umfpack=ON -DCMAKE_DISABLE_FIND_PACKAGE_SuperLU=ON
|
)
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_PASTIX=ON -DCMAKE_DISABLE_FIND_PACKAGE_SPQR=ON -DCMAKE_DISABLE_FIND_PACKAGE_Boost=ON -DCMAKE_DISABLE_FIND_PACKAGE_CUDA=ON
|
ExternalProject_get_property(Eigen3_build SOURCE_DIR)
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_FFTW=ON -DCMAKE_DISABLE_FIND_PACKAGE_MPFR=ON -DCMAKE_DISABLE_FIND_PACKAGE_OpenGL=ON
|
set(EIGEN3_INCLUDE_DIR ${SOURCE_DIR})
|
||||||
)
|
|
||||||
ExternalProject_get_property(Eigen3_build INSTALL_DIR)
|
|
||||||
set(EIGEN3_INCLUDE_DIR ${INSTALL_DIR}/include/eigen3)
|
|
||||||
list(APPEND LAMMPS_DEPS Eigen3_build)
|
list(APPEND LAMMPS_DEPS Eigen3_build)
|
||||||
else()
|
else()
|
||||||
find_package(Eigen3)
|
find_package(Eigen3)
|
||||||
|
@ -402,26 +389,36 @@ endif()
|
||||||
|
|
||||||
if(PKG_MSCG)
|
if(PKG_MSCG)
|
||||||
find_package(GSL REQUIRED)
|
find_package(GSL REQUIRED)
|
||||||
set(LAMMPS_LIB_MSCG_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/mscg)
|
option(DOWNLOAD_MSCG "Download latte (instead of using the system's one)" OFF)
|
||||||
set(MSCG_TARBALL ${LAMMPS_LIB_MSCG_BIN_DIR}/MS-CG-master.zip)
|
if(DOWNLOAD_MSCG)
|
||||||
set(LAMMPS_LIB_MSCG_BIN_DIR ${LAMMPS_LIB_MSCG_BIN_DIR}/MSCG-release-master/src)
|
include(ExternalProject)
|
||||||
if(NOT EXISTS ${LAMMPS_LIB_MSCG_BIN_DIR})
|
if(NOT LAPACK_FOUND)
|
||||||
if(NOT EXISTS ${MSCG_TARBALL})
|
set(EXTRA_MSCG_OPTS "-DLAPACK_LIBRARIES=${CMAKE_CURRENT_BINARY_DIR}/liblinalg.a")
|
||||||
message(STATUS "Downloading ${MSCG_TARBALL}")
|
endif()
|
||||||
file(DOWNLOAD
|
ExternalProject_Add(mscg_build
|
||||||
https://github.com/uchicago-voth/MSCG-release/archive/master.zip
|
URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz
|
||||||
${MSCG_TARBALL} SHOW_PROGRESS) #EXPECTED_MD5 cannot be due due to master
|
URL_MD5 8c45e269ee13f60b303edd7823866a91
|
||||||
|
SOURCE_SUBDIR src/CMake
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} ${EXTRA_MSCG_OPTS}
|
||||||
|
BUILD_COMMAND make mscg INSTALL_COMMAND ""
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(mscg_build BINARY_DIR)
|
||||||
|
set(MSCG_LIBRARIES ${BINARY_DIR}/libmscg.a)
|
||||||
|
ExternalProject_get_property(mscg_build SOURCE_DIR)
|
||||||
|
set(MSCG_INCLUDE_DIRS ${SOURCE_DIR}/src)
|
||||||
|
list(APPEND LAMMPS_DEPS mscg_build)
|
||||||
|
if(NOT LAPACK_FOUND)
|
||||||
|
file(MAKE_DIRECTORY ${MSCG_INCLUDE_DIRS})
|
||||||
|
add_dependencies(mscg_build linalg)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
find_package(MSCG)
|
||||||
|
if(NOT MSCG_FOUND)
|
||||||
|
message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIRS, or set DOWNLOAD_MSCG=ON to download it")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Unpacking ${MSCG_TARBALL}")
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ${MSCG_TARBALL}
|
|
||||||
WORKING_DIRECTORY ${LAMMPS_LIB_BINARY_DIR}/mscg)
|
|
||||||
endif()
|
endif()
|
||||||
file(GLOB MSCG_SOURCES ${LAMMPS_LIB_MSCG_BIN_DIR}/*.cpp)
|
list(APPEND LAMMPS_LINK_LIBS ${MSCG_LIBRARIES} ${GSL_LIBRARIES} ${LAPACK_LIBRARIES})
|
||||||
add_library(mscg STATIC ${MSCG_SOURCES})
|
include_directories(${MSCG_INCLUDE_DIRS})
|
||||||
list(APPEND LAMMPS_LINK_LIBS mscg)
|
|
||||||
target_compile_options(mscg PRIVATE -DDIMENSION=3 -D_exclude_gromacs=1)
|
|
||||||
target_include_directories(mscg PUBLIC ${LAMMPS_LIB_MSCG_BIN_DIR})
|
|
||||||
target_link_libraries(mscg ${GSL_LIBRARIES} ${LAPACK_LIBRARIES})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PKG_COMPRESS)
|
if(PKG_COMPRESS)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# - Find mscg
|
||||||
|
# Find the native MSCG headers and libraries.
|
||||||
|
#
|
||||||
|
# MSCG_INCLUDE_DIRS - where to find mscg.h, etc.
|
||||||
|
# MSCG_LIBRARIES - List of libraries when using mscg.
|
||||||
|
# MSCG_FOUND - True if mscg found.
|
||||||
|
#
|
||||||
|
|
||||||
|
find_path(MSCG_INCLUDE_DIR mscg.h PATH_SUFFIXES mscg)
|
||||||
|
|
||||||
|
find_library(MSCG_LIBRARY NAMES mscg)
|
||||||
|
|
||||||
|
set(MSCG_LIBRARIES ${MSCG_LIBRARY})
|
||||||
|
set(MSCG_INCLUDE_DIRS ${MSCG_INCLUDE_DIR})
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set MSCG_FOUND to TRUE
|
||||||
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
|
find_package_handle_standard_args(MSCG DEFAULT_MSG MSCG_LIBRARY MSCG_INCLUDE_DIR)
|
||||||
|
|
||||||
|
mark_as_advanced(MSCG_INCLUDE_DIR MSCG_LIBRARY )
|
|
@ -7,13 +7,14 @@ SHELL = /bin/sh
|
||||||
# ------ FILES ------
|
# ------ FILES ------
|
||||||
|
|
||||||
SRC = $(wildcard *.f)
|
SRC = $(wildcard *.f)
|
||||||
|
SRC1 = $(wildcard *.F)
|
||||||
|
|
||||||
FILES = $(SRC) Makefile.* README
|
FILES = $(SRC) $(SRC1) Makefile.* README
|
||||||
|
|
||||||
# ------ DEFINITIONS ------
|
# ------ DEFINITIONS ------
|
||||||
|
|
||||||
LIB = liblinalg.a
|
LIB = liblinalg.a
|
||||||
OBJ = $(SRC:.f=.o)
|
OBJ = $(SRC:.f=.o) $(SRC1:.F=.o)
|
||||||
|
|
||||||
# ------ SETTINGS ------
|
# ------ SETTINGS ------
|
||||||
|
|
||||||
|
@ -34,7 +35,7 @@ lib: $(OBJ)
|
||||||
# ------ COMPILE RULES ------
|
# ------ COMPILE RULES ------
|
||||||
|
|
||||||
%.o:%.F
|
%.o:%.F
|
||||||
$(F90) $(F90FLAGS) -c $<
|
$(FC) $(FFLAGS) -c $<
|
||||||
|
|
||||||
%.o:%.f
|
%.o:%.f
|
||||||
$(FC) $(FFLAGS) -c $<
|
$(FC) $(FFLAGS) -c $<
|
||||||
|
|
|
@ -7,13 +7,14 @@ SHELL = /bin/sh
|
||||||
# ------ FILES ------
|
# ------ FILES ------
|
||||||
|
|
||||||
SRC = $(wildcard *.f)
|
SRC = $(wildcard *.f)
|
||||||
|
SRC1 = $(wildcard *.F)
|
||||||
|
|
||||||
FILES = $(SRC) Makefile.* README
|
FILES = $(SRC) $(SRC1) Makefile.* README
|
||||||
|
|
||||||
# ------ DEFINITIONS ------
|
# ------ DEFINITIONS ------
|
||||||
|
|
||||||
LIB = liblinalg.a
|
LIB = liblinalg.a
|
||||||
OBJ = $(SRC:.f=.o)
|
OBJ = $(SRC:.f=.o) $(SRC1:.F=.o)
|
||||||
|
|
||||||
# ------ SETTINGS ------
|
# ------ SETTINGS ------
|
||||||
|
|
||||||
|
@ -34,7 +35,7 @@ lib: $(OBJ)
|
||||||
# ------ COMPILE RULES ------
|
# ------ COMPILE RULES ------
|
||||||
|
|
||||||
%.o:%.F
|
%.o:%.F
|
||||||
$(F90) $(F90FLAGS) -c $<
|
$(FC) $(FFLAGS) -c $<
|
||||||
|
|
||||||
%.o:%.f
|
%.o:%.f
|
||||||
$(FC) $(FFLAGS) -c $<
|
$(FC) $(FFLAGS) -c $<
|
||||||
|
|
|
@ -2,21 +2,21 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX)
|
* DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INCX,N
|
* INTEGER INCX,N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION DX(*)
|
* DOUBLE PRECISION DX(*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -26,15 +26,35 @@
|
||||||
*> DASUM takes the sum of the absolute values.
|
*> DASUM takes the sum of the absolute values.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DX
|
||||||
|
*> \verbatim
|
||||||
|
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of DX
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level1
|
*> \ingroup double_blas_level1
|
||||||
*
|
*
|
||||||
|
@ -51,10 +71,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX)
|
DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine (version 3.4.0) --
|
* -- Reference BLAS level1 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INCX,N
|
INTEGER INCX,N
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
|
* SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION DA
|
* DOUBLE PRECISION DA
|
||||||
* INTEGER INCX,INCY,N
|
* INTEGER INCX,INCY,N
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION DX(*),DY(*)
|
* DOUBLE PRECISION DX(*),DY(*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -28,15 +28,52 @@
|
||||||
*> uses unrolled loops for increments equal to one.
|
*> uses unrolled loops for increments equal to one.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DA
|
||||||
|
*> \verbatim
|
||||||
|
*> DA is DOUBLE PRECISION
|
||||||
|
*> On entry, DA specifies the scalar alpha.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DX
|
||||||
|
*> \verbatim
|
||||||
|
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of DX
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] DY
|
||||||
|
*> \verbatim
|
||||||
|
*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> storage spacing between elements of DY
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level1
|
*> \ingroup double_blas_level1
|
||||||
*
|
*
|
||||||
|
@ -52,10 +89,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
|
SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine (version 3.4.0) --
|
* -- Reference BLAS level1 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION DA
|
DOUBLE PRECISION DA
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DBDSQR + dependencies
|
*> Download DBDSQR + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dbdsqr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dbdsqr.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dbdsqr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dbdsqr.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsqr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsqr.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U,
|
* SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U,
|
||||||
* LDU, C, LDC, WORK, INFO )
|
* LDU, C, LDC, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER UPLO
|
* CHARACTER UPLO
|
||||||
* INTEGER INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU
|
* INTEGER INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* DOUBLE PRECISION C( LDC, * ), D( * ), E( * ), U( LDU, * ),
|
* DOUBLE PRECISION C( LDC, * ), D( * ), E( * ), U( LDU, * ),
|
||||||
* $ VT( LDVT, * ), WORK( * )
|
* $ VT( LDVT, * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -40,9 +40,9 @@
|
||||||
*> left singular vectors from the singular value decomposition (SVD) of
|
*> left singular vectors from the singular value decomposition (SVD) of
|
||||||
*> a real N-by-N (upper or lower) bidiagonal matrix B using the implicit
|
*> a real N-by-N (upper or lower) bidiagonal matrix B using the implicit
|
||||||
*> zero-shift QR algorithm. The SVD of B has the form
|
*> zero-shift QR algorithm. The SVD of B has the form
|
||||||
*>
|
*>
|
||||||
*> B = Q * S * P**T
|
*> B = Q * S * P**T
|
||||||
*>
|
*>
|
||||||
*> where S is the diagonal matrix of singular values, Q is an orthogonal
|
*> where S is the diagonal matrix of singular values, Q is an orthogonal
|
||||||
*> matrix of left singular vectors, and P is an orthogonal matrix of
|
*> matrix of left singular vectors, and P is an orthogonal matrix of
|
||||||
*> right singular vectors. If left singular vectors are requested, this
|
*> right singular vectors. If left singular vectors are requested, this
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> E is DOUBLE PRECISION array, dimension (N-1)
|
*> E is DOUBLE PRECISION array, dimension (N-1)
|
||||||
*> On entry, the N-1 offdiagonal elements of the bidiagonal
|
*> On entry, the N-1 offdiagonal elements of the bidiagonal
|
||||||
*> matrix B.
|
*> matrix B.
|
||||||
*> On exit, if INFO = 0, E is destroyed; if INFO > 0, D and E
|
*> On exit, if INFO = 0, E is destroyed; if INFO > 0, D and E
|
||||||
*> will contain the diagonal and superdiagonal elements of a
|
*> will contain the diagonal and superdiagonal elements of a
|
||||||
*> bidiagonal matrix orthogonally equivalent to the one given
|
*> bidiagonal matrix orthogonally equivalent to the one given
|
||||||
|
@ -179,7 +179,7 @@
|
||||||
*> = 1, a split was marked by a positive value in E
|
*> = 1, a split was marked by a positive value in E
|
||||||
*> = 2, current block of Z not diagonalized after 30*N
|
*> = 2, current block of Z not diagonalized after 30*N
|
||||||
*> iterations (in inner while loop)
|
*> iterations (in inner while loop)
|
||||||
*> = 3, termination criterion of outer while loop not met
|
*> = 3, termination criterion of outer while loop not met
|
||||||
*> (program created more than N unreduced blocks)
|
*> (program created more than N unreduced blocks)
|
||||||
*> else NCVT = NRU = NCC = 0,
|
*> else NCVT = NRU = NCC = 0,
|
||||||
*> the algorithm did not converge; D and E contain the
|
*> the algorithm did not converge; D and E contain the
|
||||||
|
@ -212,17 +212,28 @@
|
||||||
*> algorithm through its inner loop. The algorithms stops
|
*> algorithm through its inner loop. The algorithms stops
|
||||||
*> (and so fails to converge) if the number of passes
|
*> (and so fails to converge) if the number of passes
|
||||||
*> through the inner loop exceeds MAXITR*N**2.
|
*> through the inner loop exceeds MAXITR*N**2.
|
||||||
|
*>
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
*> \par Note:
|
||||||
|
* ===========
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*> Bug report from Cezary Dendek.
|
||||||
|
*> On March 23rd 2017, the INTEGER variable MAXIT = MAXITR*N**2 is
|
||||||
|
*> removed since it can overflow pretty easily (for N larger or equal
|
||||||
|
*> than 18,919). We instead use MAXITDIVN = MAXITR*N.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -230,10 +241,10 @@
|
||||||
SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U,
|
SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U,
|
||||||
$ LDU, C, LDC, WORK, INFO )
|
$ LDU, C, LDC, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER UPLO
|
CHARACTER UPLO
|
||||||
|
@ -266,8 +277,8 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
LOGICAL LOWER, ROTATE
|
LOGICAL LOWER, ROTATE
|
||||||
INTEGER I, IDIR, ISUB, ITER, J, LL, LLL, M, MAXIT, NM1,
|
INTEGER I, IDIR, ISUB, ITER, ITERDIVN, J, LL, LLL, M,
|
||||||
$ NM12, NM13, OLDLL, OLDM
|
$ MAXITDIVN, NM1, NM12, NM13, OLDLL, OLDM
|
||||||
DOUBLE PRECISION ABSE, ABSS, COSL, COSR, CS, EPS, F, G, H, MU,
|
DOUBLE PRECISION ABSE, ABSS, COSL, COSR, CS, EPS, F, G, H, MU,
|
||||||
$ OLDCS, OLDSN, R, SHIFT, SIGMN, SIGMX, SINL,
|
$ OLDCS, OLDSN, R, SHIFT, SIGMN, SIGMX, SINL,
|
||||||
$ SINR, SLL, SMAX, SMIN, SMINL, SMINOA,
|
$ SINR, SLL, SMAX, SMIN, SMINL, SMINOA,
|
||||||
|
@ -329,7 +340,7 @@
|
||||||
CALL DLASQ1( N, D, E, WORK, INFO )
|
CALL DLASQ1( N, D, E, WORK, INFO )
|
||||||
*
|
*
|
||||||
* If INFO equals 2, dqds didn't finish, try to finish
|
* If INFO equals 2, dqds didn't finish, try to finish
|
||||||
*
|
*
|
||||||
IF( INFO .NE. 2 ) RETURN
|
IF( INFO .NE. 2 ) RETURN
|
||||||
INFO = 0
|
INFO = 0
|
||||||
END IF
|
END IF
|
||||||
|
@ -400,20 +411,21 @@
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
SMINOA = SMINOA / SQRT( DBLE( N ) )
|
SMINOA = SMINOA / SQRT( DBLE( N ) )
|
||||||
THRESH = MAX( TOL*SMINOA, MAXITR*N*N*UNFL )
|
THRESH = MAX( TOL*SMINOA, MAXITR*(N*(N*UNFL)) )
|
||||||
ELSE
|
ELSE
|
||||||
*
|
*
|
||||||
* Absolute accuracy desired
|
* Absolute accuracy desired
|
||||||
*
|
*
|
||||||
THRESH = MAX( ABS( TOL )*SMAX, MAXITR*N*N*UNFL )
|
THRESH = MAX( ABS( TOL )*SMAX, MAXITR*(N*(N*UNFL)) )
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Prepare for main iteration loop for the singular values
|
* Prepare for main iteration loop for the singular values
|
||||||
* (MAXIT is the maximum number of passes through the inner
|
* (MAXIT is the maximum number of passes through the inner
|
||||||
* loop permitted before nonconvergence signalled.)
|
* loop permitted before nonconvergence signalled.)
|
||||||
*
|
*
|
||||||
MAXIT = MAXITR*N*N
|
MAXITDIVN = MAXITR*N
|
||||||
ITER = 0
|
ITERDIVN = 0
|
||||||
|
ITER = -1
|
||||||
OLDLL = -1
|
OLDLL = -1
|
||||||
OLDM = -1
|
OLDM = -1
|
||||||
*
|
*
|
||||||
|
@ -429,8 +441,13 @@
|
||||||
*
|
*
|
||||||
IF( M.LE.1 )
|
IF( M.LE.1 )
|
||||||
$ GO TO 160
|
$ GO TO 160
|
||||||
IF( ITER.GT.MAXIT )
|
*
|
||||||
$ GO TO 200
|
IF( ITER.GE.N ) THEN
|
||||||
|
ITER = ITER - N
|
||||||
|
ITERDIVN = ITERDIVN + 1
|
||||||
|
IF( ITERDIVN.GE.MAXITDIVN )
|
||||||
|
$ GO TO 200
|
||||||
|
END IF
|
||||||
*
|
*
|
||||||
* Find diagonal block of matrix to work on
|
* Find diagonal block of matrix to work on
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,47 +2,55 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DCABS1(Z)
|
* DOUBLE PRECISION FUNCTION DCABS1(Z)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* COMPLEX*16 Z
|
* COMPLEX*16 Z
|
||||||
* ..
|
* ..
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
*>
|
*>
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*>
|
*>
|
||||||
*> DCABS1 computes absolute value of a double complex number
|
*> DCABS1 computes |Re(.)| + |Im(.)| of a double complex number
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is COMPLEX*16
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level1
|
*> \ingroup double_blas_level1
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DCABS1(Z)
|
DOUBLE PRECISION FUNCTION DCABS1(Z)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine (version 3.4.0) --
|
* -- Reference BLAS level1 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
COMPLEX*16 Z
|
COMPLEX*16 Z
|
||||||
|
|
|
@ -2,21 +2,21 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
|
* SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INCX,INCY,N
|
* INTEGER INCX,INCY,N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION DX(*),DY(*)
|
* DOUBLE PRECISION DX(*),DY(*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -24,18 +24,49 @@
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*>
|
*>
|
||||||
*> DCOPY copies a vector, x, to a vector, y.
|
*> DCOPY copies a vector, x, to a vector, y.
|
||||||
*> uses unrolled loops for increments equal to one.
|
*> uses unrolled loops for increments equal to 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DX
|
||||||
|
*> \verbatim
|
||||||
|
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of DX
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DY
|
||||||
|
*> \verbatim
|
||||||
|
*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> storage spacing between elements of DY
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level1
|
*> \ingroup double_blas_level1
|
||||||
*
|
*
|
||||||
|
@ -51,10 +82,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
|
SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine (version 3.4.0) --
|
* -- Reference BLAS level1 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INCX,INCY,N
|
INTEGER INCX,INCY,N
|
||||||
|
@ -85,7 +116,7 @@
|
||||||
DY(I) = DX(I)
|
DY(I) = DX(I)
|
||||||
END DO
|
END DO
|
||||||
IF (N.LT.7) RETURN
|
IF (N.LT.7) RETURN
|
||||||
END IF
|
END IF
|
||||||
MP1 = M + 1
|
MP1 = M + 1
|
||||||
DO I = MP1,N,7
|
DO I = MP1,N,7
|
||||||
DY(I) = DX(I)
|
DY(I) = DX(I)
|
||||||
|
@ -96,7 +127,7 @@
|
||||||
DY(I+5) = DX(I+5)
|
DY(I+5) = DX(I+5)
|
||||||
DY(I+6) = DX(I+6)
|
DY(I+6) = DX(I+6)
|
||||||
END DO
|
END DO
|
||||||
ELSE
|
ELSE
|
||||||
*
|
*
|
||||||
* code for unequal increments or equal increments
|
* code for unequal increments or equal increments
|
||||||
* not equal to 1
|
* not equal to 1
|
||||||
|
|
|
@ -2,21 +2,21 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
|
* DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INCX,INCY,N
|
* INTEGER INCX,INCY,N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION DX(*),DY(*)
|
* DOUBLE PRECISION DX(*),DY(*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -27,15 +27,46 @@
|
||||||
*> uses unrolled loops for increments equal to one.
|
*> uses unrolled loops for increments equal to one.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DX
|
||||||
|
*> \verbatim
|
||||||
|
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of DX
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DY
|
||||||
|
*> \verbatim
|
||||||
|
*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCY
|
||||||
|
*> \verbatim
|
||||||
|
*> INCY is INTEGER
|
||||||
|
*> storage spacing between elements of DY
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level1
|
*> \ingroup double_blas_level1
|
||||||
*
|
*
|
||||||
|
@ -51,10 +82,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
|
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine (version 3.4.0) --
|
* -- Reference BLAS level1 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INCX,INCY,N
|
INTEGER INCX,INCY,N
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGEBD2 + dependencies
|
*> Download DGEBD2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgebd2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgebd2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgebd2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgebd2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebd2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebd2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
|
* SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, M, N
|
* INTEGER INFO, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ),
|
* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ),
|
||||||
* $ TAUQ( * ), WORK( * )
|
* $ TAUQ( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] TAUQ
|
*> \param[out] TAUQ
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> TAUQ is DOUBLE PRECISION array dimension (min(M,N))
|
*> TAUQ is DOUBLE PRECISION array, dimension (min(M,N))
|
||||||
*> The scalar factors of the elementary reflectors which
|
*> The scalar factors of the elementary reflectors which
|
||||||
*> represent the orthogonal matrix Q. See Further Details.
|
*> represent the orthogonal matrix Q. See Further Details.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -127,12 +127,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
|
@ -189,10 +189,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
|
SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, M, N
|
INTEGER INFO, LDA, M, N
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGEBRD + dependencies
|
*> Download DGEBRD + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgebrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgebrd.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgebrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgebrd.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebrd.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,
|
* SUBROUTINE DGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,
|
||||||
* INFO )
|
* INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, LWORK, M, N
|
* INTEGER INFO, LDA, LWORK, M, N
|
||||||
* ..
|
* ..
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ),
|
* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ),
|
||||||
* $ TAUQ( * ), WORK( * )
|
* $ TAUQ( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -101,7 +101,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] TAUQ
|
*> \param[out] TAUQ
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> TAUQ is DOUBLE PRECISION array dimension (min(M,N))
|
*> TAUQ is DOUBLE PRECISION array, dimension (min(M,N))
|
||||||
*> The scalar factors of the elementary reflectors which
|
*> The scalar factors of the elementary reflectors which
|
||||||
*> represent the orthogonal matrix Q. See Further Details.
|
*> represent the orthogonal matrix Q. See Further Details.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -142,12 +142,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
|
@ -205,10 +205,10 @@
|
||||||
SUBROUTINE DGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,
|
SUBROUTINE DGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, LWORK, M, N
|
INTEGER INFO, LDA, LWORK, M, N
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGECON + dependencies
|
*> Download DGECON + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgecon.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgecon.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgecon.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgecon.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgecon.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgecon.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
* SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
||||||
* INFO )
|
* INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER NORM
|
* CHARACTER NORM
|
||||||
* INTEGER INFO, LDA, N
|
* INTEGER INFO, LDA, N
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
* INTEGER IWORK( * )
|
* INTEGER IWORK( * )
|
||||||
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -111,12 +111,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
|
@ -124,10 +124,10 @@
|
||||||
SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER NORM
|
CHARACTER NORM
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGELQ2 + dependencies
|
*> Download DGELQ2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgelq2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgelq2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgelq2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgelq2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelq2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelq2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGELQ2( M, N, A, LDA, TAU, WORK, INFO )
|
* SUBROUTINE DGELQ2( M, N, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, M, N
|
* INTEGER INFO, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -91,12 +91,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
|
@ -121,10 +121,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGELQ2( M, N, A, LDA, TAU, WORK, INFO )
|
SUBROUTINE DGELQ2( M, N, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, M, N
|
INTEGER INFO, LDA, M, N
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGELQF + dependencies
|
*> Download DGELQF + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgelqf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgelqf.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgelqf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgelqf.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelqf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelqf.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
* SUBROUTINE DGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, LWORK, M, N
|
* INTEGER INFO, LDA, LWORK, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -105,12 +105,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
|
@ -135,10 +135,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
SUBROUTINE DGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, LWORK, M, N
|
INTEGER INFO, LDA, LWORK, M, N
|
||||||
|
|
|
@ -0,0 +1,629 @@
|
||||||
|
*> \brief <b> DGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices</b>
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DGELSD + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgelsd.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgelsd.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelsd.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
|
||||||
|
* WORK, LWORK, IWORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK
|
||||||
|
* DOUBLE PRECISION RCOND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER IWORK( * )
|
||||||
|
* DOUBLE PRECISION A( LDA, * ), B( LDB, * ), S( * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DGELSD computes the minimum-norm solution to a real linear least
|
||||||
|
*> squares problem:
|
||||||
|
*> minimize 2-norm(| b - A*x |)
|
||||||
|
*> using the singular value decomposition (SVD) of A. A is an M-by-N
|
||||||
|
*> matrix which may be rank-deficient.
|
||||||
|
*>
|
||||||
|
*> Several right hand side vectors b and solution vectors x can be
|
||||||
|
*> handled in a single call; they are stored as the columns of the
|
||||||
|
*> M-by-NRHS right hand side matrix B and the N-by-NRHS solution
|
||||||
|
*> matrix X.
|
||||||
|
*>
|
||||||
|
*> The problem is solved in three steps:
|
||||||
|
*> (1) Reduce the coefficient matrix A to bidiagonal form with
|
||||||
|
*> Householder transformations, reducing the original problem
|
||||||
|
*> into a "bidiagonal least squares problem" (BLS)
|
||||||
|
*> (2) Solve the BLS using a divide and conquer approach.
|
||||||
|
*> (3) Apply back all the Householder transformations to solve
|
||||||
|
*> the original least squares problem.
|
||||||
|
*>
|
||||||
|
*> The effective rank of A is determined by treating as zero those
|
||||||
|
*> singular values which are less than RCOND times the largest singular
|
||||||
|
*> value.
|
||||||
|
*>
|
||||||
|
*> The divide and conquer algorithm makes very mild assumptions about
|
||||||
|
*> floating point arithmetic. It will work on machines with a guard
|
||||||
|
*> digit in add/subtract, or on those binary machines without guard
|
||||||
|
*> digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or
|
||||||
|
*> Cray-2. It could conceivably fail on hexadecimal or decimal machines
|
||||||
|
*> without guard digits, but we know of none.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] M
|
||||||
|
*> \verbatim
|
||||||
|
*> M is INTEGER
|
||||||
|
*> The number of rows of A. M >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> The number of columns of A. N >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NRHS
|
||||||
|
*> \verbatim
|
||||||
|
*> NRHS is INTEGER
|
||||||
|
*> The number of right hand sides, i.e., the number of columns
|
||||||
|
*> of the matrices B and X. NRHS >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] A
|
||||||
|
*> \verbatim
|
||||||
|
*> A is DOUBLE PRECISION array, dimension (LDA,N)
|
||||||
|
*> On entry, the M-by-N matrix A.
|
||||||
|
*> On exit, A has been destroyed.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDA
|
||||||
|
*> \verbatim
|
||||||
|
*> LDA is INTEGER
|
||||||
|
*> The leading dimension of the array A. LDA >= max(1,M).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] B
|
||||||
|
*> \verbatim
|
||||||
|
*> B is DOUBLE PRECISION array, dimension (LDB,NRHS)
|
||||||
|
*> On entry, the M-by-NRHS right hand side matrix B.
|
||||||
|
*> On exit, B is overwritten by the N-by-NRHS solution
|
||||||
|
*> matrix X. If m >= n and RANK = n, the residual
|
||||||
|
*> sum-of-squares for the solution in the i-th column is given
|
||||||
|
*> by the sum of squares of elements n+1:m in that column.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDB
|
||||||
|
*> \verbatim
|
||||||
|
*> LDB is INTEGER
|
||||||
|
*> The leading dimension of the array B. LDB >= max(1,max(M,N)).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] S
|
||||||
|
*> \verbatim
|
||||||
|
*> S is DOUBLE PRECISION array, dimension (min(M,N))
|
||||||
|
*> The singular values of A in decreasing order.
|
||||||
|
*> The condition number of A in the 2-norm = S(1)/S(min(m,n)).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] RCOND
|
||||||
|
*> \verbatim
|
||||||
|
*> RCOND is DOUBLE PRECISION
|
||||||
|
*> RCOND is used to determine the effective rank of A.
|
||||||
|
*> Singular values S(i) <= RCOND*S(1) are treated as zero.
|
||||||
|
*> If RCOND < 0, machine precision is used instead.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] RANK
|
||||||
|
*> \verbatim
|
||||||
|
*> RANK is INTEGER
|
||||||
|
*> The effective rank of A, i.e., the number of singular values
|
||||||
|
*> which are greater than RCOND*S(1).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
|
||||||
|
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LWORK
|
||||||
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
|
*> The dimension of the array WORK. LWORK must be at least 1.
|
||||||
|
*> The exact minimum amount of workspace needed depends on M,
|
||||||
|
*> N and NRHS. As long as LWORK is at least
|
||||||
|
*> 12*N + 2*N*SMLSIZ + 8*N*NLVL + N*NRHS + (SMLSIZ+1)**2,
|
||||||
|
*> if M is greater than or equal to N or
|
||||||
|
*> 12*M + 2*M*SMLSIZ + 8*M*NLVL + M*NRHS + (SMLSIZ+1)**2,
|
||||||
|
*> if M is less than N, the code will execute correctly.
|
||||||
|
*> SMLSIZ is returned by ILAENV and is equal to the maximum
|
||||||
|
*> size of the subproblems at the bottom of the computation
|
||||||
|
*> tree (usually about 25), and
|
||||||
|
*> NLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 )
|
||||||
|
*> For good performance, LWORK should generally be larger.
|
||||||
|
*>
|
||||||
|
*> If LWORK = -1, then a workspace query is assumed; the routine
|
||||||
|
*> only calculates the optimal size of the WORK array, returns
|
||||||
|
*> this value as the first entry of the WORK array, and no error
|
||||||
|
*> message related to LWORK is issued by XERBLA.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IWORK
|
||||||
|
*> \verbatim
|
||||||
|
*> IWORK is INTEGER array, dimension (MAX(1,LIWORK))
|
||||||
|
*> LIWORK >= max(1, 3 * MINMN * NLVL + 11 * MINMN),
|
||||||
|
*> where MINMN = MIN( M,N ).
|
||||||
|
*> On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> > 0: the algorithm for computing the SVD failed to converge;
|
||||||
|
*> if INFO = i, i off-diagonal elements of an intermediate
|
||||||
|
*> bidiagonal form did not converge to zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date June 2017
|
||||||
|
*
|
||||||
|
*> \ingroup doubleGEsolve
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Ren-Cang Li, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA \n
|
||||||
|
*> Osni Marques, LBNL/NERSC, USA \n
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
|
||||||
|
$ WORK, LWORK, IWORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK driver routine (version 3.7.1) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* June 2017
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK
|
||||||
|
DOUBLE PRECISION RCOND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER IWORK( * )
|
||||||
|
DOUBLE PRECISION A( LDA, * ), B( LDB, * ), S( * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO, ONE, TWO
|
||||||
|
PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
LOGICAL LQUERY
|
||||||
|
INTEGER IASCL, IBSCL, IE, IL, ITAU, ITAUP, ITAUQ,
|
||||||
|
$ LDWORK, LIWORK, MAXMN, MAXWRK, MINMN, MINWRK,
|
||||||
|
$ MM, MNTHR, NLVL, NWORK, SMLSIZ, WLALSD
|
||||||
|
DOUBLE PRECISION ANRM, BIGNUM, BNRM, EPS, SFMIN, SMLNUM
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DGEBRD, DGELQF, DGEQRF, DLABAD, DLACPY, DLALSD,
|
||||||
|
$ DLASCL, DLASET, DORMBR, DORMLQ, DORMQR, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
INTEGER ILAENV
|
||||||
|
DOUBLE PRECISION DLAMCH, DLANGE
|
||||||
|
EXTERNAL ILAENV, DLAMCH, DLANGE
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC DBLE, INT, LOG, MAX, MIN
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input arguments.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
MINMN = MIN( M, N )
|
||||||
|
MAXMN = MAX( M, N )
|
||||||
|
MNTHR = ILAENV( 6, 'DGELSD', ' ', M, N, NRHS, -1 )
|
||||||
|
LQUERY = ( LWORK.EQ.-1 )
|
||||||
|
IF( M.LT.0 ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( N.LT.0 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( NRHS.LT.0 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
|
||||||
|
INFO = -5
|
||||||
|
ELSE IF( LDB.LT.MAX( 1, MAXMN ) ) THEN
|
||||||
|
INFO = -7
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
SMLSIZ = ILAENV( 9, 'DGELSD', ' ', 0, 0, 0, 0 )
|
||||||
|
*
|
||||||
|
* Compute workspace.
|
||||||
|
* (Note: Comments in the code beginning "Workspace:" describe the
|
||||||
|
* minimal amount of workspace needed at that point in the code,
|
||||||
|
* as well as the preferred amount for good performance.
|
||||||
|
* NB refers to the optimal block size for the immediately
|
||||||
|
* following subroutine, as returned by ILAENV.)
|
||||||
|
*
|
||||||
|
MINWRK = 1
|
||||||
|
LIWORK = 1
|
||||||
|
MINMN = MAX( 1, MINMN )
|
||||||
|
NLVL = MAX( INT( LOG( DBLE( MINMN ) / DBLE( SMLSIZ+1 ) ) /
|
||||||
|
$ LOG( TWO ) ) + 1, 0 )
|
||||||
|
*
|
||||||
|
IF( INFO.EQ.0 ) THEN
|
||||||
|
MAXWRK = 0
|
||||||
|
LIWORK = 3*MINMN*NLVL + 11*MINMN
|
||||||
|
MM = M
|
||||||
|
IF( M.GE.N .AND. M.GE.MNTHR ) THEN
|
||||||
|
*
|
||||||
|
* Path 1a - overdetermined, with many more rows than columns.
|
||||||
|
*
|
||||||
|
MM = N
|
||||||
|
MAXWRK = MAX( MAXWRK, N+N*ILAENV( 1, 'DGEQRF', ' ', M, N,
|
||||||
|
$ -1, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, N+NRHS*
|
||||||
|
$ ILAENV( 1, 'DORMQR', 'LT', M, NRHS, N, -1 ) )
|
||||||
|
END IF
|
||||||
|
IF( M.GE.N ) THEN
|
||||||
|
*
|
||||||
|
* Path 1 - overdetermined or exactly determined.
|
||||||
|
*
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*N+( MM+N )*
|
||||||
|
$ ILAENV( 1, 'DGEBRD', ' ', MM, N, -1, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*N+NRHS*
|
||||||
|
$ ILAENV( 1, 'DORMBR', 'QLT', MM, NRHS, N, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*N+( N-1 )*
|
||||||
|
$ ILAENV( 1, 'DORMBR', 'PLN', N, NRHS, N, -1 ) )
|
||||||
|
WLALSD = 9*N+2*N*SMLSIZ+8*N*NLVL+N*NRHS+(SMLSIZ+1)**2
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*N+WLALSD )
|
||||||
|
MINWRK = MAX( 3*N+MM, 3*N+NRHS, 3*N+WLALSD )
|
||||||
|
END IF
|
||||||
|
IF( N.GT.M ) THEN
|
||||||
|
WLALSD = 9*M+2*M*SMLSIZ+8*M*NLVL+M*NRHS+(SMLSIZ+1)**2
|
||||||
|
IF( N.GE.MNTHR ) THEN
|
||||||
|
*
|
||||||
|
* Path 2a - underdetermined, with many more columns
|
||||||
|
* than rows.
|
||||||
|
*
|
||||||
|
MAXWRK = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 )
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M+4*M+2*M*
|
||||||
|
$ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M+4*M+NRHS*
|
||||||
|
$ ILAENV( 1, 'DORMBR', 'QLT', M, NRHS, M, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M+4*M+( M-1 )*
|
||||||
|
$ ILAENV( 1, 'DORMBR', 'PLN', M, NRHS, M, -1 ) )
|
||||||
|
IF( NRHS.GT.1 ) THEN
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M+M+M*NRHS )
|
||||||
|
ELSE
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M+2*M )
|
||||||
|
END IF
|
||||||
|
MAXWRK = MAX( MAXWRK, M+NRHS*
|
||||||
|
$ ILAENV( 1, 'DORMLQ', 'LT', N, NRHS, M, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M+4*M+WLALSD )
|
||||||
|
! XXX: Ensure the Path 2a case below is triggered. The workspace
|
||||||
|
! calculation should use queries for all routines eventually.
|
||||||
|
MAXWRK = MAX( MAXWRK,
|
||||||
|
$ 4*M+M*M+MAX( M, 2*M-4, NRHS, N-3*M ) )
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Path 2 - remaining underdetermined cases.
|
||||||
|
*
|
||||||
|
MAXWRK = 3*M + ( N+M )*ILAENV( 1, 'DGEBRD', ' ', M, N,
|
||||||
|
$ -1, -1 )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*M+NRHS*
|
||||||
|
$ ILAENV( 1, 'DORMBR', 'QLT', M, NRHS, N, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*M+M*
|
||||||
|
$ ILAENV( 1, 'DORMBR', 'PLN', N, NRHS, M, -1 ) )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*M+WLALSD )
|
||||||
|
END IF
|
||||||
|
MINWRK = MAX( 3*M+NRHS, 3*M+M, 3*M+WLALSD )
|
||||||
|
END IF
|
||||||
|
MINWRK = MIN( MINWRK, MAXWRK )
|
||||||
|
WORK( 1 ) = MAXWRK
|
||||||
|
IWORK( 1 ) = LIWORK
|
||||||
|
|
||||||
|
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
|
||||||
|
INFO = -12
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DGELSD', -INFO )
|
||||||
|
RETURN
|
||||||
|
ELSE IF( LQUERY ) THEN
|
||||||
|
GO TO 10
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible.
|
||||||
|
*
|
||||||
|
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
|
||||||
|
RANK = 0
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Get machine parameters.
|
||||||
|
*
|
||||||
|
EPS = DLAMCH( 'P' )
|
||||||
|
SFMIN = DLAMCH( 'S' )
|
||||||
|
SMLNUM = SFMIN / EPS
|
||||||
|
BIGNUM = ONE / SMLNUM
|
||||||
|
CALL DLABAD( SMLNUM, BIGNUM )
|
||||||
|
*
|
||||||
|
* Scale A if max entry outside range [SMLNUM,BIGNUM].
|
||||||
|
*
|
||||||
|
ANRM = DLANGE( 'M', M, N, A, LDA, WORK )
|
||||||
|
IASCL = 0
|
||||||
|
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm up to SMLNUM.
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, SMLNUM, M, N, A, LDA, INFO )
|
||||||
|
IASCL = 1
|
||||||
|
ELSE IF( ANRM.GT.BIGNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm down to BIGNUM.
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, BIGNUM, M, N, A, LDA, INFO )
|
||||||
|
IASCL = 2
|
||||||
|
ELSE IF( ANRM.EQ.ZERO ) THEN
|
||||||
|
*
|
||||||
|
* Matrix all zero. Return zero solution.
|
||||||
|
*
|
||||||
|
CALL DLASET( 'F', MAX( M, N ), NRHS, ZERO, ZERO, B, LDB )
|
||||||
|
CALL DLASET( 'F', MINMN, 1, ZERO, ZERO, S, 1 )
|
||||||
|
RANK = 0
|
||||||
|
GO TO 10
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Scale B if max entry outside range [SMLNUM,BIGNUM].
|
||||||
|
*
|
||||||
|
BNRM = DLANGE( 'M', M, NRHS, B, LDB, WORK )
|
||||||
|
IBSCL = 0
|
||||||
|
IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm up to SMLNUM.
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, BNRM, SMLNUM, M, NRHS, B, LDB, INFO )
|
||||||
|
IBSCL = 1
|
||||||
|
ELSE IF( BNRM.GT.BIGNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm down to BIGNUM.
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, BNRM, BIGNUM, M, NRHS, B, LDB, INFO )
|
||||||
|
IBSCL = 2
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* If M < N make sure certain entries of B are zero.
|
||||||
|
*
|
||||||
|
IF( M.LT.N )
|
||||||
|
$ CALL DLASET( 'F', N-M, NRHS, ZERO, ZERO, B( M+1, 1 ), LDB )
|
||||||
|
*
|
||||||
|
* Overdetermined case.
|
||||||
|
*
|
||||||
|
IF( M.GE.N ) THEN
|
||||||
|
*
|
||||||
|
* Path 1 - overdetermined or exactly determined.
|
||||||
|
*
|
||||||
|
MM = M
|
||||||
|
IF( M.GE.MNTHR ) THEN
|
||||||
|
*
|
||||||
|
* Path 1a - overdetermined, with many more rows than columns.
|
||||||
|
*
|
||||||
|
MM = N
|
||||||
|
ITAU = 1
|
||||||
|
NWORK = ITAU + N
|
||||||
|
*
|
||||||
|
* Compute A=Q*R.
|
||||||
|
* (Workspace: need 2*N, prefer N+N*NB)
|
||||||
|
*
|
||||||
|
CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), WORK( NWORK ),
|
||||||
|
$ LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose(Q).
|
||||||
|
* (Workspace: need N+NRHS, prefer N+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMQR( 'L', 'T', M, NRHS, N, A, LDA, WORK( ITAU ), B,
|
||||||
|
$ LDB, WORK( NWORK ), LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Zero out below R.
|
||||||
|
*
|
||||||
|
IF( N.GT.1 ) THEN
|
||||||
|
CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, A( 2, 1 ), LDA )
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
IE = 1
|
||||||
|
ITAUQ = IE + N
|
||||||
|
ITAUP = ITAUQ + N
|
||||||
|
NWORK = ITAUP + N
|
||||||
|
*
|
||||||
|
* Bidiagonalize R in A.
|
||||||
|
* (Workspace: need 3*N+MM, prefer 3*N+(MM+N)*NB)
|
||||||
|
*
|
||||||
|
CALL DGEBRD( MM, N, A, LDA, S, WORK( IE ), WORK( ITAUQ ),
|
||||||
|
$ WORK( ITAUP ), WORK( NWORK ), LWORK-NWORK+1,
|
||||||
|
$ INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose of left bidiagonalizing vectors of R.
|
||||||
|
* (Workspace: need 3*N+NRHS, prefer 3*N+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', MM, NRHS, N, A, LDA, WORK( ITAUQ ),
|
||||||
|
$ B, LDB, WORK( NWORK ), LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Solve the bidiagonal least squares problem.
|
||||||
|
*
|
||||||
|
CALL DLALSD( 'U', SMLSIZ, N, NRHS, S, WORK( IE ), B, LDB,
|
||||||
|
$ RCOND, RANK, WORK( NWORK ), IWORK, INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
GO TO 10
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Multiply B by right bidiagonalizing vectors of R.
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'P', 'L', 'N', N, NRHS, N, A, LDA, WORK( ITAUP ),
|
||||||
|
$ B, LDB, WORK( NWORK ), LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
ELSE IF( N.GE.MNTHR .AND. LWORK.GE.4*M+M*M+
|
||||||
|
$ MAX( M, 2*M-4, NRHS, N-3*M, WLALSD ) ) THEN
|
||||||
|
*
|
||||||
|
* Path 2a - underdetermined, with many more columns than rows
|
||||||
|
* and sufficient workspace for an efficient algorithm.
|
||||||
|
*
|
||||||
|
LDWORK = M
|
||||||
|
IF( LWORK.GE.MAX( 4*M+M*LDA+MAX( M, 2*M-4, NRHS, N-3*M ),
|
||||||
|
$ M*LDA+M+M*NRHS, 4*M+M*LDA+WLALSD ) )LDWORK = LDA
|
||||||
|
ITAU = 1
|
||||||
|
NWORK = M + 1
|
||||||
|
*
|
||||||
|
* Compute A=L*Q.
|
||||||
|
* (Workspace: need 2*M, prefer M+M*NB)
|
||||||
|
*
|
||||||
|
CALL DGELQF( M, N, A, LDA, WORK( ITAU ), WORK( NWORK ),
|
||||||
|
$ LWORK-NWORK+1, INFO )
|
||||||
|
IL = NWORK
|
||||||
|
*
|
||||||
|
* Copy L to WORK(IL), zeroing out above its diagonal.
|
||||||
|
*
|
||||||
|
CALL DLACPY( 'L', M, M, A, LDA, WORK( IL ), LDWORK )
|
||||||
|
CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, WORK( IL+LDWORK ),
|
||||||
|
$ LDWORK )
|
||||||
|
IE = IL + LDWORK*M
|
||||||
|
ITAUQ = IE + M
|
||||||
|
ITAUP = ITAUQ + M
|
||||||
|
NWORK = ITAUP + M
|
||||||
|
*
|
||||||
|
* Bidiagonalize L in WORK(IL).
|
||||||
|
* (Workspace: need M*M+5*M, prefer M*M+4*M+2*M*NB)
|
||||||
|
*
|
||||||
|
CALL DGEBRD( M, M, WORK( IL ), LDWORK, S, WORK( IE ),
|
||||||
|
$ WORK( ITAUQ ), WORK( ITAUP ), WORK( NWORK ),
|
||||||
|
$ LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose of left bidiagonalizing vectors of L.
|
||||||
|
* (Workspace: need M*M+4*M+NRHS, prefer M*M+4*M+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, M, WORK( IL ), LDWORK,
|
||||||
|
$ WORK( ITAUQ ), B, LDB, WORK( NWORK ),
|
||||||
|
$ LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Solve the bidiagonal least squares problem.
|
||||||
|
*
|
||||||
|
CALL DLALSD( 'U', SMLSIZ, M, NRHS, S, WORK( IE ), B, LDB,
|
||||||
|
$ RCOND, RANK, WORK( NWORK ), IWORK, INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
GO TO 10
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Multiply B by right bidiagonalizing vectors of L.
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'P', 'L', 'N', M, NRHS, M, WORK( IL ), LDWORK,
|
||||||
|
$ WORK( ITAUP ), B, LDB, WORK( NWORK ),
|
||||||
|
$ LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Zero out below first M rows of B.
|
||||||
|
*
|
||||||
|
CALL DLASET( 'F', N-M, NRHS, ZERO, ZERO, B( M+1, 1 ), LDB )
|
||||||
|
NWORK = ITAU + M
|
||||||
|
*
|
||||||
|
* Multiply transpose(Q) by B.
|
||||||
|
* (Workspace: need M+NRHS, prefer M+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMLQ( 'L', 'T', N, NRHS, M, A, LDA, WORK( ITAU ), B,
|
||||||
|
$ LDB, WORK( NWORK ), LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Path 2 - remaining underdetermined cases.
|
||||||
|
*
|
||||||
|
IE = 1
|
||||||
|
ITAUQ = IE + M
|
||||||
|
ITAUP = ITAUQ + M
|
||||||
|
NWORK = ITAUP + M
|
||||||
|
*
|
||||||
|
* Bidiagonalize A.
|
||||||
|
* (Workspace: need 3*M+N, prefer 3*M+(M+N)*NB)
|
||||||
|
*
|
||||||
|
CALL DGEBRD( M, N, A, LDA, S, WORK( IE ), WORK( ITAUQ ),
|
||||||
|
$ WORK( ITAUP ), WORK( NWORK ), LWORK-NWORK+1,
|
||||||
|
$ INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose of left bidiagonalizing vectors.
|
||||||
|
* (Workspace: need 3*M+NRHS, prefer 3*M+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, N, A, LDA, WORK( ITAUQ ),
|
||||||
|
$ B, LDB, WORK( NWORK ), LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Solve the bidiagonal least squares problem.
|
||||||
|
*
|
||||||
|
CALL DLALSD( 'L', SMLSIZ, M, NRHS, S, WORK( IE ), B, LDB,
|
||||||
|
$ RCOND, RANK, WORK( NWORK ), IWORK, INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
GO TO 10
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Multiply B by right bidiagonalizing vectors of A.
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'P', 'L', 'N', N, NRHS, M, A, LDA, WORK( ITAUP ),
|
||||||
|
$ B, LDB, WORK( NWORK ), LWORK-NWORK+1, INFO )
|
||||||
|
*
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Undo scaling.
|
||||||
|
*
|
||||||
|
IF( IASCL.EQ.1 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, SMLNUM, N, NRHS, B, LDB, INFO )
|
||||||
|
CALL DLASCL( 'G', 0, 0, SMLNUM, ANRM, MINMN, 1, S, MINMN,
|
||||||
|
$ INFO )
|
||||||
|
ELSE IF( IASCL.EQ.2 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, BIGNUM, N, NRHS, B, LDB, INFO )
|
||||||
|
CALL DLASCL( 'G', 0, 0, BIGNUM, ANRM, MINMN, 1, S, MINMN,
|
||||||
|
$ INFO )
|
||||||
|
END IF
|
||||||
|
IF( IBSCL.EQ.1 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, SMLNUM, BNRM, N, NRHS, B, LDB, INFO )
|
||||||
|
ELSE IF( IBSCL.EQ.2 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, BIGNUM, BNRM, N, NRHS, B, LDB, INFO )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
10 CONTINUE
|
||||||
|
WORK( 1 ) = MAXWRK
|
||||||
|
IWORK( 1 ) = LIWORK
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DGELSD
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,747 @@
|
||||||
|
*> \brief <b> DGELSS solves overdetermined or underdetermined systems for GE matrices</b>
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DGELSS + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgelss.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgelss.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelss.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DGELSS( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
|
||||||
|
* WORK, LWORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK
|
||||||
|
* DOUBLE PRECISION RCOND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION A( LDA, * ), B( LDB, * ), S( * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DGELSS computes the minimum norm solution to a real linear least
|
||||||
|
*> squares problem:
|
||||||
|
*>
|
||||||
|
*> Minimize 2-norm(| b - A*x |).
|
||||||
|
*>
|
||||||
|
*> using the singular value decomposition (SVD) of A. A is an M-by-N
|
||||||
|
*> matrix which may be rank-deficient.
|
||||||
|
*>
|
||||||
|
*> Several right hand side vectors b and solution vectors x can be
|
||||||
|
*> handled in a single call; they are stored as the columns of the
|
||||||
|
*> M-by-NRHS right hand side matrix B and the N-by-NRHS solution matrix
|
||||||
|
*> X.
|
||||||
|
*>
|
||||||
|
*> The effective rank of A is determined by treating as zero those
|
||||||
|
*> singular values which are less than RCOND times the largest singular
|
||||||
|
*> value.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] M
|
||||||
|
*> \verbatim
|
||||||
|
*> M is INTEGER
|
||||||
|
*> The number of rows of the matrix A. M >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> The number of columns of the matrix A. N >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NRHS
|
||||||
|
*> \verbatim
|
||||||
|
*> NRHS is INTEGER
|
||||||
|
*> The number of right hand sides, i.e., the number of columns
|
||||||
|
*> of the matrices B and X. NRHS >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] A
|
||||||
|
*> \verbatim
|
||||||
|
*> A is DOUBLE PRECISION array, dimension (LDA,N)
|
||||||
|
*> On entry, the M-by-N matrix A.
|
||||||
|
*> On exit, the first min(m,n) rows of A are overwritten with
|
||||||
|
*> its right singular vectors, stored rowwise.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDA
|
||||||
|
*> \verbatim
|
||||||
|
*> LDA is INTEGER
|
||||||
|
*> The leading dimension of the array A. LDA >= max(1,M).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] B
|
||||||
|
*> \verbatim
|
||||||
|
*> B is DOUBLE PRECISION array, dimension (LDB,NRHS)
|
||||||
|
*> On entry, the M-by-NRHS right hand side matrix B.
|
||||||
|
*> On exit, B is overwritten by the N-by-NRHS solution
|
||||||
|
*> matrix X. If m >= n and RANK = n, the residual
|
||||||
|
*> sum-of-squares for the solution in the i-th column is given
|
||||||
|
*> by the sum of squares of elements n+1:m in that column.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDB
|
||||||
|
*> \verbatim
|
||||||
|
*> LDB is INTEGER
|
||||||
|
*> The leading dimension of the array B. LDB >= max(1,max(M,N)).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] S
|
||||||
|
*> \verbatim
|
||||||
|
*> S is DOUBLE PRECISION array, dimension (min(M,N))
|
||||||
|
*> The singular values of A in decreasing order.
|
||||||
|
*> The condition number of A in the 2-norm = S(1)/S(min(m,n)).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] RCOND
|
||||||
|
*> \verbatim
|
||||||
|
*> RCOND is DOUBLE PRECISION
|
||||||
|
*> RCOND is used to determine the effective rank of A.
|
||||||
|
*> Singular values S(i) <= RCOND*S(1) are treated as zero.
|
||||||
|
*> If RCOND < 0, machine precision is used instead.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] RANK
|
||||||
|
*> \verbatim
|
||||||
|
*> RANK is INTEGER
|
||||||
|
*> The effective rank of A, i.e., the number of singular values
|
||||||
|
*> which are greater than RCOND*S(1).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
|
||||||
|
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LWORK
|
||||||
|
*> \verbatim
|
||||||
|
*> LWORK is INTEGER
|
||||||
|
*> The dimension of the array WORK. LWORK >= 1, and also:
|
||||||
|
*> LWORK >= 3*min(M,N) + max( 2*min(M,N), max(M,N), NRHS )
|
||||||
|
*> For good performance, LWORK should generally be larger.
|
||||||
|
*>
|
||||||
|
*> If LWORK = -1, then a workspace query is assumed; the routine
|
||||||
|
*> only calculates the optimal size of the WORK array, returns
|
||||||
|
*> this value as the first entry of the WORK array, and no error
|
||||||
|
*> message related to LWORK is issued by XERBLA.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> > 0: the algorithm for computing the SVD failed to converge;
|
||||||
|
*> if INFO = i, i off-diagonal elements of an intermediate
|
||||||
|
*> bidiagonal form did not converge to zero.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date December 2016
|
||||||
|
*
|
||||||
|
*> \ingroup doubleGEsolve
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DGELSS( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
|
||||||
|
$ WORK, LWORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK driver routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* December 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK
|
||||||
|
DOUBLE PRECISION RCOND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION A( LDA, * ), B( LDB, * ), S( * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO, ONE
|
||||||
|
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
LOGICAL LQUERY
|
||||||
|
INTEGER BDSPAC, BL, CHUNK, I, IASCL, IBSCL, IE, IL,
|
||||||
|
$ ITAU, ITAUP, ITAUQ, IWORK, LDWORK, MAXMN,
|
||||||
|
$ MAXWRK, MINMN, MINWRK, MM, MNTHR
|
||||||
|
INTEGER LWORK_DGEQRF, LWORK_DORMQR, LWORK_DGEBRD,
|
||||||
|
$ LWORK_DORMBR, LWORK_DORGBR, LWORK_DORMLQ,
|
||||||
|
$ LWORK_DGELQF
|
||||||
|
DOUBLE PRECISION ANRM, BIGNUM, BNRM, EPS, SFMIN, SMLNUM, THR
|
||||||
|
* ..
|
||||||
|
* .. Local Arrays ..
|
||||||
|
DOUBLE PRECISION DUM( 1 )
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DBDSQR, DCOPY, DGEBRD, DGELQF, DGEMM, DGEMV,
|
||||||
|
$ DGEQRF, DLABAD, DLACPY, DLASCL, DLASET, DORGBR,
|
||||||
|
$ DORMBR, DORMLQ, DORMQR, DRSCL, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
INTEGER ILAENV
|
||||||
|
DOUBLE PRECISION DLAMCH, DLANGE
|
||||||
|
EXTERNAL ILAENV, DLAMCH, DLANGE
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX, MIN
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input arguments
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
MINMN = MIN( M, N )
|
||||||
|
MAXMN = MAX( M, N )
|
||||||
|
LQUERY = ( LWORK.EQ.-1 )
|
||||||
|
IF( M.LT.0 ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( N.LT.0 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( NRHS.LT.0 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
|
||||||
|
INFO = -5
|
||||||
|
ELSE IF( LDB.LT.MAX( 1, MAXMN ) ) THEN
|
||||||
|
INFO = -7
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Compute workspace
|
||||||
|
* (Note: Comments in the code beginning "Workspace:" describe the
|
||||||
|
* minimal amount of workspace needed at that point in the code,
|
||||||
|
* as well as the preferred amount for good performance.
|
||||||
|
* NB refers to the optimal block size for the immediately
|
||||||
|
* following subroutine, as returned by ILAENV.)
|
||||||
|
*
|
||||||
|
IF( INFO.EQ.0 ) THEN
|
||||||
|
MINWRK = 1
|
||||||
|
MAXWRK = 1
|
||||||
|
IF( MINMN.GT.0 ) THEN
|
||||||
|
MM = M
|
||||||
|
MNTHR = ILAENV( 6, 'DGELSS', ' ', M, N, NRHS, -1 )
|
||||||
|
IF( M.GE.N .AND. M.GE.MNTHR ) THEN
|
||||||
|
*
|
||||||
|
* Path 1a - overdetermined, with many more rows than
|
||||||
|
* columns
|
||||||
|
*
|
||||||
|
* Compute space needed for DGEQRF
|
||||||
|
CALL DGEQRF( M, N, A, LDA, DUM(1), DUM(1), -1, INFO )
|
||||||
|
LWORK_DGEQRF=DUM(1)
|
||||||
|
* Compute space needed for DORMQR
|
||||||
|
CALL DORMQR( 'L', 'T', M, NRHS, N, A, LDA, DUM(1), B,
|
||||||
|
$ LDB, DUM(1), -1, INFO )
|
||||||
|
LWORK_DORMQR=DUM(1)
|
||||||
|
MM = N
|
||||||
|
MAXWRK = MAX( MAXWRK, N + LWORK_DGEQRF )
|
||||||
|
MAXWRK = MAX( MAXWRK, N + LWORK_DORMQR )
|
||||||
|
END IF
|
||||||
|
IF( M.GE.N ) THEN
|
||||||
|
*
|
||||||
|
* Path 1 - overdetermined or exactly determined
|
||||||
|
*
|
||||||
|
* Compute workspace needed for DBDSQR
|
||||||
|
*
|
||||||
|
BDSPAC = MAX( 1, 5*N )
|
||||||
|
* Compute space needed for DGEBRD
|
||||||
|
CALL DGEBRD( MM, N, A, LDA, S, DUM(1), DUM(1),
|
||||||
|
$ DUM(1), DUM(1), -1, INFO )
|
||||||
|
LWORK_DGEBRD=DUM(1)
|
||||||
|
* Compute space needed for DORMBR
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', MM, NRHS, N, A, LDA, DUM(1),
|
||||||
|
$ B, LDB, DUM(1), -1, INFO )
|
||||||
|
LWORK_DORMBR=DUM(1)
|
||||||
|
* Compute space needed for DORGBR
|
||||||
|
CALL DORGBR( 'P', N, N, N, A, LDA, DUM(1),
|
||||||
|
$ DUM(1), -1, INFO )
|
||||||
|
LWORK_DORGBR=DUM(1)
|
||||||
|
* Compute total workspace needed
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*N + LWORK_DGEBRD )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*N + LWORK_DORMBR )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*N + LWORK_DORGBR )
|
||||||
|
MAXWRK = MAX( MAXWRK, BDSPAC )
|
||||||
|
MAXWRK = MAX( MAXWRK, N*NRHS )
|
||||||
|
MINWRK = MAX( 3*N + MM, 3*N + NRHS, BDSPAC )
|
||||||
|
MAXWRK = MAX( MINWRK, MAXWRK )
|
||||||
|
END IF
|
||||||
|
IF( N.GT.M ) THEN
|
||||||
|
*
|
||||||
|
* Compute workspace needed for DBDSQR
|
||||||
|
*
|
||||||
|
BDSPAC = MAX( 1, 5*M )
|
||||||
|
MINWRK = MAX( 3*M+NRHS, 3*M+N, BDSPAC )
|
||||||
|
IF( N.GE.MNTHR ) THEN
|
||||||
|
*
|
||||||
|
* Path 2a - underdetermined, with many more columns
|
||||||
|
* than rows
|
||||||
|
*
|
||||||
|
* Compute space needed for DGELQF
|
||||||
|
CALL DGELQF( M, N, A, LDA, DUM(1), DUM(1),
|
||||||
|
$ -1, INFO )
|
||||||
|
LWORK_DGELQF=DUM(1)
|
||||||
|
* Compute space needed for DGEBRD
|
||||||
|
CALL DGEBRD( M, M, A, LDA, S, DUM(1), DUM(1),
|
||||||
|
$ DUM(1), DUM(1), -1, INFO )
|
||||||
|
LWORK_DGEBRD=DUM(1)
|
||||||
|
* Compute space needed for DORMBR
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, N, A, LDA,
|
||||||
|
$ DUM(1), B, LDB, DUM(1), -1, INFO )
|
||||||
|
LWORK_DORMBR=DUM(1)
|
||||||
|
* Compute space needed for DORGBR
|
||||||
|
CALL DORGBR( 'P', M, M, M, A, LDA, DUM(1),
|
||||||
|
$ DUM(1), -1, INFO )
|
||||||
|
LWORK_DORGBR=DUM(1)
|
||||||
|
* Compute space needed for DORMLQ
|
||||||
|
CALL DORMLQ( 'L', 'T', N, NRHS, M, A, LDA, DUM(1),
|
||||||
|
$ B, LDB, DUM(1), -1, INFO )
|
||||||
|
LWORK_DORMLQ=DUM(1)
|
||||||
|
* Compute total workspace needed
|
||||||
|
MAXWRK = M + LWORK_DGELQF
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M + 4*M + LWORK_DGEBRD )
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M + 4*M + LWORK_DORMBR )
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M + 4*M + LWORK_DORGBR )
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M + M + BDSPAC )
|
||||||
|
IF( NRHS.GT.1 ) THEN
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M + M + M*NRHS )
|
||||||
|
ELSE
|
||||||
|
MAXWRK = MAX( MAXWRK, M*M + 2*M )
|
||||||
|
END IF
|
||||||
|
MAXWRK = MAX( MAXWRK, M + LWORK_DORMLQ )
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Path 2 - underdetermined
|
||||||
|
*
|
||||||
|
* Compute space needed for DGEBRD
|
||||||
|
CALL DGEBRD( M, N, A, LDA, S, DUM(1), DUM(1),
|
||||||
|
$ DUM(1), DUM(1), -1, INFO )
|
||||||
|
LWORK_DGEBRD=DUM(1)
|
||||||
|
* Compute space needed for DORMBR
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, M, A, LDA,
|
||||||
|
$ DUM(1), B, LDB, DUM(1), -1, INFO )
|
||||||
|
LWORK_DORMBR=DUM(1)
|
||||||
|
* Compute space needed for DORGBR
|
||||||
|
CALL DORGBR( 'P', M, N, M, A, LDA, DUM(1),
|
||||||
|
$ DUM(1), -1, INFO )
|
||||||
|
LWORK_DORGBR=DUM(1)
|
||||||
|
MAXWRK = 3*M + LWORK_DGEBRD
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORMBR )
|
||||||
|
MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORGBR )
|
||||||
|
MAXWRK = MAX( MAXWRK, BDSPAC )
|
||||||
|
MAXWRK = MAX( MAXWRK, N*NRHS )
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
MAXWRK = MAX( MINWRK, MAXWRK )
|
||||||
|
END IF
|
||||||
|
WORK( 1 ) = MAXWRK
|
||||||
|
*
|
||||||
|
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY )
|
||||||
|
$ INFO = -12
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DGELSS', -INFO )
|
||||||
|
RETURN
|
||||||
|
ELSE IF( LQUERY ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible
|
||||||
|
*
|
||||||
|
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
|
||||||
|
RANK = 0
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Get machine parameters
|
||||||
|
*
|
||||||
|
EPS = DLAMCH( 'P' )
|
||||||
|
SFMIN = DLAMCH( 'S' )
|
||||||
|
SMLNUM = SFMIN / EPS
|
||||||
|
BIGNUM = ONE / SMLNUM
|
||||||
|
CALL DLABAD( SMLNUM, BIGNUM )
|
||||||
|
*
|
||||||
|
* Scale A if max element outside range [SMLNUM,BIGNUM]
|
||||||
|
*
|
||||||
|
ANRM = DLANGE( 'M', M, N, A, LDA, WORK )
|
||||||
|
IASCL = 0
|
||||||
|
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm up to SMLNUM
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, SMLNUM, M, N, A, LDA, INFO )
|
||||||
|
IASCL = 1
|
||||||
|
ELSE IF( ANRM.GT.BIGNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm down to BIGNUM
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, BIGNUM, M, N, A, LDA, INFO )
|
||||||
|
IASCL = 2
|
||||||
|
ELSE IF( ANRM.EQ.ZERO ) THEN
|
||||||
|
*
|
||||||
|
* Matrix all zero. Return zero solution.
|
||||||
|
*
|
||||||
|
CALL DLASET( 'F', MAX( M, N ), NRHS, ZERO, ZERO, B, LDB )
|
||||||
|
CALL DLASET( 'F', MINMN, 1, ZERO, ZERO, S, MINMN )
|
||||||
|
RANK = 0
|
||||||
|
GO TO 70
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Scale B if max element outside range [SMLNUM,BIGNUM]
|
||||||
|
*
|
||||||
|
BNRM = DLANGE( 'M', M, NRHS, B, LDB, WORK )
|
||||||
|
IBSCL = 0
|
||||||
|
IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm up to SMLNUM
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, BNRM, SMLNUM, M, NRHS, B, LDB, INFO )
|
||||||
|
IBSCL = 1
|
||||||
|
ELSE IF( BNRM.GT.BIGNUM ) THEN
|
||||||
|
*
|
||||||
|
* Scale matrix norm down to BIGNUM
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, BNRM, BIGNUM, M, NRHS, B, LDB, INFO )
|
||||||
|
IBSCL = 2
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Overdetermined case
|
||||||
|
*
|
||||||
|
IF( M.GE.N ) THEN
|
||||||
|
*
|
||||||
|
* Path 1 - overdetermined or exactly determined
|
||||||
|
*
|
||||||
|
MM = M
|
||||||
|
IF( M.GE.MNTHR ) THEN
|
||||||
|
*
|
||||||
|
* Path 1a - overdetermined, with many more rows than columns
|
||||||
|
*
|
||||||
|
MM = N
|
||||||
|
ITAU = 1
|
||||||
|
IWORK = ITAU + N
|
||||||
|
*
|
||||||
|
* Compute A=Q*R
|
||||||
|
* (Workspace: need 2*N, prefer N+N*NB)
|
||||||
|
*
|
||||||
|
CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), WORK( IWORK ),
|
||||||
|
$ LWORK-IWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose(Q)
|
||||||
|
* (Workspace: need N+NRHS, prefer N+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMQR( 'L', 'T', M, NRHS, N, A, LDA, WORK( ITAU ), B,
|
||||||
|
$ LDB, WORK( IWORK ), LWORK-IWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Zero out below R
|
||||||
|
*
|
||||||
|
IF( N.GT.1 )
|
||||||
|
$ CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, A( 2, 1 ), LDA )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
IE = 1
|
||||||
|
ITAUQ = IE + N
|
||||||
|
ITAUP = ITAUQ + N
|
||||||
|
IWORK = ITAUP + N
|
||||||
|
*
|
||||||
|
* Bidiagonalize R in A
|
||||||
|
* (Workspace: need 3*N+MM, prefer 3*N+(MM+N)*NB)
|
||||||
|
*
|
||||||
|
CALL DGEBRD( MM, N, A, LDA, S, WORK( IE ), WORK( ITAUQ ),
|
||||||
|
$ WORK( ITAUP ), WORK( IWORK ), LWORK-IWORK+1,
|
||||||
|
$ INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose of left bidiagonalizing vectors of R
|
||||||
|
* (Workspace: need 3*N+NRHS, prefer 3*N+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', MM, NRHS, N, A, LDA, WORK( ITAUQ ),
|
||||||
|
$ B, LDB, WORK( IWORK ), LWORK-IWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Generate right bidiagonalizing vectors of R in A
|
||||||
|
* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB)
|
||||||
|
*
|
||||||
|
CALL DORGBR( 'P', N, N, N, A, LDA, WORK( ITAUP ),
|
||||||
|
$ WORK( IWORK ), LWORK-IWORK+1, INFO )
|
||||||
|
IWORK = IE + N
|
||||||
|
*
|
||||||
|
* Perform bidiagonal QR iteration
|
||||||
|
* multiply B by transpose of left singular vectors
|
||||||
|
* compute right singular vectors in A
|
||||||
|
* (Workspace: need BDSPAC)
|
||||||
|
*
|
||||||
|
CALL DBDSQR( 'U', N, N, 0, NRHS, S, WORK( IE ), A, LDA, DUM,
|
||||||
|
$ 1, B, LDB, WORK( IWORK ), INFO )
|
||||||
|
IF( INFO.NE.0 )
|
||||||
|
$ GO TO 70
|
||||||
|
*
|
||||||
|
* Multiply B by reciprocals of singular values
|
||||||
|
*
|
||||||
|
THR = MAX( RCOND*S( 1 ), SFMIN )
|
||||||
|
IF( RCOND.LT.ZERO )
|
||||||
|
$ THR = MAX( EPS*S( 1 ), SFMIN )
|
||||||
|
RANK = 0
|
||||||
|
DO 10 I = 1, N
|
||||||
|
IF( S( I ).GT.THR ) THEN
|
||||||
|
CALL DRSCL( NRHS, S( I ), B( I, 1 ), LDB )
|
||||||
|
RANK = RANK + 1
|
||||||
|
ELSE
|
||||||
|
CALL DLASET( 'F', 1, NRHS, ZERO, ZERO, B( I, 1 ), LDB )
|
||||||
|
END IF
|
||||||
|
10 CONTINUE
|
||||||
|
*
|
||||||
|
* Multiply B by right singular vectors
|
||||||
|
* (Workspace: need N, prefer N*NRHS)
|
||||||
|
*
|
||||||
|
IF( LWORK.GE.LDB*NRHS .AND. NRHS.GT.1 ) THEN
|
||||||
|
CALL DGEMM( 'T', 'N', N, NRHS, N, ONE, A, LDA, B, LDB, ZERO,
|
||||||
|
$ WORK, LDB )
|
||||||
|
CALL DLACPY( 'G', N, NRHS, WORK, LDB, B, LDB )
|
||||||
|
ELSE IF( NRHS.GT.1 ) THEN
|
||||||
|
CHUNK = LWORK / N
|
||||||
|
DO 20 I = 1, NRHS, CHUNK
|
||||||
|
BL = MIN( NRHS-I+1, CHUNK )
|
||||||
|
CALL DGEMM( 'T', 'N', N, BL, N, ONE, A, LDA, B( 1, I ),
|
||||||
|
$ LDB, ZERO, WORK, N )
|
||||||
|
CALL DLACPY( 'G', N, BL, WORK, N, B( 1, I ), LDB )
|
||||||
|
20 CONTINUE
|
||||||
|
ELSE
|
||||||
|
CALL DGEMV( 'T', N, N, ONE, A, LDA, B, 1, ZERO, WORK, 1 )
|
||||||
|
CALL DCOPY( N, WORK, 1, B, 1 )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
ELSE IF( N.GE.MNTHR .AND. LWORK.GE.4*M+M*M+
|
||||||
|
$ MAX( M, 2*M-4, NRHS, N-3*M ) ) THEN
|
||||||
|
*
|
||||||
|
* Path 2a - underdetermined, with many more columns than rows
|
||||||
|
* and sufficient workspace for an efficient algorithm
|
||||||
|
*
|
||||||
|
LDWORK = M
|
||||||
|
IF( LWORK.GE.MAX( 4*M+M*LDA+MAX( M, 2*M-4, NRHS, N-3*M ),
|
||||||
|
$ M*LDA+M+M*NRHS ) )LDWORK = LDA
|
||||||
|
ITAU = 1
|
||||||
|
IWORK = M + 1
|
||||||
|
*
|
||||||
|
* Compute A=L*Q
|
||||||
|
* (Workspace: need 2*M, prefer M+M*NB)
|
||||||
|
*
|
||||||
|
CALL DGELQF( M, N, A, LDA, WORK( ITAU ), WORK( IWORK ),
|
||||||
|
$ LWORK-IWORK+1, INFO )
|
||||||
|
IL = IWORK
|
||||||
|
*
|
||||||
|
* Copy L to WORK(IL), zeroing out above it
|
||||||
|
*
|
||||||
|
CALL DLACPY( 'L', M, M, A, LDA, WORK( IL ), LDWORK )
|
||||||
|
CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, WORK( IL+LDWORK ),
|
||||||
|
$ LDWORK )
|
||||||
|
IE = IL + LDWORK*M
|
||||||
|
ITAUQ = IE + M
|
||||||
|
ITAUP = ITAUQ + M
|
||||||
|
IWORK = ITAUP + M
|
||||||
|
*
|
||||||
|
* Bidiagonalize L in WORK(IL)
|
||||||
|
* (Workspace: need M*M+5*M, prefer M*M+4*M+2*M*NB)
|
||||||
|
*
|
||||||
|
CALL DGEBRD( M, M, WORK( IL ), LDWORK, S, WORK( IE ),
|
||||||
|
$ WORK( ITAUQ ), WORK( ITAUP ), WORK( IWORK ),
|
||||||
|
$ LWORK-IWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose of left bidiagonalizing vectors of L
|
||||||
|
* (Workspace: need M*M+4*M+NRHS, prefer M*M+4*M+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, M, WORK( IL ), LDWORK,
|
||||||
|
$ WORK( ITAUQ ), B, LDB, WORK( IWORK ),
|
||||||
|
$ LWORK-IWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Generate right bidiagonalizing vectors of R in WORK(IL)
|
||||||
|
* (Workspace: need M*M+5*M-1, prefer M*M+4*M+(M-1)*NB)
|
||||||
|
*
|
||||||
|
CALL DORGBR( 'P', M, M, M, WORK( IL ), LDWORK, WORK( ITAUP ),
|
||||||
|
$ WORK( IWORK ), LWORK-IWORK+1, INFO )
|
||||||
|
IWORK = IE + M
|
||||||
|
*
|
||||||
|
* Perform bidiagonal QR iteration,
|
||||||
|
* computing right singular vectors of L in WORK(IL) and
|
||||||
|
* multiplying B by transpose of left singular vectors
|
||||||
|
* (Workspace: need M*M+M+BDSPAC)
|
||||||
|
*
|
||||||
|
CALL DBDSQR( 'U', M, M, 0, NRHS, S, WORK( IE ), WORK( IL ),
|
||||||
|
$ LDWORK, A, LDA, B, LDB, WORK( IWORK ), INFO )
|
||||||
|
IF( INFO.NE.0 )
|
||||||
|
$ GO TO 70
|
||||||
|
*
|
||||||
|
* Multiply B by reciprocals of singular values
|
||||||
|
*
|
||||||
|
THR = MAX( RCOND*S( 1 ), SFMIN )
|
||||||
|
IF( RCOND.LT.ZERO )
|
||||||
|
$ THR = MAX( EPS*S( 1 ), SFMIN )
|
||||||
|
RANK = 0
|
||||||
|
DO 30 I = 1, M
|
||||||
|
IF( S( I ).GT.THR ) THEN
|
||||||
|
CALL DRSCL( NRHS, S( I ), B( I, 1 ), LDB )
|
||||||
|
RANK = RANK + 1
|
||||||
|
ELSE
|
||||||
|
CALL DLASET( 'F', 1, NRHS, ZERO, ZERO, B( I, 1 ), LDB )
|
||||||
|
END IF
|
||||||
|
30 CONTINUE
|
||||||
|
IWORK = IE
|
||||||
|
*
|
||||||
|
* Multiply B by right singular vectors of L in WORK(IL)
|
||||||
|
* (Workspace: need M*M+2*M, prefer M*M+M+M*NRHS)
|
||||||
|
*
|
||||||
|
IF( LWORK.GE.LDB*NRHS+IWORK-1 .AND. NRHS.GT.1 ) THEN
|
||||||
|
CALL DGEMM( 'T', 'N', M, NRHS, M, ONE, WORK( IL ), LDWORK,
|
||||||
|
$ B, LDB, ZERO, WORK( IWORK ), LDB )
|
||||||
|
CALL DLACPY( 'G', M, NRHS, WORK( IWORK ), LDB, B, LDB )
|
||||||
|
ELSE IF( NRHS.GT.1 ) THEN
|
||||||
|
CHUNK = ( LWORK-IWORK+1 ) / M
|
||||||
|
DO 40 I = 1, NRHS, CHUNK
|
||||||
|
BL = MIN( NRHS-I+1, CHUNK )
|
||||||
|
CALL DGEMM( 'T', 'N', M, BL, M, ONE, WORK( IL ), LDWORK,
|
||||||
|
$ B( 1, I ), LDB, ZERO, WORK( IWORK ), M )
|
||||||
|
CALL DLACPY( 'G', M, BL, WORK( IWORK ), M, B( 1, I ),
|
||||||
|
$ LDB )
|
||||||
|
40 CONTINUE
|
||||||
|
ELSE
|
||||||
|
CALL DGEMV( 'T', M, M, ONE, WORK( IL ), LDWORK, B( 1, 1 ),
|
||||||
|
$ 1, ZERO, WORK( IWORK ), 1 )
|
||||||
|
CALL DCOPY( M, WORK( IWORK ), 1, B( 1, 1 ), 1 )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Zero out below first M rows of B
|
||||||
|
*
|
||||||
|
CALL DLASET( 'F', N-M, NRHS, ZERO, ZERO, B( M+1, 1 ), LDB )
|
||||||
|
IWORK = ITAU + M
|
||||||
|
*
|
||||||
|
* Multiply transpose(Q) by B
|
||||||
|
* (Workspace: need M+NRHS, prefer M+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMLQ( 'L', 'T', N, NRHS, M, A, LDA, WORK( ITAU ), B,
|
||||||
|
$ LDB, WORK( IWORK ), LWORK-IWORK+1, INFO )
|
||||||
|
*
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Path 2 - remaining underdetermined cases
|
||||||
|
*
|
||||||
|
IE = 1
|
||||||
|
ITAUQ = IE + M
|
||||||
|
ITAUP = ITAUQ + M
|
||||||
|
IWORK = ITAUP + M
|
||||||
|
*
|
||||||
|
* Bidiagonalize A
|
||||||
|
* (Workspace: need 3*M+N, prefer 3*M+(M+N)*NB)
|
||||||
|
*
|
||||||
|
CALL DGEBRD( M, N, A, LDA, S, WORK( IE ), WORK( ITAUQ ),
|
||||||
|
$ WORK( ITAUP ), WORK( IWORK ), LWORK-IWORK+1,
|
||||||
|
$ INFO )
|
||||||
|
*
|
||||||
|
* Multiply B by transpose of left bidiagonalizing vectors
|
||||||
|
* (Workspace: need 3*M+NRHS, prefer 3*M+NRHS*NB)
|
||||||
|
*
|
||||||
|
CALL DORMBR( 'Q', 'L', 'T', M, NRHS, N, A, LDA, WORK( ITAUQ ),
|
||||||
|
$ B, LDB, WORK( IWORK ), LWORK-IWORK+1, INFO )
|
||||||
|
*
|
||||||
|
* Generate right bidiagonalizing vectors in A
|
||||||
|
* (Workspace: need 4*M, prefer 3*M+M*NB)
|
||||||
|
*
|
||||||
|
CALL DORGBR( 'P', M, N, M, A, LDA, WORK( ITAUP ),
|
||||||
|
$ WORK( IWORK ), LWORK-IWORK+1, INFO )
|
||||||
|
IWORK = IE + M
|
||||||
|
*
|
||||||
|
* Perform bidiagonal QR iteration,
|
||||||
|
* computing right singular vectors of A in A and
|
||||||
|
* multiplying B by transpose of left singular vectors
|
||||||
|
* (Workspace: need BDSPAC)
|
||||||
|
*
|
||||||
|
CALL DBDSQR( 'L', M, N, 0, NRHS, S, WORK( IE ), A, LDA, DUM,
|
||||||
|
$ 1, B, LDB, WORK( IWORK ), INFO )
|
||||||
|
IF( INFO.NE.0 )
|
||||||
|
$ GO TO 70
|
||||||
|
*
|
||||||
|
* Multiply B by reciprocals of singular values
|
||||||
|
*
|
||||||
|
THR = MAX( RCOND*S( 1 ), SFMIN )
|
||||||
|
IF( RCOND.LT.ZERO )
|
||||||
|
$ THR = MAX( EPS*S( 1 ), SFMIN )
|
||||||
|
RANK = 0
|
||||||
|
DO 50 I = 1, M
|
||||||
|
IF( S( I ).GT.THR ) THEN
|
||||||
|
CALL DRSCL( NRHS, S( I ), B( I, 1 ), LDB )
|
||||||
|
RANK = RANK + 1
|
||||||
|
ELSE
|
||||||
|
CALL DLASET( 'F', 1, NRHS, ZERO, ZERO, B( I, 1 ), LDB )
|
||||||
|
END IF
|
||||||
|
50 CONTINUE
|
||||||
|
*
|
||||||
|
* Multiply B by right singular vectors of A
|
||||||
|
* (Workspace: need N, prefer N*NRHS)
|
||||||
|
*
|
||||||
|
IF( LWORK.GE.LDB*NRHS .AND. NRHS.GT.1 ) THEN
|
||||||
|
CALL DGEMM( 'T', 'N', N, NRHS, M, ONE, A, LDA, B, LDB, ZERO,
|
||||||
|
$ WORK, LDB )
|
||||||
|
CALL DLACPY( 'F', N, NRHS, WORK, LDB, B, LDB )
|
||||||
|
ELSE IF( NRHS.GT.1 ) THEN
|
||||||
|
CHUNK = LWORK / N
|
||||||
|
DO 60 I = 1, NRHS, CHUNK
|
||||||
|
BL = MIN( NRHS-I+1, CHUNK )
|
||||||
|
CALL DGEMM( 'T', 'N', N, BL, M, ONE, A, LDA, B( 1, I ),
|
||||||
|
$ LDB, ZERO, WORK, N )
|
||||||
|
CALL DLACPY( 'F', N, BL, WORK, N, B( 1, I ), LDB )
|
||||||
|
60 CONTINUE
|
||||||
|
ELSE
|
||||||
|
CALL DGEMV( 'T', M, N, ONE, A, LDA, B, 1, ZERO, WORK, 1 )
|
||||||
|
CALL DCOPY( N, WORK, 1, B, 1 )
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Undo scaling
|
||||||
|
*
|
||||||
|
IF( IASCL.EQ.1 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, SMLNUM, N, NRHS, B, LDB, INFO )
|
||||||
|
CALL DLASCL( 'G', 0, 0, SMLNUM, ANRM, MINMN, 1, S, MINMN,
|
||||||
|
$ INFO )
|
||||||
|
ELSE IF( IASCL.EQ.2 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, ANRM, BIGNUM, N, NRHS, B, LDB, INFO )
|
||||||
|
CALL DLASCL( 'G', 0, 0, BIGNUM, ANRM, MINMN, 1, S, MINMN,
|
||||||
|
$ INFO )
|
||||||
|
END IF
|
||||||
|
IF( IBSCL.EQ.1 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, SMLNUM, BNRM, N, NRHS, B, LDB, INFO )
|
||||||
|
ELSE IF( IBSCL.EQ.2 ) THEN
|
||||||
|
CALL DLASCL( 'G', 0, 0, BIGNUM, BNRM, N, NRHS, B, LDB, INFO )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
70 CONTINUE
|
||||||
|
WORK( 1 ) = MAXWRK
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DGELSS
|
||||||
|
*
|
||||||
|
END
|
|
@ -2,14 +2,14 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
* SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION ALPHA,BETA
|
* DOUBLE PRECISION ALPHA,BETA
|
||||||
* INTEGER K,LDA,LDB,LDC,M,N
|
* INTEGER K,LDA,LDB,LDC,M,N
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*)
|
* DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] A
|
*> \param[in] A
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> A is DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is
|
*> A is DOUBLE PRECISION array, dimension ( LDA, ka ), where ka is
|
||||||
*> k when TRANSA = 'N' or 'n', and is m otherwise.
|
*> k when TRANSA = 'N' or 'n', and is m otherwise.
|
||||||
*> Before entry with TRANSA = 'N' or 'n', the leading m by k
|
*> Before entry with TRANSA = 'N' or 'n', the leading m by k
|
||||||
*> part of the array A must contain the matrix A, otherwise
|
*> part of the array A must contain the matrix A, otherwise
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] B
|
*> \param[in] B
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> B is DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is
|
*> B is DOUBLE PRECISION array, dimension ( LDB, kb ), where kb is
|
||||||
*> n when TRANSB = 'N' or 'n', and is k otherwise.
|
*> n when TRANSB = 'N' or 'n', and is k otherwise.
|
||||||
*> Before entry with TRANSB = 'N' or 'n', the leading k by n
|
*> Before entry with TRANSB = 'N' or 'n', the leading k by n
|
||||||
*> part of the array B must contain the matrix B, otherwise
|
*> part of the array B must contain the matrix B, otherwise
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] C
|
*> \param[in,out] C
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> C is DOUBLE PRECISION array of DIMENSION ( LDC, n ).
|
*> C is DOUBLE PRECISION array, dimension ( LDC, N )
|
||||||
*> Before entry, the leading m by n part of the array C must
|
*> Before entry, the leading m by n part of the array C must
|
||||||
*> contain the matrix C, except when beta is zero, in which
|
*> contain the matrix C, except when beta is zero, in which
|
||||||
*> case C need not be set on entry.
|
*> case C need not be set on entry.
|
||||||
|
@ -161,12 +161,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level3
|
*> \ingroup double_blas_level3
|
||||||
*
|
*
|
||||||
|
@ -187,10 +187,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level3 routine (version 3.4.0) --
|
* -- Reference BLAS level3 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION ALPHA,BETA
|
DOUBLE PRECISION ALPHA,BETA
|
||||||
|
@ -311,12 +311,10 @@
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
DO 80 L = 1,K
|
DO 80 L = 1,K
|
||||||
IF (B(L,J).NE.ZERO) THEN
|
TEMP = ALPHA*B(L,J)
|
||||||
TEMP = ALPHA*B(L,J)
|
DO 70 I = 1,M
|
||||||
DO 70 I = 1,M
|
C(I,J) = C(I,J) + TEMP*A(I,L)
|
||||||
C(I,J) = C(I,J) + TEMP*A(I,L)
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
90 CONTINUE
|
90 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -353,12 +351,10 @@
|
||||||
140 CONTINUE
|
140 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
DO 160 L = 1,K
|
DO 160 L = 1,K
|
||||||
IF (B(J,L).NE.ZERO) THEN
|
TEMP = ALPHA*B(J,L)
|
||||||
TEMP = ALPHA*B(J,L)
|
DO 150 I = 1,M
|
||||||
DO 150 I = 1,M
|
C(I,J) = C(I,J) + TEMP*A(I,L)
|
||||||
C(I,J) = C(I,J) + TEMP*A(I,L)
|
150 CONTINUE
|
||||||
150 CONTINUE
|
|
||||||
END IF
|
|
||||||
160 CONTINUE
|
160 CONTINUE
|
||||||
170 CONTINUE
|
170 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
* SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION ALPHA,BETA
|
* DOUBLE PRECISION ALPHA,BETA
|
||||||
* INTEGER INCX,INCY,LDA,M,N
|
* INTEGER INCX,INCY,LDA,M,N
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
* DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] A
|
*> \param[in] A
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> A is DOUBLE PRECISION array of DIMENSION ( LDA, n ).
|
*> A is DOUBLE PRECISION array, dimension ( LDA, N )
|
||||||
*> Before entry, the leading m by n part of the array A must
|
*> Before entry, the leading m by n part of the array A must
|
||||||
*> contain the matrix of coefficients.
|
*> contain the matrix of coefficients.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] X
|
*> \param[in] X
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> X is DOUBLE PRECISION array of DIMENSION at least
|
*> X is DOUBLE PRECISION array, dimension at least
|
||||||
*> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
|
*> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
|
||||||
*> and at least
|
*> and at least
|
||||||
*> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
|
*> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] Y
|
*> \param[in,out] Y
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> Y is DOUBLE PRECISION array of DIMENSION at least
|
*> Y is DOUBLE PRECISION array, dimension at least
|
||||||
*> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
|
*> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
|
||||||
*> and at least
|
*> and at least
|
||||||
*> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
|
*> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
|
||||||
|
@ -129,12 +129,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level2
|
*> \ingroup double_blas_level2
|
||||||
*
|
*
|
||||||
|
@ -156,10 +156,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine (version 3.4.0) --
|
* -- Reference BLAS level2 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION ALPHA,BETA
|
DOUBLE PRECISION ALPHA,BETA
|
||||||
|
@ -278,24 +278,20 @@
|
||||||
JX = KX
|
JX = KX
|
||||||
IF (INCY.EQ.1) THEN
|
IF (INCY.EQ.1) THEN
|
||||||
DO 60 J = 1,N
|
DO 60 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = ALPHA*X(JX)
|
||||||
TEMP = ALPHA*X(JX)
|
DO 50 I = 1,M
|
||||||
DO 50 I = 1,M
|
Y(I) = Y(I) + TEMP*A(I,J)
|
||||||
Y(I) = Y(I) + TEMP*A(I,J)
|
50 CONTINUE
|
||||||
50 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 80 J = 1,N
|
DO 80 J = 1,N
|
||||||
IF (X(JX).NE.ZERO) THEN
|
TEMP = ALPHA*X(JX)
|
||||||
TEMP = ALPHA*X(JX)
|
IY = KY
|
||||||
IY = KY
|
DO 70 I = 1,M
|
||||||
DO 70 I = 1,M
|
Y(IY) = Y(IY) + TEMP*A(I,J)
|
||||||
Y(IY) = Y(IY) + TEMP*A(I,J)
|
IY = IY + INCY
|
||||||
IY = IY + INCY
|
70 CONTINUE
|
||||||
70 CONTINUE
|
|
||||||
END IF
|
|
||||||
JX = JX + INCX
|
JX = JX + INCX
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGEQR2 + dependencies
|
*> Download DGEQR2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeqr2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeqr2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeqr2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeqr2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqr2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqr2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGEQR2( M, N, A, LDA, TAU, WORK, INFO )
|
* SUBROUTINE DGEQR2( M, N, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, M, N
|
* INTEGER INFO, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -91,12 +91,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
|
@ -121,10 +121,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGEQR2( M, N, A, LDA, TAU, WORK, INFO )
|
SUBROUTINE DGEQR2( M, N, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, M, N
|
INTEGER INFO, LDA, M, N
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGEQRF + dependencies
|
*> Download DGEQRF + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeqrf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeqrf.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeqrf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeqrf.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrf.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
* SUBROUTINE DGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, LWORK, M, N
|
* INTEGER INFO, LDA, LWORK, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -106,12 +106,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
|
@ -136,10 +136,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
SUBROUTINE DGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, LWORK, M, N
|
INTEGER INFO, LDA, LWORK, M, N
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
* SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION ALPHA
|
* DOUBLE PRECISION ALPHA
|
||||||
* INTEGER INCX,INCY,LDA,M,N
|
* INTEGER INCX,INCY,LDA,M,N
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
* DOUBLE PRECISION A(LDA,*),X(*),Y(*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] X
|
*> \param[in] X
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> X is DOUBLE PRECISION array of dimension at least
|
*> X is DOUBLE PRECISION array, dimension at least
|
||||||
*> ( 1 + ( m - 1 )*abs( INCX ) ).
|
*> ( 1 + ( m - 1 )*abs( INCX ) ).
|
||||||
*> Before entry, the incremented array X must contain the m
|
*> Before entry, the incremented array X must contain the m
|
||||||
*> element vector x.
|
*> element vector x.
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] Y
|
*> \param[in] Y
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> Y is DOUBLE PRECISION array of dimension at least
|
*> Y is DOUBLE PRECISION array, dimension at least
|
||||||
*> ( 1 + ( n - 1 )*abs( INCY ) ).
|
*> ( 1 + ( n - 1 )*abs( INCY ) ).
|
||||||
*> Before entry, the incremented array Y must contain the n
|
*> Before entry, the incremented array Y must contain the n
|
||||||
*> element vector y.
|
*> element vector y.
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] A
|
*> \param[in,out] A
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> A is DOUBLE PRECISION array of DIMENSION ( LDA, n ).
|
*> A is DOUBLE PRECISION array, dimension ( LDA, N )
|
||||||
*> Before entry, the leading m by n part of the array A must
|
*> Before entry, the leading m by n part of the array A must
|
||||||
*> contain the matrix of coefficients. On exit, A is
|
*> contain the matrix of coefficients. On exit, A is
|
||||||
*> overwritten by the updated matrix.
|
*> overwritten by the updated matrix.
|
||||||
|
@ -104,12 +104,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level2
|
*> \ingroup double_blas_level2
|
||||||
*
|
*
|
||||||
|
@ -130,10 +130,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level2 routine (version 3.4.0) --
|
* -- Reference BLAS level2 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION ALPHA
|
DOUBLE PRECISION ALPHA
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGESV + dependencies
|
*> Download DGESV + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgesv.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgesv.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgesv.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgesv.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
* SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, LDB, N, NRHS
|
* INTEGER INFO, LDA, LDB, N, NRHS
|
||||||
* ..
|
* ..
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* INTEGER IPIV( * )
|
* INTEGER IPIV( * )
|
||||||
* DOUBLE PRECISION A( LDA, * ), B( LDB, * )
|
* DOUBLE PRECISION A( LDA, * ), B( LDB, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -110,22 +110,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEsolve
|
*> \ingroup doubleGEsolve
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK driver routine (version 3.4.0) --
|
* -- LAPACK driver routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, LDB, N, NRHS
|
INTEGER INFO, LDA, LDB, N, NRHS
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGETF2 + dependencies
|
*> Download DGETF2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetf2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetf2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetf2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetf2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetf2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetf2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGETF2( M, N, A, LDA, IPIV, INFO )
|
* SUBROUTINE DGETF2( M, N, A, LDA, IPIV, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, M, N
|
* INTEGER INFO, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* INTEGER IPIV( * )
|
* INTEGER IPIV( * )
|
||||||
* DOUBLE PRECISION A( LDA, * )
|
* DOUBLE PRECISION A( LDA, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -96,22 +96,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGETF2( M, N, A, LDA, IPIV, INFO )
|
SUBROUTINE DGETF2( M, N, A, LDA, IPIV, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, M, N
|
INTEGER INFO, LDA, M, N
|
||||||
|
@ -128,11 +128,11 @@
|
||||||
PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
|
PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION SFMIN
|
DOUBLE PRECISION SFMIN
|
||||||
INTEGER I, J, JP
|
INTEGER I, J, JP
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
DOUBLE PRECISION DLAMCH
|
DOUBLE PRECISION DLAMCH
|
||||||
INTEGER IDAMAX
|
INTEGER IDAMAX
|
||||||
EXTERNAL DLAMCH, IDAMAX
|
EXTERNAL DLAMCH, IDAMAX
|
||||||
* ..
|
* ..
|
||||||
|
@ -164,9 +164,9 @@
|
||||||
IF( M.EQ.0 .OR. N.EQ.0 )
|
IF( M.EQ.0 .OR. N.EQ.0 )
|
||||||
$ RETURN
|
$ RETURN
|
||||||
*
|
*
|
||||||
* Compute machine safe minimum
|
* Compute machine safe minimum
|
||||||
*
|
*
|
||||||
SFMIN = DLAMCH('S')
|
SFMIN = DLAMCH('S')
|
||||||
*
|
*
|
||||||
DO 10 J = 1, MIN( M, N )
|
DO 10 J = 1, MIN( M, N )
|
||||||
*
|
*
|
||||||
|
@ -183,15 +183,15 @@
|
||||||
*
|
*
|
||||||
* Compute elements J+1:M of J-th column.
|
* Compute elements J+1:M of J-th column.
|
||||||
*
|
*
|
||||||
IF( J.LT.M ) THEN
|
IF( J.LT.M ) THEN
|
||||||
IF( ABS(A( J, J )) .GE. SFMIN ) THEN
|
IF( ABS(A( J, J )) .GE. SFMIN ) THEN
|
||||||
CALL DSCAL( M-J, ONE / A( J, J ), A( J+1, J ), 1 )
|
CALL DSCAL( M-J, ONE / A( J, J ), A( J+1, J ), 1 )
|
||||||
ELSE
|
ELSE
|
||||||
DO 20 I = 1, M-J
|
DO 20 I = 1, M-J
|
||||||
A( J+I, J ) = A( J+I, J ) / A( J, J )
|
A( J+I, J ) = A( J+I, J ) / A( J, J )
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
ELSE IF( INFO.EQ.0 ) THEN
|
ELSE IF( INFO.EQ.0 ) THEN
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGETRF + dependencies
|
*> Download DGETRF + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetrf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetrf.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetrf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetrf.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrf.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO )
|
* SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, M, N
|
* INTEGER INFO, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* INTEGER IPIV( * )
|
* INTEGER IPIV( * )
|
||||||
* DOUBLE PRECISION A( LDA, * )
|
* DOUBLE PRECISION A( LDA, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -96,22 +96,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO )
|
SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, M, N
|
INTEGER INFO, LDA, M, N
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
INTEGER I, IINFO, J, JB, NB
|
INTEGER I, IINFO, J, JB, NB
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL DGEMM, DGETF2, DLASWP, DTRSM, XERBLA
|
EXTERNAL DGEMM, DGETRF2, DLASWP, DTRSM, XERBLA
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
INTEGER ILAENV
|
INTEGER ILAENV
|
||||||
|
@ -169,7 +169,7 @@
|
||||||
*
|
*
|
||||||
* Use unblocked code.
|
* Use unblocked code.
|
||||||
*
|
*
|
||||||
CALL DGETF2( M, N, A, LDA, IPIV, INFO )
|
CALL DGETRF2( M, N, A, LDA, IPIV, INFO )
|
||||||
ELSE
|
ELSE
|
||||||
*
|
*
|
||||||
* Use blocked code.
|
* Use blocked code.
|
||||||
|
@ -180,7 +180,7 @@
|
||||||
* Factor diagonal and subdiagonal blocks and test for exact
|
* Factor diagonal and subdiagonal blocks and test for exact
|
||||||
* singularity.
|
* singularity.
|
||||||
*
|
*
|
||||||
CALL DGETF2( M-J+1, JB, A( J, J ), LDA, IPIV( J ), IINFO )
|
CALL DGETRF2( M-J+1, JB, A( J, J ), LDA, IPIV( J ), IINFO )
|
||||||
*
|
*
|
||||||
* Adjust INFO and the pivot indices.
|
* Adjust INFO and the pivot indices.
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,272 @@
|
||||||
|
*> \brief \b DGETRF2
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* RECURSIVE SUBROUTINE DGETRF2( M, N, A, LDA, IPIV, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER INFO, LDA, M, N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER IPIV( * )
|
||||||
|
* DOUBLE PRECISION A( LDA, * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DGETRF2 computes an LU factorization of a general M-by-N matrix A
|
||||||
|
*> using partial pivoting with row interchanges.
|
||||||
|
*>
|
||||||
|
*> The factorization has the form
|
||||||
|
*> A = P * L * U
|
||||||
|
*> where P is a permutation matrix, L is lower triangular with unit
|
||||||
|
*> diagonal elements (lower trapezoidal if m > n), and U is upper
|
||||||
|
*> triangular (upper trapezoidal if m < n).
|
||||||
|
*>
|
||||||
|
*> This is the recursive version of the algorithm. It divides
|
||||||
|
*> the matrix into four submatrices:
|
||||||
|
*>
|
||||||
|
*> [ A11 | A12 ] where A11 is n1 by n1 and A22 is n2 by n2
|
||||||
|
*> A = [ -----|----- ] with n1 = min(m,n)/2
|
||||||
|
*> [ A21 | A22 ] n2 = n-n1
|
||||||
|
*>
|
||||||
|
*> [ A11 ]
|
||||||
|
*> The subroutine calls itself to factor [ --- ],
|
||||||
|
*> [ A12 ]
|
||||||
|
*> [ A12 ]
|
||||||
|
*> do the swaps on [ --- ], solve A12, update A22,
|
||||||
|
*> [ A22 ]
|
||||||
|
*>
|
||||||
|
*> then calls itself to factor A22 and do the swaps on A21.
|
||||||
|
*>
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] M
|
||||||
|
*> \verbatim
|
||||||
|
*> M is INTEGER
|
||||||
|
*> The number of rows of the matrix A. M >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> The number of columns of the matrix A. N >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] A
|
||||||
|
*> \verbatim
|
||||||
|
*> A is DOUBLE PRECISION array, dimension (LDA,N)
|
||||||
|
*> On entry, the M-by-N matrix to be factored.
|
||||||
|
*> On exit, the factors L and U from the factorization
|
||||||
|
*> A = P*L*U; the unit diagonal elements of L are not stored.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDA
|
||||||
|
*> \verbatim
|
||||||
|
*> LDA is INTEGER
|
||||||
|
*> The leading dimension of the array A. LDA >= max(1,M).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IPIV
|
||||||
|
*> \verbatim
|
||||||
|
*> IPIV is INTEGER array, dimension (min(M,N))
|
||||||
|
*> The pivot indices; for 1 <= i <= min(M,N), row i of the
|
||||||
|
*> matrix was interchanged with row IPIV(i).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
||||||
|
*> > 0: if INFO = i, U(i,i) is exactly zero. The factorization
|
||||||
|
*> has been completed, but the factor U is exactly
|
||||||
|
*> singular, and division by zero will occur if it is used
|
||||||
|
*> to solve a system of equations.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date June 2016
|
||||||
|
*
|
||||||
|
*> \ingroup doubleGEcomputational
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
RECURSIVE SUBROUTINE DGETRF2( M, N, A, LDA, IPIV, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* June 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER INFO, LDA, M, N
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER IPIV( * )
|
||||||
|
DOUBLE PRECISION A( LDA, * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE, ZERO
|
||||||
|
PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION SFMIN, TEMP
|
||||||
|
INTEGER I, IINFO, N1, N2
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
DOUBLE PRECISION DLAMCH
|
||||||
|
INTEGER IDAMAX
|
||||||
|
EXTERNAL DLAMCH, IDAMAX
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DGEMM, DSCAL, DLASWP, DTRSM, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX, MIN
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
IF( M.LT.0 ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( N.LT.0 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
|
||||||
|
INFO = -4
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DGETRF2', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible
|
||||||
|
*
|
||||||
|
IF( M.EQ.0 .OR. N.EQ.0 )
|
||||||
|
$ RETURN
|
||||||
|
|
||||||
|
IF ( M.EQ.1 ) THEN
|
||||||
|
*
|
||||||
|
* Use unblocked code for one row case
|
||||||
|
* Just need to handle IPIV and INFO
|
||||||
|
*
|
||||||
|
IPIV( 1 ) = 1
|
||||||
|
IF ( A(1,1).EQ.ZERO )
|
||||||
|
$ INFO = 1
|
||||||
|
*
|
||||||
|
ELSE IF( N.EQ.1 ) THEN
|
||||||
|
*
|
||||||
|
* Use unblocked code for one column case
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Compute machine safe minimum
|
||||||
|
*
|
||||||
|
SFMIN = DLAMCH('S')
|
||||||
|
*
|
||||||
|
* Find pivot and test for singularity
|
||||||
|
*
|
||||||
|
I = IDAMAX( M, A( 1, 1 ), 1 )
|
||||||
|
IPIV( 1 ) = I
|
||||||
|
IF( A( I, 1 ).NE.ZERO ) THEN
|
||||||
|
*
|
||||||
|
* Apply the interchange
|
||||||
|
*
|
||||||
|
IF( I.NE.1 ) THEN
|
||||||
|
TEMP = A( 1, 1 )
|
||||||
|
A( 1, 1 ) = A( I, 1 )
|
||||||
|
A( I, 1 ) = TEMP
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Compute elements 2:M of the column
|
||||||
|
*
|
||||||
|
IF( ABS(A( 1, 1 )) .GE. SFMIN ) THEN
|
||||||
|
CALL DSCAL( M-1, ONE / A( 1, 1 ), A( 2, 1 ), 1 )
|
||||||
|
ELSE
|
||||||
|
DO 10 I = 1, M-1
|
||||||
|
A( 1+I, 1 ) = A( 1+I, 1 ) / A( 1, 1 )
|
||||||
|
10 CONTINUE
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
ELSE
|
||||||
|
INFO = 1
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Use recursive code
|
||||||
|
*
|
||||||
|
N1 = MIN( M, N ) / 2
|
||||||
|
N2 = N-N1
|
||||||
|
*
|
||||||
|
* [ A11 ]
|
||||||
|
* Factor [ --- ]
|
||||||
|
* [ A21 ]
|
||||||
|
*
|
||||||
|
CALL DGETRF2( M, N1, A, LDA, IPIV, IINFO )
|
||||||
|
|
||||||
|
IF ( INFO.EQ.0 .AND. IINFO.GT.0 )
|
||||||
|
$ INFO = IINFO
|
||||||
|
*
|
||||||
|
* [ A12 ]
|
||||||
|
* Apply interchanges to [ --- ]
|
||||||
|
* [ A22 ]
|
||||||
|
*
|
||||||
|
CALL DLASWP( N2, A( 1, N1+1 ), LDA, 1, N1, IPIV, 1 )
|
||||||
|
*
|
||||||
|
* Solve A12
|
||||||
|
*
|
||||||
|
CALL DTRSM( 'L', 'L', 'N', 'U', N1, N2, ONE, A, LDA,
|
||||||
|
$ A( 1, N1+1 ), LDA )
|
||||||
|
*
|
||||||
|
* Update A22
|
||||||
|
*
|
||||||
|
CALL DGEMM( 'N', 'N', M-N1, N2, N1, -ONE, A( N1+1, 1 ), LDA,
|
||||||
|
$ A( 1, N1+1 ), LDA, ONE, A( N1+1, N1+1 ), LDA )
|
||||||
|
*
|
||||||
|
* Factor A22
|
||||||
|
*
|
||||||
|
CALL DGETRF2( M-N1, N2, A( N1+1, N1+1 ), LDA, IPIV( N1+1 ),
|
||||||
|
$ IINFO )
|
||||||
|
*
|
||||||
|
* Adjust INFO and the pivot indices
|
||||||
|
*
|
||||||
|
IF ( INFO.EQ.0 .AND. IINFO.GT.0 )
|
||||||
|
$ INFO = IINFO + N1
|
||||||
|
DO 20 I = N1+1, MIN( M, N )
|
||||||
|
IPIV( I ) = IPIV( I ) + N1
|
||||||
|
20 CONTINUE
|
||||||
|
*
|
||||||
|
* Apply interchanges to A21
|
||||||
|
*
|
||||||
|
CALL DLASWP( N1, A( 1, 1 ), LDA, N1+1, MIN( M, N), IPIV, 1 )
|
||||||
|
*
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DGETRF2
|
||||||
|
*
|
||||||
|
END
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGETRI + dependencies
|
*> Download DGETRI + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetri.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetri.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetri.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetri.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetri.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetri.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
|
* SUBROUTINE DGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, LDA, LWORK, N
|
* INTEGER INFO, LDA, LWORK, N
|
||||||
* ..
|
* ..
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* INTEGER IPIV( * )
|
* INTEGER IPIV( * )
|
||||||
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -102,22 +102,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
|
SUBROUTINE DGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, LDA, LWORK, N
|
INTEGER INFO, LDA, LWORK, N
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DGETRS + dependencies
|
*> Download DGETRS + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetrs.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgetrs.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetrs.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgetrs.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrs.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrs.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
* SUBROUTINE DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER TRANS
|
* CHARACTER TRANS
|
||||||
* INTEGER INFO, LDA, LDB, N, NRHS
|
* INTEGER INFO, LDA, LDB, N, NRHS
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* INTEGER IPIV( * )
|
* INTEGER IPIV( * )
|
||||||
* DOUBLE PRECISION A( LDA, * ), B( LDB, * )
|
* DOUBLE PRECISION A( LDA, * ), B( LDB, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -109,22 +109,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup doubleGEcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
SUBROUTINE DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER TRANS
|
CHARACTER TRANS
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DISNAN + dependencies
|
*> Download DISNAN + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/disnan.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/disnan.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/disnan.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/disnan.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/disnan.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/disnan.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* LOGICAL FUNCTION DISNAN( DIN )
|
* LOGICAL FUNCTION DISNAN( DIN )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION DIN
|
* DOUBLE PRECISION, INTENT(IN) :: DIN
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -47,25 +47,25 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
LOGICAL FUNCTION DISNAN( DIN )
|
LOGICAL FUNCTION DISNAN( DIN )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION DIN
|
DOUBLE PRECISION, INTENT(IN) :: DIN
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLABAD + dependencies
|
*> Download DLABAD + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlabad.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlabad.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlabad.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlabad.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabad.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabad.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLABAD( SMALL, LARGE )
|
* SUBROUTINE DLABAD( SMALL, LARGE )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION LARGE, SMALL
|
* DOUBLE PRECISION LARGE, SMALL
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -62,22 +62,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLABAD( SMALL, LARGE )
|
SUBROUTINE DLABAD( SMALL, LARGE )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.0) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION LARGE, SMALL
|
DOUBLE PRECISION LARGE, SMALL
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLABRD + dependencies
|
*> Download DLABRD + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlabrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlabrd.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlabrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlabrd.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabrd.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y,
|
* SUBROUTINE DLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y,
|
||||||
* LDY )
|
* LDY )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER LDA, LDX, LDY, M, N, NB
|
* INTEGER LDA, LDX, LDY, M, N, NB
|
||||||
* ..
|
* ..
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ),
|
* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ),
|
||||||
* $ TAUQ( * ), X( LDX, * ), Y( LDY, * )
|
* $ TAUQ( * ), X( LDX, * ), Y( LDY, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[out] TAUQ
|
*> \param[out] TAUQ
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> TAUQ is DOUBLE PRECISION array dimension (NB)
|
*> TAUQ is DOUBLE PRECISION array, dimension (NB)
|
||||||
*> The scalar factors of the elementary reflectors which
|
*> The scalar factors of the elementary reflectors which
|
||||||
*> represent the orthogonal matrix Q. See Further Details.
|
*> represent the orthogonal matrix Q. See Further Details.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -151,12 +151,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
|
@ -210,10 +210,10 @@
|
||||||
SUBROUTINE DLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y,
|
SUBROUTINE DLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y,
|
||||||
$ LDY )
|
$ LDY )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER LDA, LDX, LDY, M, N, NB
|
INTEGER LDA, LDX, LDY, M, N, NB
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLACN2 + dependencies
|
*> Download DLACN2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlacn2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlacn2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlacn2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlacn2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacn2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacn2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )
|
* SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER KASE, N
|
* INTEGER KASE, N
|
||||||
* DOUBLE PRECISION EST
|
* DOUBLE PRECISION EST
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* INTEGER ISGN( * ), ISAVE( 3 )
|
* INTEGER ISGN( * ), ISAVE( 3 )
|
||||||
* DOUBLE PRECISION V( * ), X( * )
|
* DOUBLE PRECISION V( * ), X( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
*> EST is DOUBLE PRECISION
|
*> EST is DOUBLE PRECISION
|
||||||
*> On entry with KASE = 1 or 2 and ISAVE(1) = 3, EST should be
|
*> On entry with KASE = 1 or 2 and ISAVE(1) = 3, EST should be
|
||||||
*> unchanged from the previous call to DLACN2.
|
*> unchanged from the previous call to DLACN2.
|
||||||
*> On exit, EST is an estimate (a lower bound) for norm(A).
|
*> On exit, EST is an estimate (a lower bound) for norm(A).
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] KASE
|
*> \param[in,out] KASE
|
||||||
|
@ -96,12 +96,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
|
@ -136,10 +136,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )
|
SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER KASE, N
|
INTEGER KASE, N
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLACPY + dependencies
|
*> Download DLACPY + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlacpy.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlacpy.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlacpy.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlacpy.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacpy.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacpy.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB )
|
* SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER UPLO
|
* CHARACTER UPLO
|
||||||
* INTEGER LDA, LDB, M, N
|
* INTEGER LDA, LDB, M, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), B( LDB, * )
|
* DOUBLE PRECISION A( LDA, * ), B( LDB, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -91,22 +91,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB )
|
SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER UPLO
|
CHARACTER UPLO
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLADIV + dependencies
|
*> Download DLADIV + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dladiv.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dladiv.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dladiv.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dladiv.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dladiv.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dladiv.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLADIV( A, B, C, D, P, Q )
|
* SUBROUTINE DLADIV( A, B, C, D, P, Q )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION A, B, C, D, P, Q
|
* DOUBLE PRECISION A, B, C, D, P, Q
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -36,8 +36,9 @@
|
||||||
*> p + i*q = ---------
|
*> p + i*q = ---------
|
||||||
*> c + i*d
|
*> c + i*d
|
||||||
*>
|
*>
|
||||||
*> The algorithm is due to Robert L. Smith and can be found
|
*> The algorithm is due to Michael Baudin and Robert L. Smith
|
||||||
*> in D. Knuth, The art of Computer Programming, Vol.2, p.195
|
*> and can be found in the paper
|
||||||
|
*> "A Robust Complex Division in Scilab"
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
|
@ -78,22 +79,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date January 2013
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLADIV( A, B, C, D, P, Q )
|
SUBROUTINE DLADIV( A, B, C, D, P, Q )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* January 2013
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION A, B, C, D, P, Q
|
DOUBLE PRECISION A, B, C, D, P, Q
|
||||||
|
@ -101,28 +102,155 @@
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION BS
|
||||||
|
PARAMETER ( BS = 2.0D0 )
|
||||||
|
DOUBLE PRECISION HALF
|
||||||
|
PARAMETER ( HALF = 0.5D0 )
|
||||||
|
DOUBLE PRECISION TWO
|
||||||
|
PARAMETER ( TWO = 2.0D0 )
|
||||||
|
*
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION E, F
|
DOUBLE PRECISION AA, BB, CC, DD, AB, CD, S, OV, UN, BE, EPS
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
DOUBLE PRECISION DLAMCH
|
||||||
|
EXTERNAL DLAMCH
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DLADIV1
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC ABS
|
INTRINSIC ABS, MAX
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
IF( ABS( D ).LT.ABS( C ) ) THEN
|
AA = A
|
||||||
E = D / C
|
BB = B
|
||||||
F = C + D*E
|
CC = C
|
||||||
P = ( A+B*E ) / F
|
DD = D
|
||||||
Q = ( B-A*E ) / F
|
AB = MAX( ABS(A), ABS(B) )
|
||||||
ELSE
|
CD = MAX( ABS(C), ABS(D) )
|
||||||
E = C / D
|
S = 1.0D0
|
||||||
F = D + C*E
|
|
||||||
P = ( B+A*E ) / F
|
OV = DLAMCH( 'Overflow threshold' )
|
||||||
Q = ( -A+B*E ) / F
|
UN = DLAMCH( 'Safe minimum' )
|
||||||
|
EPS = DLAMCH( 'Epsilon' )
|
||||||
|
BE = BS / (EPS*EPS)
|
||||||
|
|
||||||
|
IF( AB >= HALF*OV ) THEN
|
||||||
|
AA = HALF * AA
|
||||||
|
BB = HALF * BB
|
||||||
|
S = TWO * S
|
||||||
END IF
|
END IF
|
||||||
|
IF( CD >= HALF*OV ) THEN
|
||||||
|
CC = HALF * CC
|
||||||
|
DD = HALF * DD
|
||||||
|
S = HALF * S
|
||||||
|
END IF
|
||||||
|
IF( AB <= UN*BS/EPS ) THEN
|
||||||
|
AA = AA * BE
|
||||||
|
BB = BB * BE
|
||||||
|
S = S / BE
|
||||||
|
END IF
|
||||||
|
IF( CD <= UN*BS/EPS ) THEN
|
||||||
|
CC = CC * BE
|
||||||
|
DD = DD * BE
|
||||||
|
S = S * BE
|
||||||
|
END IF
|
||||||
|
IF( ABS( D ).LE.ABS( C ) ) THEN
|
||||||
|
CALL DLADIV1(AA, BB, CC, DD, P, Q)
|
||||||
|
ELSE
|
||||||
|
CALL DLADIV1(BB, AA, DD, CC, P, Q)
|
||||||
|
Q = -Q
|
||||||
|
END IF
|
||||||
|
P = P * S
|
||||||
|
Q = Q * S
|
||||||
*
|
*
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
* End of DLADIV
|
* End of DLADIV
|
||||||
*
|
*
|
||||||
END
|
END
|
||||||
|
|
||||||
|
*> \ingroup doubleOTHERauxiliary
|
||||||
|
|
||||||
|
|
||||||
|
SUBROUTINE DLADIV1( A, B, C, D, P, Q )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* January 2013
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
DOUBLE PRECISION A, B, C, D, P, Q
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE
|
||||||
|
PARAMETER ( ONE = 1.0D0 )
|
||||||
|
*
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION R, T
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
DOUBLE PRECISION DLADIV2
|
||||||
|
EXTERNAL DLADIV2
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
R = D / C
|
||||||
|
T = ONE / (C + D * R)
|
||||||
|
P = DLADIV2(A, B, C, D, R, T)
|
||||||
|
A = -A
|
||||||
|
Q = DLADIV2(B, A, C, D, R, T)
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLADIV1
|
||||||
|
*
|
||||||
|
END
|
||||||
|
|
||||||
|
*> \ingroup doubleOTHERauxiliary
|
||||||
|
|
||||||
|
DOUBLE PRECISION FUNCTION DLADIV2( A, B, C, D, R, T )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* January 2013
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
DOUBLE PRECISION A, B, C, D, R, T
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO
|
||||||
|
PARAMETER ( ZERO = 0.0D0 )
|
||||||
|
*
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION BR
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
IF( R.NE.ZERO ) THEN
|
||||||
|
BR = B * R
|
||||||
|
IF( BR.NE.ZERO ) THEN
|
||||||
|
DLADIV2 = (A + BR) * T
|
||||||
|
ELSE
|
||||||
|
DLADIV2 = A * T + (B * T) * R
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
DLADIV2 = (A + D * (B / C)) * T
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLADIV12
|
||||||
|
*
|
||||||
|
END
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAE2 + dependencies
|
*> Download DLAE2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlae2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlae2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlae2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlae2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlae2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlae2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAE2( A, B, C, RT1, RT2 )
|
* SUBROUTINE DLAE2( A, B, C, RT1, RT2 )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION A, B, C, RT1, RT2
|
* DOUBLE PRECISION A, B, C, RT1, RT2
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -73,14 +73,14 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
*> \par Further Details:
|
*> \par Further Details:
|
||||||
* =====================
|
* =====================
|
||||||
|
@ -102,10 +102,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLAE2( A, B, C, RT1, RT2 )
|
SUBROUTINE DLAE2( A, B, C, RT1, RT2 )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION A, B, C, RT1, RT2
|
DOUBLE PRECISION A, B, C, RT1, RT2
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED0 + dependencies
|
*> Download DLAED0 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed0.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed0.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed0.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed0.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed0.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed0.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED0( ICOMPQ, QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS,
|
* SUBROUTINE DLAED0( ICOMPQ, QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS,
|
||||||
* WORK, IWORK, INFO )
|
* WORK, IWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER ICOMPQ, INFO, LDQ, LDQS, N, QSIZ
|
* INTEGER ICOMPQ, INFO, LDQ, LDQS, N, QSIZ
|
||||||
* ..
|
* ..
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* DOUBLE PRECISION D( * ), E( * ), Q( LDQ, * ), QSTORE( LDQS, * ),
|
* DOUBLE PRECISION D( * ), E( * ), Q( LDQ, * ), QSTORE( LDQS, * ),
|
||||||
* $ WORK( * )
|
* $ WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -153,12 +153,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -172,10 +172,10 @@
|
||||||
SUBROUTINE DLAED0( ICOMPQ, QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS,
|
SUBROUTINE DLAED0( ICOMPQ, QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS,
|
||||||
$ WORK, IWORK, INFO )
|
$ WORK, IWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER ICOMPQ, INFO, LDQ, LDQS, N, QSIZ
|
INTEGER ICOMPQ, INFO, LDQ, LDQS, N, QSIZ
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED1 + dependencies
|
*> Download DLAED1 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed1.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed1.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed1.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed1.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed1.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed1.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED1( N, D, Q, LDQ, INDXQ, RHO, CUTPNT, WORK, IWORK,
|
* SUBROUTINE DLAED1( N, D, Q, LDQ, INDXQ, RHO, CUTPNT, WORK, IWORK,
|
||||||
* INFO )
|
* INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER CUTPNT, INFO, LDQ, N
|
* INTEGER CUTPNT, INFO, LDQ, N
|
||||||
* DOUBLE PRECISION RHO
|
* DOUBLE PRECISION RHO
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* INTEGER INDXQ( * ), IWORK( * )
|
* INTEGER INDXQ( * ), IWORK( * )
|
||||||
* DOUBLE PRECISION D( * ), Q( LDQ, * ), WORK( * )
|
* DOUBLE PRECISION D( * ), Q( LDQ, * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
*>
|
*>
|
||||||
*> The first stage consists of deflating the size of the problem
|
*> The first stage consists of deflating the size of the problem
|
||||||
*> when there are multiple eigenvalues or if there is a zero in
|
*> when there are multiple eigenvalues or if there is a zero in
|
||||||
*> the Z vector. For each such occurence the dimension of the
|
*> the Z vector. For each such occurrence the dimension of the
|
||||||
*> secular equation problem is reduced by one. This stage is
|
*> secular equation problem is reduced by one. This stage is
|
||||||
*> performed by the routine DLAED2.
|
*> performed by the routine DLAED2.
|
||||||
*>
|
*>
|
||||||
|
@ -143,12 +143,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -163,10 +163,10 @@
|
||||||
SUBROUTINE DLAED1( N, D, Q, LDQ, INDXQ, RHO, CUTPNT, WORK, IWORK,
|
SUBROUTINE DLAED1( N, D, Q, LDQ, INDXQ, RHO, CUTPNT, WORK, IWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER CUTPNT, INFO, LDQ, N
|
INTEGER CUTPNT, INFO, LDQ, N
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED2 + dependencies
|
*> Download DLAED2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED2( K, N, N1, D, Q, LDQ, INDXQ, RHO, Z, DLAMDA, W,
|
* SUBROUTINE DLAED2( K, N, N1, D, Q, LDQ, INDXQ, RHO, Z, DLAMDA, W,
|
||||||
* Q2, INDX, INDXC, INDXP, COLTYP, INFO )
|
* Q2, INDX, INDXC, INDXP, COLTYP, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDQ, N, N1
|
* INTEGER INFO, K, LDQ, N, N1
|
||||||
* DOUBLE PRECISION RHO
|
* DOUBLE PRECISION RHO
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
* DOUBLE PRECISION D( * ), DLAMDA( * ), Q( LDQ, * ), Q2( * ),
|
* DOUBLE PRECISION D( * ), DLAMDA( * ), Q( LDQ, * ), Q2( * ),
|
||||||
* $ W( * ), Z( * )
|
* $ W( * ), Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -192,12 +192,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -212,10 +212,10 @@
|
||||||
SUBROUTINE DLAED2( K, N, N1, D, Q, LDQ, INDXQ, RHO, Z, DLAMDA, W,
|
SUBROUTINE DLAED2( K, N, N1, D, Q, LDQ, INDXQ, RHO, Z, DLAMDA, W,
|
||||||
$ Q2, INDX, INDXC, INDXP, COLTYP, INFO )
|
$ Q2, INDX, INDXC, INDXP, COLTYP, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDQ, N, N1
|
INTEGER INFO, K, LDQ, N, N1
|
||||||
|
@ -520,10 +520,10 @@
|
||||||
* into the last N - K slots of D and Q respectively.
|
* into the last N - K slots of D and Q respectively.
|
||||||
*
|
*
|
||||||
IF( K.LT.N ) THEN
|
IF( K.LT.N ) THEN
|
||||||
CALL DLACPY( 'A', N, CTOT( 4 ), Q2( IQ1 ), N,
|
CALL DLACPY( 'A', N, CTOT( 4 ), Q2( IQ1 ), N,
|
||||||
$ Q( 1, K+1 ), LDQ )
|
$ Q( 1, K+1 ), LDQ )
|
||||||
CALL DCOPY( N-K, Z( K+1 ), 1, D( K+1 ), 1 )
|
CALL DCOPY( N-K, Z( K+1 ), 1, D( K+1 ), 1 )
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Copy CTOT into COLTYP for referencing in DLAED3.
|
* Copy CTOT into COLTYP for referencing in DLAED3.
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED3 + dependencies
|
*> Download DLAED3 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed3.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed3.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed3.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX,
|
* SUBROUTINE DLAED3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX,
|
||||||
* CTOT, W, S, INFO )
|
* CTOT, W, S, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDQ, N, N1
|
* INTEGER INFO, K, LDQ, N, N1
|
||||||
* DOUBLE PRECISION RHO
|
* DOUBLE PRECISION RHO
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
* DOUBLE PRECISION D( * ), DLAMDA( * ), Q( LDQ, * ), Q2( * ),
|
* DOUBLE PRECISION D( * ), DLAMDA( * ), Q( LDQ, * ), Q2( * ),
|
||||||
* $ S( * ), W( * )
|
* $ S( * ), W( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] Q2
|
*> \param[in] Q2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> Q2 is DOUBLE PRECISION array, dimension (LDQ2, N)
|
*> Q2 is DOUBLE PRECISION array, dimension (LDQ2*N)
|
||||||
*> The first K columns of this matrix contain the non-deflated
|
*> The first K columns of this matrix contain the non-deflated
|
||||||
*> eigenvectors for the split problem.
|
*> eigenvectors for the split problem.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -165,12 +165,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -185,10 +185,10 @@
|
||||||
SUBROUTINE DLAED3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX,
|
SUBROUTINE DLAED3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX,
|
||||||
$ CTOT, W, S, INFO )
|
$ CTOT, W, S, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDQ, N, N1
|
INTEGER INFO, K, LDQ, N, N1
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED4 + dependencies
|
*> Download DLAED4 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed4.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed4.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed4.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed4.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed4.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed4.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED4( N, I, D, Z, DELTA, RHO, DLAM, INFO )
|
* SUBROUTINE DLAED4( N, I, D, Z, DELTA, RHO, DLAM, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER I, INFO, N
|
* INTEGER I, INFO, N
|
||||||
* DOUBLE PRECISION DLAM, RHO
|
* DOUBLE PRECISION DLAM, RHO
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION D( * ), DELTA( * ), Z( * )
|
* DOUBLE PRECISION D( * ), DELTA( * ), Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -127,12 +127,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -145,10 +145,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLAED4( N, I, D, Z, DELTA, RHO, DLAM, INFO )
|
SUBROUTINE DLAED4( N, I, D, Z, DELTA, RHO, DLAM, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER I, INFO, N
|
INTEGER I, INFO, N
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED5 + dependencies
|
*> Download DLAED5 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed5.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed5.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed5.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed5.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed5.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed5.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED5( I, D, Z, DELTA, RHO, DLAM )
|
* SUBROUTINE DLAED5( I, D, Z, DELTA, RHO, DLAM )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER I
|
* INTEGER I
|
||||||
* DOUBLE PRECISION DLAM, RHO
|
* DOUBLE PRECISION DLAM, RHO
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION D( 2 ), DELTA( 2 ), Z( 2 )
|
* DOUBLE PRECISION D( 2 ), DELTA( 2 ), Z( 2 )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -90,12 +90,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -108,10 +108,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLAED5( I, D, Z, DELTA, RHO, DLAM )
|
SUBROUTINE DLAED5( I, D, Z, DELTA, RHO, DLAM )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER I
|
INTEGER I
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED6 + dependencies
|
*> Download DLAED6 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed6.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed6.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed6.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed6.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed6.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed6.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED6( KNITER, ORGATI, RHO, D, Z, FINIT, TAU, INFO )
|
* SUBROUTINE DLAED6( KNITER, ORGATI, RHO, D, Z, FINIT, TAU, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* LOGICAL ORGATI
|
* LOGICAL ORGATI
|
||||||
* INTEGER INFO, KNITER
|
* INTEGER INFO, KNITER
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION D( 3 ), Z( 3 )
|
* DOUBLE PRECISION D( 3 ), Z( 3 )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -110,12 +110,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -140,10 +140,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLAED6( KNITER, ORGATI, RHO, D, Z, FINIT, TAU, INFO )
|
SUBROUTINE DLAED6( KNITER, ORGATI, RHO, D, Z, FINIT, TAU, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
LOGICAL ORGATI
|
LOGICAL ORGATI
|
||||||
|
@ -175,7 +175,7 @@
|
||||||
INTEGER I, ITER, NITER
|
INTEGER I, ITER, NITER
|
||||||
DOUBLE PRECISION A, B, BASE, C, DDF, DF, EPS, ERRETM, ETA, F,
|
DOUBLE PRECISION A, B, BASE, C, DDF, DF, EPS, ERRETM, ETA, F,
|
||||||
$ FC, SCLFAC, SCLINV, SMALL1, SMALL2, SMINV1,
|
$ FC, SCLFAC, SCLINV, SMALL1, SMALL2, SMINV1,
|
||||||
$ SMINV2, TEMP, TEMP1, TEMP2, TEMP3, TEMP4,
|
$ SMINV2, TEMP, TEMP1, TEMP2, TEMP3, TEMP4,
|
||||||
$ LBD, UBD
|
$ LBD, UBD
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
|
@ -195,7 +195,7 @@
|
||||||
IF( FINIT .LT. ZERO )THEN
|
IF( FINIT .LT. ZERO )THEN
|
||||||
LBD = ZERO
|
LBD = ZERO
|
||||||
ELSE
|
ELSE
|
||||||
UBD = ZERO
|
UBD = ZERO
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
NITER = 1
|
NITER = 1
|
||||||
|
@ -363,7 +363,7 @@
|
||||||
*
|
*
|
||||||
TAU = TAU + ETA
|
TAU = TAU + ETA
|
||||||
IF( TAU .LT. LBD .OR. TAU .GT. UBD )
|
IF( TAU .LT. LBD .OR. TAU .GT. UBD )
|
||||||
$ TAU = ( LBD + UBD )/TWO
|
$ TAU = ( LBD + UBD )/TWO
|
||||||
*
|
*
|
||||||
FC = ZERO
|
FC = ZERO
|
||||||
ERRETM = ZERO
|
ERRETM = ZERO
|
||||||
|
@ -381,13 +381,14 @@
|
||||||
DF = DF + TEMP2
|
DF = DF + TEMP2
|
||||||
DDF = DDF + TEMP3
|
DDF = DDF + TEMP3
|
||||||
ELSE
|
ELSE
|
||||||
GO TO 60
|
GO TO 60
|
||||||
END IF
|
END IF
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
F = FINIT + TAU*FC
|
F = FINIT + TAU*FC
|
||||||
ERRETM = EIGHT*( ABS( FINIT )+ABS( TAU )*ERRETM ) +
|
ERRETM = EIGHT*( ABS( FINIT )+ABS( TAU )*ERRETM ) +
|
||||||
$ ABS( TAU )*DF
|
$ ABS( TAU )*DF
|
||||||
IF( ABS( F ).LE.EPS*ERRETM )
|
IF( ( ABS( F ).LE.FOUR*EPS*ERRETM ) .OR.
|
||||||
|
$ ( (UBD-LBD).LE.FOUR*EPS*ABS(TAU) ) )
|
||||||
$ GO TO 60
|
$ GO TO 60
|
||||||
IF( F .LE. ZERO )THEN
|
IF( F .LE. ZERO )THEN
|
||||||
LBD = TAU
|
LBD = TAU
|
||||||
|
|
|
@ -2,18 +2,18 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED7 + dependencies
|
*> Download DLAED7 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed7.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed7.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed7.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed7.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed7.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed7.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
* LDQ, INDXQ, RHO, CUTPNT, QSTORE, QPTR, PRMPTR,
|
* LDQ, INDXQ, RHO, CUTPNT, QSTORE, QPTR, PRMPTR,
|
||||||
* PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK,
|
* PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK,
|
||||||
* INFO )
|
* INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER CURLVL, CURPBM, CUTPNT, ICOMPQ, INFO, LDQ, N,
|
* INTEGER CURLVL, CURPBM, CUTPNT, ICOMPQ, INFO, LDQ, N,
|
||||||
* $ QSIZ, TLVLS
|
* $ QSIZ, TLVLS
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
* DOUBLE PRECISION D( * ), GIVNUM( 2, * ), Q( LDQ, * ),
|
* DOUBLE PRECISION D( * ), GIVNUM( 2, * ), Q( LDQ, * ),
|
||||||
* $ QSTORE( * ), WORK( * )
|
* $ QSTORE( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
*>
|
*>
|
||||||
*> The first stage consists of deflating the size of the problem
|
*> The first stage consists of deflating the size of the problem
|
||||||
*> when there are multiple eigenvalues or if there is a zero in
|
*> when there are multiple eigenvalues or if there is a zero in
|
||||||
*> the Z vector. For each such occurence the dimension of the
|
*> the Z vector. For each such occurrence the dimension of the
|
||||||
*> secular equation problem is reduced by one. This stage is
|
*> secular equation problem is reduced by one. This stage is
|
||||||
*> performed by the routine DLAED8.
|
*> performed by the routine DLAED8.
|
||||||
*>
|
*>
|
||||||
|
@ -239,12 +239,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -260,10 +260,10 @@
|
||||||
$ PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK,
|
$ PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER CURLVL, CURPBM, CUTPNT, ICOMPQ, INFO, LDQ, N,
|
INTEGER CURLVL, CURPBM, CUTPNT, ICOMPQ, INFO, LDQ, N,
|
||||||
|
@ -304,7 +304,7 @@
|
||||||
ELSE IF( N.LT.0 ) THEN
|
ELSE IF( N.LT.0 ) THEN
|
||||||
INFO = -2
|
INFO = -2
|
||||||
ELSE IF( ICOMPQ.EQ.1 .AND. QSIZ.LT.N ) THEN
|
ELSE IF( ICOMPQ.EQ.1 .AND. QSIZ.LT.N ) THEN
|
||||||
INFO = -4
|
INFO = -3
|
||||||
ELSE IF( LDQ.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDQ.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -9
|
INFO = -9
|
||||||
ELSE IF( MIN( 1, N ).GT.CUTPNT .OR. N.LT.CUTPNT ) THEN
|
ELSE IF( MIN( 1, N ).GT.CUTPNT .OR. N.LT.CUTPNT ) THEN
|
||||||
|
|
|
@ -2,18 +2,18 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED8 + dependencies
|
*> Download DLAED8 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed8.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed8.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed8.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed8.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed8.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed8.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
* SUBROUTINE DLAED8( ICOMPQ, K, N, QSIZ, D, Q, LDQ, INDXQ, RHO,
|
* SUBROUTINE DLAED8( ICOMPQ, K, N, QSIZ, D, Q, LDQ, INDXQ, RHO,
|
||||||
* CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR,
|
* CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR,
|
||||||
* GIVCOL, GIVNUM, INDXP, INDX, INFO )
|
* GIVCOL, GIVNUM, INDXP, INDX, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER CUTPNT, GIVPTR, ICOMPQ, INFO, K, LDQ, LDQ2, N,
|
* INTEGER CUTPNT, GIVPTR, ICOMPQ, INFO, K, LDQ, LDQ2, N,
|
||||||
* $ QSIZ
|
* $ QSIZ
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
* DOUBLE PRECISION D( * ), DLAMDA( * ), GIVNUM( 2, * ),
|
* DOUBLE PRECISION D( * ), DLAMDA( * ), GIVNUM( 2, * ),
|
||||||
* $ Q( LDQ, * ), Q2( LDQ2, * ), W( * ), Z( * )
|
* $ Q( LDQ, * ), Q2( LDQ2, * ), W( * ), Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -223,12 +223,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -243,10 +243,10 @@
|
||||||
$ CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR,
|
$ CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR,
|
||||||
$ GIVCOL, GIVNUM, INDXP, INDX, INFO )
|
$ GIVCOL, GIVNUM, INDXP, INDX, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER CUTPNT, GIVPTR, ICOMPQ, INFO, K, LDQ, LDQ2, N,
|
INTEGER CUTPNT, GIVPTR, ICOMPQ, INFO, K, LDQ, LDQ2, N,
|
||||||
|
@ -308,8 +308,8 @@
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Need to initialize GIVPTR to O here in case of quick exit
|
* Need to initialize GIVPTR to O here in case of quick exit
|
||||||
* to prevent an unspecified code behavior (usually sigfault)
|
* to prevent an unspecified code behavior (usually sigfault)
|
||||||
* when IWORK array on entry to *stedc is not zeroed
|
* when IWORK array on entry to *stedc is not zeroed
|
||||||
* (or at least some IWORK entries which used in *laed7 for GIVPTR).
|
* (or at least some IWORK entries which used in *laed7 for GIVPTR).
|
||||||
*
|
*
|
||||||
GIVPTR = 0
|
GIVPTR = 0
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAED9 + dependencies
|
*> Download DLAED9 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed9.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaed9.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed9.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaed9.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed9.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed9.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAED9( K, KSTART, KSTOP, N, D, Q, LDQ, RHO, DLAMDA, W,
|
* SUBROUTINE DLAED9( K, KSTART, KSTOP, N, D, Q, LDQ, RHO, DLAMDA, W,
|
||||||
* S, LDS, INFO )
|
* S, LDS, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, KSTART, KSTOP, LDQ, LDS, N
|
* INTEGER INFO, K, KSTART, KSTOP, LDQ, LDS, N
|
||||||
* DOUBLE PRECISION RHO
|
* DOUBLE PRECISION RHO
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* DOUBLE PRECISION D( * ), DLAMDA( * ), Q( LDQ, * ), S( LDS, * ),
|
* DOUBLE PRECISION D( * ), DLAMDA( * ), Q( LDQ, * ), S( LDS, * ),
|
||||||
* $ W( * )
|
* $ W( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -137,12 +137,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -156,10 +156,10 @@
|
||||||
SUBROUTINE DLAED9( K, KSTART, KSTOP, N, D, Q, LDQ, RHO, DLAMDA, W,
|
SUBROUTINE DLAED9( K, KSTART, KSTOP, N, D, Q, LDQ, RHO, DLAMDA, W,
|
||||||
$ S, LDS, INFO )
|
$ S, LDS, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, KSTART, KSTOP, LDQ, LDS, N
|
INTEGER INFO, K, KSTART, KSTOP, LDQ, LDS, N
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAEDA + dependencies
|
*> Download DLAEDA + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaeda.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaeda.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaeda.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaeda.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaeda.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaeda.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAEDA( N, TLVLS, CURLVL, CURPBM, PRMPTR, PERM, GIVPTR,
|
* SUBROUTINE DLAEDA( N, TLVLS, CURLVL, CURPBM, PRMPTR, PERM, GIVPTR,
|
||||||
* GIVCOL, GIVNUM, Q, QPTR, Z, ZTEMP, INFO )
|
* GIVCOL, GIVNUM, Q, QPTR, Z, ZTEMP, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER CURLVL, CURPBM, INFO, N, TLVLS
|
* INTEGER CURLVL, CURPBM, INFO, N, TLVLS
|
||||||
* ..
|
* ..
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* $ PRMPTR( * ), QPTR( * )
|
* $ PRMPTR( * ), QPTR( * )
|
||||||
* DOUBLE PRECISION GIVNUM( 2, * ), Q( * ), Z( * ), ZTEMP( * )
|
* DOUBLE PRECISION GIVNUM( 2, * ), Q( * ), Z( * ), ZTEMP( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -147,12 +147,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -166,10 +166,10 @@
|
||||||
SUBROUTINE DLAEDA( N, TLVLS, CURLVL, CURPBM, PRMPTR, PERM, GIVPTR,
|
SUBROUTINE DLAEDA( N, TLVLS, CURLVL, CURPBM, PRMPTR, PERM, GIVPTR,
|
||||||
$ GIVCOL, GIVNUM, Q, QPTR, Z, ZTEMP, INFO )
|
$ GIVCOL, GIVNUM, Q, QPTR, Z, ZTEMP, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER CURLVL, CURPBM, INFO, N, TLVLS
|
INTEGER CURLVL, CURPBM, INFO, N, TLVLS
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAEV2 + dependencies
|
*> Download DLAEV2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaev2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaev2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaev2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaev2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaev2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaev2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAEV2( A, B, C, RT1, RT2, CS1, SN1 )
|
* SUBROUTINE DLAEV2( A, B, C, RT1, RT2, CS1, SN1 )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION A, B, C, CS1, RT1, RT2, SN1
|
* DOUBLE PRECISION A, B, C, CS1, RT1, RT2, SN1
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -89,14 +89,14 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
*> \par Further Details:
|
*> \par Further Details:
|
||||||
* =====================
|
* =====================
|
||||||
|
@ -120,10 +120,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLAEV2( A, B, C, RT1, RT2, CS1, SN1 )
|
SUBROUTINE DLAEV2( A, B, C, RT1, RT2, CS1, SN1 )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION A, B, C, CS1, RT1, RT2, SN1
|
DOUBLE PRECISION A, B, C, CS1, RT1, RT2, SN1
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAISNAN + dependencies
|
*> Download DLAISNAN + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaisnan.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaisnan.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaisnan.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaisnan.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaisnan.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaisnan.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 )
|
* LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION DIN1, DIN2
|
* DOUBLE PRECISION, INTENT(IN) :: DIN1, DIN2
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -62,25 +62,25 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 )
|
LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION DIN1, DIN2
|
DOUBLE PRECISION, INTENT(IN) :: DIN1, DIN2
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
|
|
|
@ -0,0 +1,499 @@
|
||||||
|
*> \brief \b DLALS0 applies back multiplying factors in solving the least squares problem using divide and conquer SVD approach. Used by sgelsd.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLALS0 + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlals0.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlals0.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlals0.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLALS0( ICOMPQ, NL, NR, SQRE, NRHS, B, LDB, BX, LDBX,
|
||||||
|
* PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
|
||||||
|
* POLES, DIFL, DIFR, Z, K, C, S, WORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER GIVPTR, ICOMPQ, INFO, K, LDB, LDBX, LDGCOL,
|
||||||
|
* $ LDGNUM, NL, NR, NRHS, SQRE
|
||||||
|
* DOUBLE PRECISION C, S
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER GIVCOL( LDGCOL, * ), PERM( * )
|
||||||
|
* DOUBLE PRECISION B( LDB, * ), BX( LDBX, * ), DIFL( * ),
|
||||||
|
* $ DIFR( LDGNUM, * ), GIVNUM( LDGNUM, * ),
|
||||||
|
* $ POLES( LDGNUM, * ), WORK( * ), Z( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLALS0 applies back the multiplying factors of either the left or the
|
||||||
|
*> right singular vector matrix of a diagonal matrix appended by a row
|
||||||
|
*> to the right hand side matrix B in solving the least squares problem
|
||||||
|
*> using the divide-and-conquer SVD approach.
|
||||||
|
*>
|
||||||
|
*> For the left singular vector matrix, three types of orthogonal
|
||||||
|
*> matrices are involved:
|
||||||
|
*>
|
||||||
|
*> (1L) Givens rotations: the number of such rotations is GIVPTR; the
|
||||||
|
*> pairs of columns/rows they were applied to are stored in GIVCOL;
|
||||||
|
*> and the C- and S-values of these rotations are stored in GIVNUM.
|
||||||
|
*>
|
||||||
|
*> (2L) Permutation. The (NL+1)-st row of B is to be moved to the first
|
||||||
|
*> row, and for J=2:N, PERM(J)-th row of B is to be moved to the
|
||||||
|
*> J-th row.
|
||||||
|
*>
|
||||||
|
*> (3L) The left singular vector matrix of the remaining matrix.
|
||||||
|
*>
|
||||||
|
*> For the right singular vector matrix, four types of orthogonal
|
||||||
|
*> matrices are involved:
|
||||||
|
*>
|
||||||
|
*> (1R) The right singular vector matrix of the remaining matrix.
|
||||||
|
*>
|
||||||
|
*> (2R) If SQRE = 1, one extra Givens rotation to generate the right
|
||||||
|
*> null space.
|
||||||
|
*>
|
||||||
|
*> (3R) The inverse transformation of (2L).
|
||||||
|
*>
|
||||||
|
*> (4R) The inverse transformation of (1L).
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] ICOMPQ
|
||||||
|
*> \verbatim
|
||||||
|
*> ICOMPQ is INTEGER
|
||||||
|
*> Specifies whether singular vectors are to be computed in
|
||||||
|
*> factored form:
|
||||||
|
*> = 0: Left singular vector matrix.
|
||||||
|
*> = 1: Right singular vector matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NL
|
||||||
|
*> \verbatim
|
||||||
|
*> NL is INTEGER
|
||||||
|
*> The row dimension of the upper block. NL >= 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NR
|
||||||
|
*> \verbatim
|
||||||
|
*> NR is INTEGER
|
||||||
|
*> The row dimension of the lower block. NR >= 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SQRE
|
||||||
|
*> \verbatim
|
||||||
|
*> SQRE is INTEGER
|
||||||
|
*> = 0: the lower block is an NR-by-NR square matrix.
|
||||||
|
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
|
||||||
|
*>
|
||||||
|
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
|
||||||
|
*> and column dimension M = N + SQRE.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NRHS
|
||||||
|
*> \verbatim
|
||||||
|
*> NRHS is INTEGER
|
||||||
|
*> The number of columns of B and BX. NRHS must be at least 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] B
|
||||||
|
*> \verbatim
|
||||||
|
*> B is DOUBLE PRECISION array, dimension ( LDB, NRHS )
|
||||||
|
*> On input, B contains the right hand sides of the least
|
||||||
|
*> squares problem in rows 1 through M. On output, B contains
|
||||||
|
*> the solution X in rows 1 through N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDB
|
||||||
|
*> \verbatim
|
||||||
|
*> LDB is INTEGER
|
||||||
|
*> The leading dimension of B. LDB must be at least
|
||||||
|
*> max(1,MAX( M, N ) ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] BX
|
||||||
|
*> \verbatim
|
||||||
|
*> BX is DOUBLE PRECISION array, dimension ( LDBX, NRHS )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDBX
|
||||||
|
*> \verbatim
|
||||||
|
*> LDBX is INTEGER
|
||||||
|
*> The leading dimension of BX.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] PERM
|
||||||
|
*> \verbatim
|
||||||
|
*> PERM is INTEGER array, dimension ( N )
|
||||||
|
*> The permutations (from deflation and sorting) applied
|
||||||
|
*> to the two blocks.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] GIVPTR
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVPTR is INTEGER
|
||||||
|
*> The number of Givens rotations which took place in this
|
||||||
|
*> subproblem.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] GIVCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVCOL is INTEGER array, dimension ( LDGCOL, 2 )
|
||||||
|
*> Each pair of numbers indicates a pair of rows/columns
|
||||||
|
*> involved in a Givens rotation.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGCOL is INTEGER
|
||||||
|
*> The leading dimension of GIVCOL, must be at least N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] GIVNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVNUM is DOUBLE PRECISION array, dimension ( LDGNUM, 2 )
|
||||||
|
*> Each number indicates the C or S value used in the
|
||||||
|
*> corresponding Givens rotation.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGNUM is INTEGER
|
||||||
|
*> The leading dimension of arrays DIFR, POLES and
|
||||||
|
*> GIVNUM, must be at least K.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] POLES
|
||||||
|
*> \verbatim
|
||||||
|
*> POLES is DOUBLE PRECISION array, dimension ( LDGNUM, 2 )
|
||||||
|
*> On entry, POLES(1:K, 1) contains the new singular
|
||||||
|
*> values obtained from solving the secular equation, and
|
||||||
|
*> POLES(1:K, 2) is an array containing the poles in the secular
|
||||||
|
*> equation.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DIFL
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFL is DOUBLE PRECISION array, dimension ( K ).
|
||||||
|
*> On entry, DIFL(I) is the distance between I-th updated
|
||||||
|
*> (undeflated) singular value and the I-th (undeflated) old
|
||||||
|
*> singular value.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DIFR
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFR is DOUBLE PRECISION array, dimension ( LDGNUM, 2 ).
|
||||||
|
*> On entry, DIFR(I, 1) contains the distances between I-th
|
||||||
|
*> updated (undeflated) singular value and the I+1-th
|
||||||
|
*> (undeflated) old singular value. And DIFR(I, 2) is the
|
||||||
|
*> normalizing factor for the I-th right singular vector.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> Contain the components of the deflation-adjusted updating row
|
||||||
|
*> vector.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] K
|
||||||
|
*> \verbatim
|
||||||
|
*> K is INTEGER
|
||||||
|
*> Contains the dimension of the non-deflated matrix,
|
||||||
|
*> This is the order of the related secular equation. 1 <= K <=N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION
|
||||||
|
*> C contains garbage if SQRE =0 and the C-value of a Givens
|
||||||
|
*> rotation related to the right null space if SQRE = 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] S
|
||||||
|
*> \verbatim
|
||||||
|
*> S is DOUBLE PRECISION
|
||||||
|
*> S contains garbage if SQRE =0 and the S-value of a Givens
|
||||||
|
*> rotation related to the right null space if SQRE = 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit.
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date December 2016
|
||||||
|
*
|
||||||
|
*> \ingroup doubleOTHERcomputational
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Ren-Cang Li, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA \n
|
||||||
|
*> Osni Marques, LBNL/NERSC, USA \n
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLALS0( ICOMPQ, NL, NR, SQRE, NRHS, B, LDB, BX, LDBX,
|
||||||
|
$ PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
|
||||||
|
$ POLES, DIFL, DIFR, Z, K, C, S, WORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* December 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER GIVPTR, ICOMPQ, INFO, K, LDB, LDBX, LDGCOL,
|
||||||
|
$ LDGNUM, NL, NR, NRHS, SQRE
|
||||||
|
DOUBLE PRECISION C, S
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER GIVCOL( LDGCOL, * ), PERM( * )
|
||||||
|
DOUBLE PRECISION B( LDB, * ), BX( LDBX, * ), DIFL( * ),
|
||||||
|
$ DIFR( LDGNUM, * ), GIVNUM( LDGNUM, * ),
|
||||||
|
$ POLES( LDGNUM, * ), WORK( * ), Z( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE, ZERO, NEGONE
|
||||||
|
PARAMETER ( ONE = 1.0D0, ZERO = 0.0D0, NEGONE = -1.0D0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I, J, M, N, NLP1
|
||||||
|
DOUBLE PRECISION DIFLJ, DIFRJ, DJ, DSIGJ, DSIGJP, TEMP
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DCOPY, DGEMV, DLACPY, DLASCL, DROT, DSCAL,
|
||||||
|
$ XERBLA
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
DOUBLE PRECISION DLAMC3, DNRM2
|
||||||
|
EXTERNAL DLAMC3, DNRM2
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
N = NL + NR + 1
|
||||||
|
*
|
||||||
|
IF( ( ICOMPQ.LT.0 ) .OR. ( ICOMPQ.GT.1 ) ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( NL.LT.1 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( NR.LT.1 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( ( SQRE.LT.0 ) .OR. ( SQRE.GT.1 ) ) THEN
|
||||||
|
INFO = -4
|
||||||
|
ELSE IF( NRHS.LT.1 ) THEN
|
||||||
|
INFO = -5
|
||||||
|
ELSE IF( LDB.LT.N ) THEN
|
||||||
|
INFO = -7
|
||||||
|
ELSE IF( LDBX.LT.N ) THEN
|
||||||
|
INFO = -9
|
||||||
|
ELSE IF( GIVPTR.LT.0 ) THEN
|
||||||
|
INFO = -11
|
||||||
|
ELSE IF( LDGCOL.LT.N ) THEN
|
||||||
|
INFO = -13
|
||||||
|
ELSE IF( LDGNUM.LT.N ) THEN
|
||||||
|
INFO = -15
|
||||||
|
ELSE IF( K.LT.1 ) THEN
|
||||||
|
INFO = -20
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLALS0', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
M = N + SQRE
|
||||||
|
NLP1 = NL + 1
|
||||||
|
*
|
||||||
|
IF( ICOMPQ.EQ.0 ) THEN
|
||||||
|
*
|
||||||
|
* Apply back orthogonal transformations from the left.
|
||||||
|
*
|
||||||
|
* Step (1L): apply back the Givens rotations performed.
|
||||||
|
*
|
||||||
|
DO 10 I = 1, GIVPTR
|
||||||
|
CALL DROT( NRHS, B( GIVCOL( I, 2 ), 1 ), LDB,
|
||||||
|
$ B( GIVCOL( I, 1 ), 1 ), LDB, GIVNUM( I, 2 ),
|
||||||
|
$ GIVNUM( I, 1 ) )
|
||||||
|
10 CONTINUE
|
||||||
|
*
|
||||||
|
* Step (2L): permute rows of B.
|
||||||
|
*
|
||||||
|
CALL DCOPY( NRHS, B( NLP1, 1 ), LDB, BX( 1, 1 ), LDBX )
|
||||||
|
DO 20 I = 2, N
|
||||||
|
CALL DCOPY( NRHS, B( PERM( I ), 1 ), LDB, BX( I, 1 ), LDBX )
|
||||||
|
20 CONTINUE
|
||||||
|
*
|
||||||
|
* Step (3L): apply the inverse of the left singular vector
|
||||||
|
* matrix to BX.
|
||||||
|
*
|
||||||
|
IF( K.EQ.1 ) THEN
|
||||||
|
CALL DCOPY( NRHS, BX, LDBX, B, LDB )
|
||||||
|
IF( Z( 1 ).LT.ZERO ) THEN
|
||||||
|
CALL DSCAL( NRHS, NEGONE, B, LDB )
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
DO 50 J = 1, K
|
||||||
|
DIFLJ = DIFL( J )
|
||||||
|
DJ = POLES( J, 1 )
|
||||||
|
DSIGJ = -POLES( J, 2 )
|
||||||
|
IF( J.LT.K ) THEN
|
||||||
|
DIFRJ = -DIFR( J, 1 )
|
||||||
|
DSIGJP = -POLES( J+1, 2 )
|
||||||
|
END IF
|
||||||
|
IF( ( Z( J ).EQ.ZERO ) .OR. ( POLES( J, 2 ).EQ.ZERO ) )
|
||||||
|
$ THEN
|
||||||
|
WORK( J ) = ZERO
|
||||||
|
ELSE
|
||||||
|
WORK( J ) = -POLES( J, 2 )*Z( J ) / DIFLJ /
|
||||||
|
$ ( POLES( J, 2 )+DJ )
|
||||||
|
END IF
|
||||||
|
DO 30 I = 1, J - 1
|
||||||
|
IF( ( Z( I ).EQ.ZERO ) .OR.
|
||||||
|
$ ( POLES( I, 2 ).EQ.ZERO ) ) THEN
|
||||||
|
WORK( I ) = ZERO
|
||||||
|
ELSE
|
||||||
|
WORK( I ) = POLES( I, 2 )*Z( I ) /
|
||||||
|
$ ( DLAMC3( POLES( I, 2 ), DSIGJ )-
|
||||||
|
$ DIFLJ ) / ( POLES( I, 2 )+DJ )
|
||||||
|
END IF
|
||||||
|
30 CONTINUE
|
||||||
|
DO 40 I = J + 1, K
|
||||||
|
IF( ( Z( I ).EQ.ZERO ) .OR.
|
||||||
|
$ ( POLES( I, 2 ).EQ.ZERO ) ) THEN
|
||||||
|
WORK( I ) = ZERO
|
||||||
|
ELSE
|
||||||
|
WORK( I ) = POLES( I, 2 )*Z( I ) /
|
||||||
|
$ ( DLAMC3( POLES( I, 2 ), DSIGJP )+
|
||||||
|
$ DIFRJ ) / ( POLES( I, 2 )+DJ )
|
||||||
|
END IF
|
||||||
|
40 CONTINUE
|
||||||
|
WORK( 1 ) = NEGONE
|
||||||
|
TEMP = DNRM2( K, WORK, 1 )
|
||||||
|
CALL DGEMV( 'T', K, NRHS, ONE, BX, LDBX, WORK, 1, ZERO,
|
||||||
|
$ B( J, 1 ), LDB )
|
||||||
|
CALL DLASCL( 'G', 0, 0, TEMP, ONE, 1, NRHS, B( J, 1 ),
|
||||||
|
$ LDB, INFO )
|
||||||
|
50 CONTINUE
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Move the deflated rows of BX to B also.
|
||||||
|
*
|
||||||
|
IF( K.LT.MAX( M, N ) )
|
||||||
|
$ CALL DLACPY( 'A', N-K, NRHS, BX( K+1, 1 ), LDBX,
|
||||||
|
$ B( K+1, 1 ), LDB )
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Apply back the right orthogonal transformations.
|
||||||
|
*
|
||||||
|
* Step (1R): apply back the new right singular vector matrix
|
||||||
|
* to B.
|
||||||
|
*
|
||||||
|
IF( K.EQ.1 ) THEN
|
||||||
|
CALL DCOPY( NRHS, B, LDB, BX, LDBX )
|
||||||
|
ELSE
|
||||||
|
DO 80 J = 1, K
|
||||||
|
DSIGJ = POLES( J, 2 )
|
||||||
|
IF( Z( J ).EQ.ZERO ) THEN
|
||||||
|
WORK( J ) = ZERO
|
||||||
|
ELSE
|
||||||
|
WORK( J ) = -Z( J ) / DIFL( J ) /
|
||||||
|
$ ( DSIGJ+POLES( J, 1 ) ) / DIFR( J, 2 )
|
||||||
|
END IF
|
||||||
|
DO 60 I = 1, J - 1
|
||||||
|
IF( Z( J ).EQ.ZERO ) THEN
|
||||||
|
WORK( I ) = ZERO
|
||||||
|
ELSE
|
||||||
|
WORK( I ) = Z( J ) / ( DLAMC3( DSIGJ, -POLES( I+1,
|
||||||
|
$ 2 ) )-DIFR( I, 1 ) ) /
|
||||||
|
$ ( DSIGJ+POLES( I, 1 ) ) / DIFR( I, 2 )
|
||||||
|
END IF
|
||||||
|
60 CONTINUE
|
||||||
|
DO 70 I = J + 1, K
|
||||||
|
IF( Z( J ).EQ.ZERO ) THEN
|
||||||
|
WORK( I ) = ZERO
|
||||||
|
ELSE
|
||||||
|
WORK( I ) = Z( J ) / ( DLAMC3( DSIGJ, -POLES( I,
|
||||||
|
$ 2 ) )-DIFL( I ) ) /
|
||||||
|
$ ( DSIGJ+POLES( I, 1 ) ) / DIFR( I, 2 )
|
||||||
|
END IF
|
||||||
|
70 CONTINUE
|
||||||
|
CALL DGEMV( 'T', K, NRHS, ONE, B, LDB, WORK, 1, ZERO,
|
||||||
|
$ BX( J, 1 ), LDBX )
|
||||||
|
80 CONTINUE
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Step (2R): if SQRE = 1, apply back the rotation that is
|
||||||
|
* related to the right null space of the subproblem.
|
||||||
|
*
|
||||||
|
IF( SQRE.EQ.1 ) THEN
|
||||||
|
CALL DCOPY( NRHS, B( M, 1 ), LDB, BX( M, 1 ), LDBX )
|
||||||
|
CALL DROT( NRHS, BX( 1, 1 ), LDBX, BX( M, 1 ), LDBX, C, S )
|
||||||
|
END IF
|
||||||
|
IF( K.LT.MAX( M, N ) )
|
||||||
|
$ CALL DLACPY( 'A', N-K, NRHS, B( K+1, 1 ), LDB, BX( K+1, 1 ),
|
||||||
|
$ LDBX )
|
||||||
|
*
|
||||||
|
* Step (3R): permute rows of B.
|
||||||
|
*
|
||||||
|
CALL DCOPY( NRHS, BX( 1, 1 ), LDBX, B( NLP1, 1 ), LDB )
|
||||||
|
IF( SQRE.EQ.1 ) THEN
|
||||||
|
CALL DCOPY( NRHS, BX( M, 1 ), LDBX, B( M, 1 ), LDB )
|
||||||
|
END IF
|
||||||
|
DO 90 I = 2, N
|
||||||
|
CALL DCOPY( NRHS, BX( I, 1 ), LDBX, B( PERM( I ), 1 ), LDB )
|
||||||
|
90 CONTINUE
|
||||||
|
*
|
||||||
|
* Step (4R): apply back the Givens rotations performed.
|
||||||
|
*
|
||||||
|
DO 100 I = GIVPTR, 1, -1
|
||||||
|
CALL DROT( NRHS, B( GIVCOL( I, 2 ), 1 ), LDB,
|
||||||
|
$ B( GIVCOL( I, 1 ), 1 ), LDB, GIVNUM( I, 2 ),
|
||||||
|
$ -GIVNUM( I, 1 ) )
|
||||||
|
100 CONTINUE
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLALS0
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,493 @@
|
||||||
|
*> \brief \b DLALSA computes the SVD of the coefficient matrix in compact form. Used by sgelsd.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLALSA + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlalsa.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlalsa.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlalsa.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLALSA( ICOMPQ, SMLSIZ, N, NRHS, B, LDB, BX, LDBX, U,
|
||||||
|
* LDU, VT, K, DIFL, DIFR, Z, POLES, GIVPTR,
|
||||||
|
* GIVCOL, LDGCOL, PERM, GIVNUM, C, S, WORK,
|
||||||
|
* IWORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER ICOMPQ, INFO, LDB, LDBX, LDGCOL, LDU, N, NRHS,
|
||||||
|
* $ SMLSIZ
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER GIVCOL( LDGCOL, * ), GIVPTR( * ), IWORK( * ),
|
||||||
|
* $ K( * ), PERM( LDGCOL, * )
|
||||||
|
* DOUBLE PRECISION B( LDB, * ), BX( LDBX, * ), C( * ),
|
||||||
|
* $ DIFL( LDU, * ), DIFR( LDU, * ),
|
||||||
|
* $ GIVNUM( LDU, * ), POLES( LDU, * ), S( * ),
|
||||||
|
* $ U( LDU, * ), VT( LDU, * ), WORK( * ),
|
||||||
|
* $ Z( LDU, * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLALSA is an itermediate step in solving the least squares problem
|
||||||
|
*> by computing the SVD of the coefficient matrix in compact form (The
|
||||||
|
*> singular vectors are computed as products of simple orthorgonal
|
||||||
|
*> matrices.).
|
||||||
|
*>
|
||||||
|
*> If ICOMPQ = 0, DLALSA applies the inverse of the left singular vector
|
||||||
|
*> matrix of an upper bidiagonal matrix to the right hand side; and if
|
||||||
|
*> ICOMPQ = 1, DLALSA applies the right singular vector matrix to the
|
||||||
|
*> right hand side. The singular vector matrices were generated in
|
||||||
|
*> compact form by DLALSA.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] ICOMPQ
|
||||||
|
*> \verbatim
|
||||||
|
*> ICOMPQ is INTEGER
|
||||||
|
*> Specifies whether the left or the right singular vector
|
||||||
|
*> matrix is involved.
|
||||||
|
*> = 0: Left singular vector matrix
|
||||||
|
*> = 1: Right singular vector matrix
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SMLSIZ
|
||||||
|
*> \verbatim
|
||||||
|
*> SMLSIZ is INTEGER
|
||||||
|
*> The maximum size of the subproblems at the bottom of the
|
||||||
|
*> computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> The row and column dimensions of the upper bidiagonal matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NRHS
|
||||||
|
*> \verbatim
|
||||||
|
*> NRHS is INTEGER
|
||||||
|
*> The number of columns of B and BX. NRHS must be at least 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] B
|
||||||
|
*> \verbatim
|
||||||
|
*> B is DOUBLE PRECISION array, dimension ( LDB, NRHS )
|
||||||
|
*> On input, B contains the right hand sides of the least
|
||||||
|
*> squares problem in rows 1 through M.
|
||||||
|
*> On output, B contains the solution X in rows 1 through N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDB
|
||||||
|
*> \verbatim
|
||||||
|
*> LDB is INTEGER
|
||||||
|
*> The leading dimension of B in the calling subprogram.
|
||||||
|
*> LDB must be at least max(1,MAX( M, N ) ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] BX
|
||||||
|
*> \verbatim
|
||||||
|
*> BX is DOUBLE PRECISION array, dimension ( LDBX, NRHS )
|
||||||
|
*> On exit, the result of applying the left or right singular
|
||||||
|
*> vector matrix to B.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDBX
|
||||||
|
*> \verbatim
|
||||||
|
*> LDBX is INTEGER
|
||||||
|
*> The leading dimension of BX.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] U
|
||||||
|
*> \verbatim
|
||||||
|
*> U is DOUBLE PRECISION array, dimension ( LDU, SMLSIZ ).
|
||||||
|
*> On entry, U contains the left singular vector matrices of all
|
||||||
|
*> subproblems at the bottom level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDU
|
||||||
|
*> \verbatim
|
||||||
|
*> LDU is INTEGER, LDU = > N.
|
||||||
|
*> The leading dimension of arrays U, VT, DIFL, DIFR,
|
||||||
|
*> POLES, GIVNUM, and Z.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] VT
|
||||||
|
*> \verbatim
|
||||||
|
*> VT is DOUBLE PRECISION array, dimension ( LDU, SMLSIZ+1 ).
|
||||||
|
*> On entry, VT**T contains the right singular vector matrices of
|
||||||
|
*> all subproblems at the bottom level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] K
|
||||||
|
*> \verbatim
|
||||||
|
*> K is INTEGER array, dimension ( N ).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DIFL
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFL is DOUBLE PRECISION array, dimension ( LDU, NLVL ).
|
||||||
|
*> where NLVL = INT(log_2 (N/(SMLSIZ+1))) + 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] DIFR
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFR is DOUBLE PRECISION array, dimension ( LDU, 2 * NLVL ).
|
||||||
|
*> On entry, DIFL(*, I) and DIFR(*, 2 * I -1) record
|
||||||
|
*> distances between singular values on the I-th level and
|
||||||
|
*> singular values on the (I -1)-th level, and DIFR(*, 2 * I)
|
||||||
|
*> record the normalizing factors of the right singular vectors
|
||||||
|
*> matrices of subproblems on I-th level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is DOUBLE PRECISION array, dimension ( LDU, NLVL ).
|
||||||
|
*> On entry, Z(1, I) contains the components of the deflation-
|
||||||
|
*> adjusted updating row vector for subproblems on the I-th
|
||||||
|
*> level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] POLES
|
||||||
|
*> \verbatim
|
||||||
|
*> POLES is DOUBLE PRECISION array, dimension ( LDU, 2 * NLVL ).
|
||||||
|
*> On entry, POLES(*, 2 * I -1: 2 * I) contains the new and old
|
||||||
|
*> singular values involved in the secular equations on the I-th
|
||||||
|
*> level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] GIVPTR
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVPTR is INTEGER array, dimension ( N ).
|
||||||
|
*> On entry, GIVPTR( I ) records the number of Givens
|
||||||
|
*> rotations performed on the I-th problem on the computation
|
||||||
|
*> tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] GIVCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVCOL is INTEGER array, dimension ( LDGCOL, 2 * NLVL ).
|
||||||
|
*> On entry, for each I, GIVCOL(*, 2 * I - 1: 2 * I) records the
|
||||||
|
*> locations of Givens rotations performed on the I-th level on
|
||||||
|
*> the computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGCOL is INTEGER, LDGCOL = > N.
|
||||||
|
*> The leading dimension of arrays GIVCOL and PERM.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] PERM
|
||||||
|
*> \verbatim
|
||||||
|
*> PERM is INTEGER array, dimension ( LDGCOL, NLVL ).
|
||||||
|
*> On entry, PERM(*, I) records permutations done on the I-th
|
||||||
|
*> level of the computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] GIVNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVNUM is DOUBLE PRECISION array, dimension ( LDU, 2 * NLVL ).
|
||||||
|
*> On entry, GIVNUM(*, 2 *I -1 : 2 * I) records the C- and S-
|
||||||
|
*> values of Givens rotations performed on the I-th level on the
|
||||||
|
*> computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION array, dimension ( N ).
|
||||||
|
*> On entry, if the I-th subproblem is not square,
|
||||||
|
*> C( I ) contains the C-value of a Givens rotation related to
|
||||||
|
*> the right null space of the I-th subproblem.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] S
|
||||||
|
*> \verbatim
|
||||||
|
*> S is DOUBLE PRECISION array, dimension ( N ).
|
||||||
|
*> On entry, if the I-th subproblem is not square,
|
||||||
|
*> S( I ) contains the S-value of a Givens rotation related to
|
||||||
|
*> the right null space of the I-th subproblem.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension (N)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IWORK
|
||||||
|
*> \verbatim
|
||||||
|
*> IWORK is INTEGER array, dimension (3*N)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit.
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date June 2017
|
||||||
|
*
|
||||||
|
*> \ingroup doubleOTHERcomputational
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Ren-Cang Li, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA \n
|
||||||
|
*> Osni Marques, LBNL/NERSC, USA \n
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLALSA( ICOMPQ, SMLSIZ, N, NRHS, B, LDB, BX, LDBX, U,
|
||||||
|
$ LDU, VT, K, DIFL, DIFR, Z, POLES, GIVPTR,
|
||||||
|
$ GIVCOL, LDGCOL, PERM, GIVNUM, C, S, WORK,
|
||||||
|
$ IWORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK computational routine (version 3.7.1) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* June 2017
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER ICOMPQ, INFO, LDB, LDBX, LDGCOL, LDU, N, NRHS,
|
||||||
|
$ SMLSIZ
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER GIVCOL( LDGCOL, * ), GIVPTR( * ), IWORK( * ),
|
||||||
|
$ K( * ), PERM( LDGCOL, * )
|
||||||
|
DOUBLE PRECISION B( LDB, * ), BX( LDBX, * ), C( * ),
|
||||||
|
$ DIFL( LDU, * ), DIFR( LDU, * ),
|
||||||
|
$ GIVNUM( LDU, * ), POLES( LDU, * ), S( * ),
|
||||||
|
$ U( LDU, * ), VT( LDU, * ), WORK( * ),
|
||||||
|
$ Z( LDU, * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO, ONE
|
||||||
|
PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I, I1, IC, IM1, INODE, J, LF, LL, LVL, LVL2,
|
||||||
|
$ ND, NDB1, NDIML, NDIMR, NL, NLF, NLP1, NLVL,
|
||||||
|
$ NR, NRF, NRP1, SQRE
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DCOPY, DGEMM, DLALS0, DLASDT, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
*
|
||||||
|
IF( ( ICOMPQ.LT.0 ) .OR. ( ICOMPQ.GT.1 ) ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( SMLSIZ.LT.3 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( N.LT.SMLSIZ ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( NRHS.LT.1 ) THEN
|
||||||
|
INFO = -4
|
||||||
|
ELSE IF( LDB.LT.N ) THEN
|
||||||
|
INFO = -6
|
||||||
|
ELSE IF( LDBX.LT.N ) THEN
|
||||||
|
INFO = -8
|
||||||
|
ELSE IF( LDU.LT.N ) THEN
|
||||||
|
INFO = -10
|
||||||
|
ELSE IF( LDGCOL.LT.N ) THEN
|
||||||
|
INFO = -19
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLALSA', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Book-keeping and setting up the computation tree.
|
||||||
|
*
|
||||||
|
INODE = 1
|
||||||
|
NDIML = INODE + N
|
||||||
|
NDIMR = NDIML + N
|
||||||
|
*
|
||||||
|
CALL DLASDT( N, NLVL, ND, IWORK( INODE ), IWORK( NDIML ),
|
||||||
|
$ IWORK( NDIMR ), SMLSIZ )
|
||||||
|
*
|
||||||
|
* The following code applies back the left singular vector factors.
|
||||||
|
* For applying back the right singular vector factors, go to 50.
|
||||||
|
*
|
||||||
|
IF( ICOMPQ.EQ.1 ) THEN
|
||||||
|
GO TO 50
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* The nodes on the bottom level of the tree were solved
|
||||||
|
* by DLASDQ. The corresponding left and right singular vector
|
||||||
|
* matrices are in explicit form. First apply back the left
|
||||||
|
* singular vector matrices.
|
||||||
|
*
|
||||||
|
NDB1 = ( ND+1 ) / 2
|
||||||
|
DO 10 I = NDB1, ND
|
||||||
|
*
|
||||||
|
* IC : center row of each node
|
||||||
|
* NL : number of rows of left subproblem
|
||||||
|
* NR : number of rows of right subproblem
|
||||||
|
* NLF: starting row of the left subproblem
|
||||||
|
* NRF: starting row of the right subproblem
|
||||||
|
*
|
||||||
|
I1 = I - 1
|
||||||
|
IC = IWORK( INODE+I1 )
|
||||||
|
NL = IWORK( NDIML+I1 )
|
||||||
|
NR = IWORK( NDIMR+I1 )
|
||||||
|
NLF = IC - NL
|
||||||
|
NRF = IC + 1
|
||||||
|
CALL DGEMM( 'T', 'N', NL, NRHS, NL, ONE, U( NLF, 1 ), LDU,
|
||||||
|
$ B( NLF, 1 ), LDB, ZERO, BX( NLF, 1 ), LDBX )
|
||||||
|
CALL DGEMM( 'T', 'N', NR, NRHS, NR, ONE, U( NRF, 1 ), LDU,
|
||||||
|
$ B( NRF, 1 ), LDB, ZERO, BX( NRF, 1 ), LDBX )
|
||||||
|
10 CONTINUE
|
||||||
|
*
|
||||||
|
* Next copy the rows of B that correspond to unchanged rows
|
||||||
|
* in the bidiagonal matrix to BX.
|
||||||
|
*
|
||||||
|
DO 20 I = 1, ND
|
||||||
|
IC = IWORK( INODE+I-1 )
|
||||||
|
CALL DCOPY( NRHS, B( IC, 1 ), LDB, BX( IC, 1 ), LDBX )
|
||||||
|
20 CONTINUE
|
||||||
|
*
|
||||||
|
* Finally go through the left singular vector matrices of all
|
||||||
|
* the other subproblems bottom-up on the tree.
|
||||||
|
*
|
||||||
|
J = 2**NLVL
|
||||||
|
SQRE = 0
|
||||||
|
*
|
||||||
|
DO 40 LVL = NLVL, 1, -1
|
||||||
|
LVL2 = 2*LVL - 1
|
||||||
|
*
|
||||||
|
* find the first node LF and last node LL on
|
||||||
|
* the current level LVL
|
||||||
|
*
|
||||||
|
IF( LVL.EQ.1 ) THEN
|
||||||
|
LF = 1
|
||||||
|
LL = 1
|
||||||
|
ELSE
|
||||||
|
LF = 2**( LVL-1 )
|
||||||
|
LL = 2*LF - 1
|
||||||
|
END IF
|
||||||
|
DO 30 I = LF, LL
|
||||||
|
IM1 = I - 1
|
||||||
|
IC = IWORK( INODE+IM1 )
|
||||||
|
NL = IWORK( NDIML+IM1 )
|
||||||
|
NR = IWORK( NDIMR+IM1 )
|
||||||
|
NLF = IC - NL
|
||||||
|
NRF = IC + 1
|
||||||
|
J = J - 1
|
||||||
|
CALL DLALS0( ICOMPQ, NL, NR, SQRE, NRHS, BX( NLF, 1 ), LDBX,
|
||||||
|
$ B( NLF, 1 ), LDB, PERM( NLF, LVL ),
|
||||||
|
$ GIVPTR( J ), GIVCOL( NLF, LVL2 ), LDGCOL,
|
||||||
|
$ GIVNUM( NLF, LVL2 ), LDU, POLES( NLF, LVL2 ),
|
||||||
|
$ DIFL( NLF, LVL ), DIFR( NLF, LVL2 ),
|
||||||
|
$ Z( NLF, LVL ), K( J ), C( J ), S( J ), WORK,
|
||||||
|
$ INFO )
|
||||||
|
30 CONTINUE
|
||||||
|
40 CONTINUE
|
||||||
|
GO TO 90
|
||||||
|
*
|
||||||
|
* ICOMPQ = 1: applying back the right singular vector factors.
|
||||||
|
*
|
||||||
|
50 CONTINUE
|
||||||
|
*
|
||||||
|
* First now go through the right singular vector matrices of all
|
||||||
|
* the tree nodes top-down.
|
||||||
|
*
|
||||||
|
J = 0
|
||||||
|
DO 70 LVL = 1, NLVL
|
||||||
|
LVL2 = 2*LVL - 1
|
||||||
|
*
|
||||||
|
* Find the first node LF and last node LL on
|
||||||
|
* the current level LVL.
|
||||||
|
*
|
||||||
|
IF( LVL.EQ.1 ) THEN
|
||||||
|
LF = 1
|
||||||
|
LL = 1
|
||||||
|
ELSE
|
||||||
|
LF = 2**( LVL-1 )
|
||||||
|
LL = 2*LF - 1
|
||||||
|
END IF
|
||||||
|
DO 60 I = LL, LF, -1
|
||||||
|
IM1 = I - 1
|
||||||
|
IC = IWORK( INODE+IM1 )
|
||||||
|
NL = IWORK( NDIML+IM1 )
|
||||||
|
NR = IWORK( NDIMR+IM1 )
|
||||||
|
NLF = IC - NL
|
||||||
|
NRF = IC + 1
|
||||||
|
IF( I.EQ.LL ) THEN
|
||||||
|
SQRE = 0
|
||||||
|
ELSE
|
||||||
|
SQRE = 1
|
||||||
|
END IF
|
||||||
|
J = J + 1
|
||||||
|
CALL DLALS0( ICOMPQ, NL, NR, SQRE, NRHS, B( NLF, 1 ), LDB,
|
||||||
|
$ BX( NLF, 1 ), LDBX, PERM( NLF, LVL ),
|
||||||
|
$ GIVPTR( J ), GIVCOL( NLF, LVL2 ), LDGCOL,
|
||||||
|
$ GIVNUM( NLF, LVL2 ), LDU, POLES( NLF, LVL2 ),
|
||||||
|
$ DIFL( NLF, LVL ), DIFR( NLF, LVL2 ),
|
||||||
|
$ Z( NLF, LVL ), K( J ), C( J ), S( J ), WORK,
|
||||||
|
$ INFO )
|
||||||
|
60 CONTINUE
|
||||||
|
70 CONTINUE
|
||||||
|
*
|
||||||
|
* The nodes on the bottom level of the tree were solved
|
||||||
|
* by DLASDQ. The corresponding right singular vector
|
||||||
|
* matrices are in explicit form. Apply them back.
|
||||||
|
*
|
||||||
|
NDB1 = ( ND+1 ) / 2
|
||||||
|
DO 80 I = NDB1, ND
|
||||||
|
I1 = I - 1
|
||||||
|
IC = IWORK( INODE+I1 )
|
||||||
|
NL = IWORK( NDIML+I1 )
|
||||||
|
NR = IWORK( NDIMR+I1 )
|
||||||
|
NLP1 = NL + 1
|
||||||
|
IF( I.EQ.ND ) THEN
|
||||||
|
NRP1 = NR
|
||||||
|
ELSE
|
||||||
|
NRP1 = NR + 1
|
||||||
|
END IF
|
||||||
|
NLF = IC - NL
|
||||||
|
NRF = IC + 1
|
||||||
|
CALL DGEMM( 'T', 'N', NLP1, NRHS, NLP1, ONE, VT( NLF, 1 ), LDU,
|
||||||
|
$ B( NLF, 1 ), LDB, ZERO, BX( NLF, 1 ), LDBX )
|
||||||
|
CALL DGEMM( 'T', 'N', NRP1, NRHS, NRP1, ONE, VT( NRF, 1 ), LDU,
|
||||||
|
$ B( NRF, 1 ), LDB, ZERO, BX( NRF, 1 ), LDBX )
|
||||||
|
80 CONTINUE
|
||||||
|
*
|
||||||
|
90 CONTINUE
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLALSA
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,523 @@
|
||||||
|
*> \brief \b DLALSD uses the singular value decomposition of A to solve the least squares problem.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLALSD + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlalsd.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlalsd.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlalsd.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLALSD( UPLO, SMLSIZ, N, NRHS, D, E, B, LDB, RCOND,
|
||||||
|
* RANK, WORK, IWORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* CHARACTER UPLO
|
||||||
|
* INTEGER INFO, LDB, N, NRHS, RANK, SMLSIZ
|
||||||
|
* DOUBLE PRECISION RCOND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER IWORK( * )
|
||||||
|
* DOUBLE PRECISION B( LDB, * ), D( * ), E( * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLALSD uses the singular value decomposition of A to solve the least
|
||||||
|
*> squares problem of finding X to minimize the Euclidean norm of each
|
||||||
|
*> column of A*X-B, where A is N-by-N upper bidiagonal, and X and B
|
||||||
|
*> are N-by-NRHS. The solution X overwrites B.
|
||||||
|
*>
|
||||||
|
*> The singular values of A smaller than RCOND times the largest
|
||||||
|
*> singular value are treated as zero in solving the least squares
|
||||||
|
*> problem; in this case a minimum norm solution is returned.
|
||||||
|
*> The actual singular values are returned in D in ascending order.
|
||||||
|
*>
|
||||||
|
*> This code makes very mild assumptions about floating point
|
||||||
|
*> arithmetic. It will work on machines with a guard digit in
|
||||||
|
*> add/subtract, or on those binary machines without guard digits
|
||||||
|
*> which subtract like the Cray XMP, Cray YMP, Cray C 90, or Cray 2.
|
||||||
|
*> It could conceivably fail on hexadecimal or decimal machines
|
||||||
|
*> without guard digits, but we know of none.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] UPLO
|
||||||
|
*> \verbatim
|
||||||
|
*> UPLO is CHARACTER*1
|
||||||
|
*> = 'U': D and E define an upper bidiagonal matrix.
|
||||||
|
*> = 'L': D and E define a lower bidiagonal matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SMLSIZ
|
||||||
|
*> \verbatim
|
||||||
|
*> SMLSIZ is INTEGER
|
||||||
|
*> The maximum size of the subproblems at the bottom of the
|
||||||
|
*> computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> The dimension of the bidiagonal matrix. N >= 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NRHS
|
||||||
|
*> \verbatim
|
||||||
|
*> NRHS is INTEGER
|
||||||
|
*> The number of columns of B. NRHS must be at least 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] D
|
||||||
|
*> \verbatim
|
||||||
|
*> D is DOUBLE PRECISION array, dimension (N)
|
||||||
|
*> On entry D contains the main diagonal of the bidiagonal
|
||||||
|
*> matrix. On exit, if INFO = 0, D contains its singular values.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] E
|
||||||
|
*> \verbatim
|
||||||
|
*> E is DOUBLE PRECISION array, dimension (N-1)
|
||||||
|
*> Contains the super-diagonal entries of the bidiagonal matrix.
|
||||||
|
*> On exit, E has been destroyed.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] B
|
||||||
|
*> \verbatim
|
||||||
|
*> B is DOUBLE PRECISION array, dimension (LDB,NRHS)
|
||||||
|
*> On input, B contains the right hand sides of the least
|
||||||
|
*> squares problem. On output, B contains the solution X.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDB
|
||||||
|
*> \verbatim
|
||||||
|
*> LDB is INTEGER
|
||||||
|
*> The leading dimension of B in the calling subprogram.
|
||||||
|
*> LDB must be at least max(1,N).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] RCOND
|
||||||
|
*> \verbatim
|
||||||
|
*> RCOND is DOUBLE PRECISION
|
||||||
|
*> The singular values of A less than or equal to RCOND times
|
||||||
|
*> the largest singular value are treated as zero in solving
|
||||||
|
*> the least squares problem. If RCOND is negative,
|
||||||
|
*> machine precision is used instead.
|
||||||
|
*> For example, if diag(S)*X=B were the least squares problem,
|
||||||
|
*> where diag(S) is a diagonal matrix of singular values, the
|
||||||
|
*> solution would be X(i) = B(i) / S(i) if S(i) is greater than
|
||||||
|
*> RCOND*max(S), and X(i) = 0 if S(i) is less than or equal to
|
||||||
|
*> RCOND*max(S).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] RANK
|
||||||
|
*> \verbatim
|
||||||
|
*> RANK is INTEGER
|
||||||
|
*> The number of singular values of A greater than RCOND times
|
||||||
|
*> the largest singular value.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension at least
|
||||||
|
*> (9*N + 2*N*SMLSIZ + 8*N*NLVL + N*NRHS + (SMLSIZ+1)**2),
|
||||||
|
*> where NLVL = max(0, INT(log_2 (N/(SMLSIZ+1))) + 1).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IWORK
|
||||||
|
*> \verbatim
|
||||||
|
*> IWORK is INTEGER array, dimension at least
|
||||||
|
*> (3*N*NLVL + 11*N)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit.
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> > 0: The algorithm failed to compute a singular value while
|
||||||
|
*> working on the submatrix lying in rows and columns
|
||||||
|
*> INFO/(N+1) through MOD(INFO,N+1).
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date December 2016
|
||||||
|
*
|
||||||
|
*> \ingroup doubleOTHERcomputational
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Ren-Cang Li, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA \n
|
||||||
|
*> Osni Marques, LBNL/NERSC, USA \n
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLALSD( UPLO, SMLSIZ, N, NRHS, D, E, B, LDB, RCOND,
|
||||||
|
$ RANK, WORK, IWORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* December 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
CHARACTER UPLO
|
||||||
|
INTEGER INFO, LDB, N, NRHS, RANK, SMLSIZ
|
||||||
|
DOUBLE PRECISION RCOND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER IWORK( * )
|
||||||
|
DOUBLE PRECISION B( LDB, * ), D( * ), E( * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO, ONE, TWO
|
||||||
|
PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER BX, BXST, C, DIFL, DIFR, GIVCOL, GIVNUM,
|
||||||
|
$ GIVPTR, I, ICMPQ1, ICMPQ2, IWK, J, K, NLVL,
|
||||||
|
$ NM1, NSIZE, NSUB, NWORK, PERM, POLES, S, SIZEI,
|
||||||
|
$ SMLSZP, SQRE, ST, ST1, U, VT, Z
|
||||||
|
DOUBLE PRECISION CS, EPS, ORGNRM, R, RCND, SN, TOL
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
INTEGER IDAMAX
|
||||||
|
DOUBLE PRECISION DLAMCH, DLANST
|
||||||
|
EXTERNAL IDAMAX, DLAMCH, DLANST
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DCOPY, DGEMM, DLACPY, DLALSA, DLARTG, DLASCL,
|
||||||
|
$ DLASDA, DLASDQ, DLASET, DLASRT, DROT, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC ABS, DBLE, INT, LOG, SIGN
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
*
|
||||||
|
IF( N.LT.0 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( NRHS.LT.1 ) THEN
|
||||||
|
INFO = -4
|
||||||
|
ELSE IF( ( LDB.LT.1 ) .OR. ( LDB.LT.N ) ) THEN
|
||||||
|
INFO = -8
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLALSD', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
EPS = DLAMCH( 'Epsilon' )
|
||||||
|
*
|
||||||
|
* Set up the tolerance.
|
||||||
|
*
|
||||||
|
IF( ( RCOND.LE.ZERO ) .OR. ( RCOND.GE.ONE ) ) THEN
|
||||||
|
RCND = EPS
|
||||||
|
ELSE
|
||||||
|
RCND = RCOND
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
RANK = 0
|
||||||
|
*
|
||||||
|
* Quick return if possible.
|
||||||
|
*
|
||||||
|
IF( N.EQ.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
ELSE IF( N.EQ.1 ) THEN
|
||||||
|
IF( D( 1 ).EQ.ZERO ) THEN
|
||||||
|
CALL DLASET( 'A', 1, NRHS, ZERO, ZERO, B, LDB )
|
||||||
|
ELSE
|
||||||
|
RANK = 1
|
||||||
|
CALL DLASCL( 'G', 0, 0, D( 1 ), ONE, 1, NRHS, B, LDB, INFO )
|
||||||
|
D( 1 ) = ABS( D( 1 ) )
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Rotate the matrix if it is lower bidiagonal.
|
||||||
|
*
|
||||||
|
IF( UPLO.EQ.'L' ) THEN
|
||||||
|
DO 10 I = 1, N - 1
|
||||||
|
CALL DLARTG( D( I ), E( I ), CS, SN, R )
|
||||||
|
D( I ) = R
|
||||||
|
E( I ) = SN*D( I+1 )
|
||||||
|
D( I+1 ) = CS*D( I+1 )
|
||||||
|
IF( NRHS.EQ.1 ) THEN
|
||||||
|
CALL DROT( 1, B( I, 1 ), 1, B( I+1, 1 ), 1, CS, SN )
|
||||||
|
ELSE
|
||||||
|
WORK( I*2-1 ) = CS
|
||||||
|
WORK( I*2 ) = SN
|
||||||
|
END IF
|
||||||
|
10 CONTINUE
|
||||||
|
IF( NRHS.GT.1 ) THEN
|
||||||
|
DO 30 I = 1, NRHS
|
||||||
|
DO 20 J = 1, N - 1
|
||||||
|
CS = WORK( J*2-1 )
|
||||||
|
SN = WORK( J*2 )
|
||||||
|
CALL DROT( 1, B( J, I ), 1, B( J+1, I ), 1, CS, SN )
|
||||||
|
20 CONTINUE
|
||||||
|
30 CONTINUE
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Scale.
|
||||||
|
*
|
||||||
|
NM1 = N - 1
|
||||||
|
ORGNRM = DLANST( 'M', N, D, E )
|
||||||
|
IF( ORGNRM.EQ.ZERO ) THEN
|
||||||
|
CALL DLASET( 'A', N, NRHS, ZERO, ZERO, B, LDB )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ORGNRM, ONE, N, 1, D, N, INFO )
|
||||||
|
CALL DLASCL( 'G', 0, 0, ORGNRM, ONE, NM1, 1, E, NM1, INFO )
|
||||||
|
*
|
||||||
|
* If N is smaller than the minimum divide size SMLSIZ, then solve
|
||||||
|
* the problem with another solver.
|
||||||
|
*
|
||||||
|
IF( N.LE.SMLSIZ ) THEN
|
||||||
|
NWORK = 1 + N*N
|
||||||
|
CALL DLASET( 'A', N, N, ZERO, ONE, WORK, N )
|
||||||
|
CALL DLASDQ( 'U', 0, N, N, 0, NRHS, D, E, WORK, N, WORK, N, B,
|
||||||
|
$ LDB, WORK( NWORK ), INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
TOL = RCND*ABS( D( IDAMAX( N, D, 1 ) ) )
|
||||||
|
DO 40 I = 1, N
|
||||||
|
IF( D( I ).LE.TOL ) THEN
|
||||||
|
CALL DLASET( 'A', 1, NRHS, ZERO, ZERO, B( I, 1 ), LDB )
|
||||||
|
ELSE
|
||||||
|
CALL DLASCL( 'G', 0, 0, D( I ), ONE, 1, NRHS, B( I, 1 ),
|
||||||
|
$ LDB, INFO )
|
||||||
|
RANK = RANK + 1
|
||||||
|
END IF
|
||||||
|
40 CONTINUE
|
||||||
|
CALL DGEMM( 'T', 'N', N, NRHS, N, ONE, WORK, N, B, LDB, ZERO,
|
||||||
|
$ WORK( NWORK ), N )
|
||||||
|
CALL DLACPY( 'A', N, NRHS, WORK( NWORK ), N, B, LDB )
|
||||||
|
*
|
||||||
|
* Unscale.
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ONE, ORGNRM, N, 1, D, N, INFO )
|
||||||
|
CALL DLASRT( 'D', N, D, INFO )
|
||||||
|
CALL DLASCL( 'G', 0, 0, ORGNRM, ONE, N, NRHS, B, LDB, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Book-keeping and setting up some constants.
|
||||||
|
*
|
||||||
|
NLVL = INT( LOG( DBLE( N ) / DBLE( SMLSIZ+1 ) ) / LOG( TWO ) ) + 1
|
||||||
|
*
|
||||||
|
SMLSZP = SMLSIZ + 1
|
||||||
|
*
|
||||||
|
U = 1
|
||||||
|
VT = 1 + SMLSIZ*N
|
||||||
|
DIFL = VT + SMLSZP*N
|
||||||
|
DIFR = DIFL + NLVL*N
|
||||||
|
Z = DIFR + NLVL*N*2
|
||||||
|
C = Z + NLVL*N
|
||||||
|
S = C + N
|
||||||
|
POLES = S + N
|
||||||
|
GIVNUM = POLES + 2*NLVL*N
|
||||||
|
BX = GIVNUM + 2*NLVL*N
|
||||||
|
NWORK = BX + N*NRHS
|
||||||
|
*
|
||||||
|
SIZEI = 1 + N
|
||||||
|
K = SIZEI + N
|
||||||
|
GIVPTR = K + N
|
||||||
|
PERM = GIVPTR + N
|
||||||
|
GIVCOL = PERM + NLVL*N
|
||||||
|
IWK = GIVCOL + NLVL*N*2
|
||||||
|
*
|
||||||
|
ST = 1
|
||||||
|
SQRE = 0
|
||||||
|
ICMPQ1 = 1
|
||||||
|
ICMPQ2 = 0
|
||||||
|
NSUB = 0
|
||||||
|
*
|
||||||
|
DO 50 I = 1, N
|
||||||
|
IF( ABS( D( I ) ).LT.EPS ) THEN
|
||||||
|
D( I ) = SIGN( EPS, D( I ) )
|
||||||
|
END IF
|
||||||
|
50 CONTINUE
|
||||||
|
*
|
||||||
|
DO 60 I = 1, NM1
|
||||||
|
IF( ( ABS( E( I ) ).LT.EPS ) .OR. ( I.EQ.NM1 ) ) THEN
|
||||||
|
NSUB = NSUB + 1
|
||||||
|
IWORK( NSUB ) = ST
|
||||||
|
*
|
||||||
|
* Subproblem found. First determine its size and then
|
||||||
|
* apply divide and conquer on it.
|
||||||
|
*
|
||||||
|
IF( I.LT.NM1 ) THEN
|
||||||
|
*
|
||||||
|
* A subproblem with E(I) small for I < NM1.
|
||||||
|
*
|
||||||
|
NSIZE = I - ST + 1
|
||||||
|
IWORK( SIZEI+NSUB-1 ) = NSIZE
|
||||||
|
ELSE IF( ABS( E( I ) ).GE.EPS ) THEN
|
||||||
|
*
|
||||||
|
* A subproblem with E(NM1) not too small but I = NM1.
|
||||||
|
*
|
||||||
|
NSIZE = N - ST + 1
|
||||||
|
IWORK( SIZEI+NSUB-1 ) = NSIZE
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* A subproblem with E(NM1) small. This implies an
|
||||||
|
* 1-by-1 subproblem at D(N), which is not solved
|
||||||
|
* explicitly.
|
||||||
|
*
|
||||||
|
NSIZE = I - ST + 1
|
||||||
|
IWORK( SIZEI+NSUB-1 ) = NSIZE
|
||||||
|
NSUB = NSUB + 1
|
||||||
|
IWORK( NSUB ) = N
|
||||||
|
IWORK( SIZEI+NSUB-1 ) = 1
|
||||||
|
CALL DCOPY( NRHS, B( N, 1 ), LDB, WORK( BX+NM1 ), N )
|
||||||
|
END IF
|
||||||
|
ST1 = ST - 1
|
||||||
|
IF( NSIZE.EQ.1 ) THEN
|
||||||
|
*
|
||||||
|
* This is a 1-by-1 subproblem and is not solved
|
||||||
|
* explicitly.
|
||||||
|
*
|
||||||
|
CALL DCOPY( NRHS, B( ST, 1 ), LDB, WORK( BX+ST1 ), N )
|
||||||
|
ELSE IF( NSIZE.LE.SMLSIZ ) THEN
|
||||||
|
*
|
||||||
|
* This is a small subproblem and is solved by DLASDQ.
|
||||||
|
*
|
||||||
|
CALL DLASET( 'A', NSIZE, NSIZE, ZERO, ONE,
|
||||||
|
$ WORK( VT+ST1 ), N )
|
||||||
|
CALL DLASDQ( 'U', 0, NSIZE, NSIZE, 0, NRHS, D( ST ),
|
||||||
|
$ E( ST ), WORK( VT+ST1 ), N, WORK( NWORK ),
|
||||||
|
$ N, B( ST, 1 ), LDB, WORK( NWORK ), INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
CALL DLACPY( 'A', NSIZE, NRHS, B( ST, 1 ), LDB,
|
||||||
|
$ WORK( BX+ST1 ), N )
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* A large problem. Solve it using divide and conquer.
|
||||||
|
*
|
||||||
|
CALL DLASDA( ICMPQ1, SMLSIZ, NSIZE, SQRE, D( ST ),
|
||||||
|
$ E( ST ), WORK( U+ST1 ), N, WORK( VT+ST1 ),
|
||||||
|
$ IWORK( K+ST1 ), WORK( DIFL+ST1 ),
|
||||||
|
$ WORK( DIFR+ST1 ), WORK( Z+ST1 ),
|
||||||
|
$ WORK( POLES+ST1 ), IWORK( GIVPTR+ST1 ),
|
||||||
|
$ IWORK( GIVCOL+ST1 ), N, IWORK( PERM+ST1 ),
|
||||||
|
$ WORK( GIVNUM+ST1 ), WORK( C+ST1 ),
|
||||||
|
$ WORK( S+ST1 ), WORK( NWORK ), IWORK( IWK ),
|
||||||
|
$ INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
BXST = BX + ST1
|
||||||
|
CALL DLALSA( ICMPQ2, SMLSIZ, NSIZE, NRHS, B( ST, 1 ),
|
||||||
|
$ LDB, WORK( BXST ), N, WORK( U+ST1 ), N,
|
||||||
|
$ WORK( VT+ST1 ), IWORK( K+ST1 ),
|
||||||
|
$ WORK( DIFL+ST1 ), WORK( DIFR+ST1 ),
|
||||||
|
$ WORK( Z+ST1 ), WORK( POLES+ST1 ),
|
||||||
|
$ IWORK( GIVPTR+ST1 ), IWORK( GIVCOL+ST1 ), N,
|
||||||
|
$ IWORK( PERM+ST1 ), WORK( GIVNUM+ST1 ),
|
||||||
|
$ WORK( C+ST1 ), WORK( S+ST1 ), WORK( NWORK ),
|
||||||
|
$ IWORK( IWK ), INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
ST = I + 1
|
||||||
|
END IF
|
||||||
|
60 CONTINUE
|
||||||
|
*
|
||||||
|
* Apply the singular values and treat the tiny ones as zero.
|
||||||
|
*
|
||||||
|
TOL = RCND*ABS( D( IDAMAX( N, D, 1 ) ) )
|
||||||
|
*
|
||||||
|
DO 70 I = 1, N
|
||||||
|
*
|
||||||
|
* Some of the elements in D can be negative because 1-by-1
|
||||||
|
* subproblems were not solved explicitly.
|
||||||
|
*
|
||||||
|
IF( ABS( D( I ) ).LE.TOL ) THEN
|
||||||
|
CALL DLASET( 'A', 1, NRHS, ZERO, ZERO, WORK( BX+I-1 ), N )
|
||||||
|
ELSE
|
||||||
|
RANK = RANK + 1
|
||||||
|
CALL DLASCL( 'G', 0, 0, D( I ), ONE, 1, NRHS,
|
||||||
|
$ WORK( BX+I-1 ), N, INFO )
|
||||||
|
END IF
|
||||||
|
D( I ) = ABS( D( I ) )
|
||||||
|
70 CONTINUE
|
||||||
|
*
|
||||||
|
* Now apply back the right singular vectors.
|
||||||
|
*
|
||||||
|
ICMPQ2 = 1
|
||||||
|
DO 80 I = 1, NSUB
|
||||||
|
ST = IWORK( I )
|
||||||
|
ST1 = ST - 1
|
||||||
|
NSIZE = IWORK( SIZEI+I-1 )
|
||||||
|
BXST = BX + ST1
|
||||||
|
IF( NSIZE.EQ.1 ) THEN
|
||||||
|
CALL DCOPY( NRHS, WORK( BXST ), N, B( ST, 1 ), LDB )
|
||||||
|
ELSE IF( NSIZE.LE.SMLSIZ ) THEN
|
||||||
|
CALL DGEMM( 'T', 'N', NSIZE, NRHS, NSIZE, ONE,
|
||||||
|
$ WORK( VT+ST1 ), N, WORK( BXST ), N, ZERO,
|
||||||
|
$ B( ST, 1 ), LDB )
|
||||||
|
ELSE
|
||||||
|
CALL DLALSA( ICMPQ2, SMLSIZ, NSIZE, NRHS, WORK( BXST ), N,
|
||||||
|
$ B( ST, 1 ), LDB, WORK( U+ST1 ), N,
|
||||||
|
$ WORK( VT+ST1 ), IWORK( K+ST1 ),
|
||||||
|
$ WORK( DIFL+ST1 ), WORK( DIFR+ST1 ),
|
||||||
|
$ WORK( Z+ST1 ), WORK( POLES+ST1 ),
|
||||||
|
$ IWORK( GIVPTR+ST1 ), IWORK( GIVCOL+ST1 ), N,
|
||||||
|
$ IWORK( PERM+ST1 ), WORK( GIVNUM+ST1 ),
|
||||||
|
$ WORK( C+ST1 ), WORK( S+ST1 ), WORK( NWORK ),
|
||||||
|
$ IWORK( IWK ), INFO )
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
80 CONTINUE
|
||||||
|
*
|
||||||
|
* Unscale and sort the singular values.
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ONE, ORGNRM, N, 1, D, N, INFO )
|
||||||
|
CALL DLASRT( 'D', N, D, INFO )
|
||||||
|
CALL DLASCL( 'G', 0, 0, ORGNRM, ONE, N, NRHS, B, LDB, INFO )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLALSD
|
||||||
|
*
|
||||||
|
END
|
|
@ -1,47 +1,77 @@
|
||||||
|
*> \brief \b DLAMCH
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLAMCH determines double precision machine parameters.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] CMACH
|
||||||
|
*> \verbatim
|
||||||
|
*> Specifies the value to be returned by DLAMCH:
|
||||||
|
*> = 'E' or 'e', DLAMCH := eps
|
||||||
|
*> = 'S' or 's , DLAMCH := sfmin
|
||||||
|
*> = 'B' or 'b', DLAMCH := base
|
||||||
|
*> = 'P' or 'p', DLAMCH := eps*base
|
||||||
|
*> = 'N' or 'n', DLAMCH := t
|
||||||
|
*> = 'R' or 'r', DLAMCH := rnd
|
||||||
|
*> = 'M' or 'm', DLAMCH := emin
|
||||||
|
*> = 'U' or 'u', DLAMCH := rmin
|
||||||
|
*> = 'L' or 'l', DLAMCH := emax
|
||||||
|
*> = 'O' or 'o', DLAMCH := rmax
|
||||||
|
*> where
|
||||||
|
*> eps = relative machine precision
|
||||||
|
*> sfmin = safe minimum, such that 1/sfmin does not overflow
|
||||||
|
*> base = base of the machine
|
||||||
|
*> prec = eps*base
|
||||||
|
*> t = number of (base) digits in the mantissa
|
||||||
|
*> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise
|
||||||
|
*> emin = minimum exponent before (gradual) underflow
|
||||||
|
*> rmin = underflow threshold - base**(emin-1)
|
||||||
|
*> emax = largest exponent before overflow
|
||||||
|
*> rmax = overflow threshold - (base**emax)*(1-eps)
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date December 2016
|
||||||
|
*
|
||||||
|
*> \ingroup auxOTHERauxiliary
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
|
DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* November 2006
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER CMACH
|
CHARACTER CMACH
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* Purpose
|
|
||||||
* =======
|
|
||||||
*
|
|
||||||
* DLAMCH determines double precision machine parameters.
|
|
||||||
*
|
|
||||||
* Arguments
|
|
||||||
* =========
|
|
||||||
*
|
|
||||||
* CMACH (input) CHARACTER*1
|
|
||||||
* Specifies the value to be returned by DLAMCH:
|
|
||||||
* = 'E' or 'e', DLAMCH := eps
|
|
||||||
* = 'S' or 's , DLAMCH := sfmin
|
|
||||||
* = 'B' or 'b', DLAMCH := base
|
|
||||||
* = 'P' or 'p', DLAMCH := eps*base
|
|
||||||
* = 'N' or 'n', DLAMCH := t
|
|
||||||
* = 'R' or 'r', DLAMCH := rnd
|
|
||||||
* = 'M' or 'm', DLAMCH := emin
|
|
||||||
* = 'U' or 'u', DLAMCH := rmin
|
|
||||||
* = 'L' or 'l', DLAMCH := emax
|
|
||||||
* = 'O' or 'o', DLAMCH := rmax
|
|
||||||
*
|
|
||||||
* where
|
|
||||||
*
|
|
||||||
* eps = relative machine precision
|
|
||||||
* sfmin = safe minimum, such that 1/sfmin does not overflow
|
|
||||||
* base = base of the machine
|
|
||||||
* prec = eps*base
|
|
||||||
* t = number of (base) digits in the mantissa
|
|
||||||
* rnd = 1.0 when rounding occurs in addition, 0.0 otherwise
|
|
||||||
* emin = minimum exponent before (gradual) underflow
|
|
||||||
* rmin = underflow threshold - base**(emin-1)
|
|
||||||
* emax = largest exponent before overflow
|
|
||||||
* rmax = overflow threshold - (base**emax)*(1-eps)
|
|
||||||
*
|
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
*
|
||||||
* .. Parameters ..
|
* .. Parameters ..
|
||||||
|
@ -49,43 +79,34 @@
|
||||||
PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
|
PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
LOGICAL FIRST, LRND
|
DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH
|
||||||
INTEGER BETA, IMAX, IMIN, IT
|
|
||||||
DOUBLE PRECISION BASE, EMAX, EMIN, EPS, PREC, RMACH, RMAX, RMIN,
|
|
||||||
$ RND, SFMIN, SMALL, T
|
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
EXTERNAL LSAME
|
EXTERNAL LSAME
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. Intrinsic Functions ..
|
||||||
EXTERNAL DLAMC2
|
INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT,
|
||||||
* ..
|
$ MINEXPONENT, RADIX, TINY
|
||||||
* .. Save statement ..
|
|
||||||
SAVE FIRST, EPS, SFMIN, BASE, T, RND, EMIN, RMIN,
|
|
||||||
$ EMAX, RMAX, PREC
|
|
||||||
* ..
|
|
||||||
* .. Data statements ..
|
|
||||||
DATA FIRST / .TRUE. /
|
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
IF( FIRST ) THEN
|
*
|
||||||
CALL DLAMC2( BETA, IT, LRND, EPS, IMIN, RMIN, IMAX, RMAX )
|
* Assume rounding, not chopping. Always.
|
||||||
BASE = BETA
|
*
|
||||||
T = IT
|
RND = ONE
|
||||||
IF( LRND ) THEN
|
*
|
||||||
RND = ONE
|
IF( ONE.EQ.RND ) THEN
|
||||||
EPS = ( BASE**( 1-IT ) ) / 2
|
EPS = EPSILON(ZERO) * 0.5
|
||||||
ELSE
|
ELSE
|
||||||
RND = ZERO
|
EPS = EPSILON(ZERO)
|
||||||
EPS = BASE**( 1-IT )
|
END IF
|
||||||
END IF
|
*
|
||||||
PREC = EPS*BASE
|
IF( LSAME( CMACH, 'E' ) ) THEN
|
||||||
EMIN = IMIN
|
RMACH = EPS
|
||||||
EMAX = IMAX
|
ELSE IF( LSAME( CMACH, 'S' ) ) THEN
|
||||||
SFMIN = RMIN
|
SFMIN = TINY(ZERO)
|
||||||
SMALL = ONE / RMAX
|
SMALL = ONE / HUGE(ZERO)
|
||||||
IF( SMALL.GE.SFMIN ) THEN
|
IF( SMALL.GE.SFMIN ) THEN
|
||||||
*
|
*
|
||||||
* Use SMALL plus a bit, to avoid the possibility of rounding
|
* Use SMALL plus a bit, to avoid the possibility of rounding
|
||||||
|
@ -93,508 +114,66 @@
|
||||||
*
|
*
|
||||||
SFMIN = SMALL*( ONE+EPS )
|
SFMIN = SMALL*( ONE+EPS )
|
||||||
END IF
|
END IF
|
||||||
END IF
|
|
||||||
*
|
|
||||||
IF( LSAME( CMACH, 'E' ) ) THEN
|
|
||||||
RMACH = EPS
|
|
||||||
ELSE IF( LSAME( CMACH, 'S' ) ) THEN
|
|
||||||
RMACH = SFMIN
|
RMACH = SFMIN
|
||||||
ELSE IF( LSAME( CMACH, 'B' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'B' ) ) THEN
|
||||||
RMACH = BASE
|
RMACH = RADIX(ZERO)
|
||||||
ELSE IF( LSAME( CMACH, 'P' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'P' ) ) THEN
|
||||||
RMACH = PREC
|
RMACH = EPS * RADIX(ZERO)
|
||||||
ELSE IF( LSAME( CMACH, 'N' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'N' ) ) THEN
|
||||||
RMACH = T
|
RMACH = DIGITS(ZERO)
|
||||||
ELSE IF( LSAME( CMACH, 'R' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'R' ) ) THEN
|
||||||
RMACH = RND
|
RMACH = RND
|
||||||
ELSE IF( LSAME( CMACH, 'M' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'M' ) ) THEN
|
||||||
RMACH = EMIN
|
RMACH = MINEXPONENT(ZERO)
|
||||||
ELSE IF( LSAME( CMACH, 'U' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'U' ) ) THEN
|
||||||
RMACH = RMIN
|
RMACH = tiny(zero)
|
||||||
ELSE IF( LSAME( CMACH, 'L' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'L' ) ) THEN
|
||||||
RMACH = EMAX
|
RMACH = MAXEXPONENT(ZERO)
|
||||||
ELSE IF( LSAME( CMACH, 'O' ) ) THEN
|
ELSE IF( LSAME( CMACH, 'O' ) ) THEN
|
||||||
RMACH = RMAX
|
RMACH = HUGE(ZERO)
|
||||||
|
ELSE
|
||||||
|
RMACH = ZERO
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
DLAMCH = RMACH
|
DLAMCH = RMACH
|
||||||
FIRST = .FALSE.
|
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
* End of DLAMCH
|
* End of DLAMCH
|
||||||
*
|
*
|
||||||
END
|
END
|
||||||
*
|
|
||||||
************************************************************************
|
************************************************************************
|
||||||
*
|
*> \brief \b DLAMC3
|
||||||
SUBROUTINE DLAMC1( BETA, T, RND, IEEE1 )
|
*> \details
|
||||||
*
|
*> \b Purpose:
|
||||||
* -- LAPACK auxiliary routine (version 3.2) --
|
*> \verbatim
|
||||||
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
*> DLAMC3 is intended to force A and B to be stored prior to doing
|
||||||
* November 2006
|
*> the addition of A and B , for use in situations where optimizers
|
||||||
*
|
*> might hold one of these in a register.
|
||||||
* .. Scalar Arguments ..
|
*> \endverbatim
|
||||||
LOGICAL IEEE1, RND
|
*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..
|
||||||
INTEGER BETA, T
|
*> \date December 2016
|
||||||
* ..
|
*> \ingroup auxOTHERauxiliary
|
||||||
*
|
*>
|
||||||
* Purpose
|
*> \param[in] A
|
||||||
* =======
|
*> \verbatim
|
||||||
*
|
*> A is a DOUBLE PRECISION
|
||||||
* DLAMC1 determines the machine parameters given by BETA, T, RND, and
|
*> \endverbatim
|
||||||
* IEEE1.
|
*>
|
||||||
*
|
*> \param[in] B
|
||||||
* Arguments
|
*> \verbatim
|
||||||
* =========
|
*> B is a DOUBLE PRECISION
|
||||||
*
|
*> The values A and B.
|
||||||
* BETA (output) INTEGER
|
*> \endverbatim
|
||||||
* The base of the machine.
|
*>
|
||||||
*
|
|
||||||
* T (output) INTEGER
|
|
||||||
* The number of ( BETA ) digits in the mantissa.
|
|
||||||
*
|
|
||||||
* RND (output) LOGICAL
|
|
||||||
* Specifies whether proper rounding ( RND = .TRUE. ) or
|
|
||||||
* chopping ( RND = .FALSE. ) occurs in addition. This may not
|
|
||||||
* be a reliable guide to the way in which the machine performs
|
|
||||||
* its arithmetic.
|
|
||||||
*
|
|
||||||
* IEEE1 (output) LOGICAL
|
|
||||||
* Specifies whether rounding appears to be done in the IEEE
|
|
||||||
* 'round to nearest' style.
|
|
||||||
*
|
|
||||||
* Further Details
|
|
||||||
* ===============
|
|
||||||
*
|
|
||||||
* The routine is based on the routine ENVRON by Malcolm and
|
|
||||||
* incorporates suggestions by Gentleman and Marovich. See
|
|
||||||
*
|
|
||||||
* Malcolm M. A. (1972) Algorithms to reveal properties of
|
|
||||||
* floating-point arithmetic. Comms. of the ACM, 15, 949-951.
|
|
||||||
*
|
|
||||||
* Gentleman W. M. and Marovich S. B. (1974) More on algorithms
|
|
||||||
* that reveal properties of floating point arithmetic units.
|
|
||||||
* Comms. of the ACM, 17, 276-277.
|
|
||||||
*
|
|
||||||
* =====================================================================
|
|
||||||
*
|
|
||||||
* .. Local Scalars ..
|
|
||||||
LOGICAL FIRST, LIEEE1, LRND
|
|
||||||
INTEGER LBETA, LT
|
|
||||||
DOUBLE PRECISION A, B, C, F, ONE, QTR, SAVEC, T1, T2
|
|
||||||
* ..
|
|
||||||
* .. External Functions ..
|
|
||||||
DOUBLE PRECISION DLAMC3
|
|
||||||
EXTERNAL DLAMC3
|
|
||||||
* ..
|
|
||||||
* .. Save statement ..
|
|
||||||
SAVE FIRST, LIEEE1, LBETA, LRND, LT
|
|
||||||
* ..
|
|
||||||
* .. Data statements ..
|
|
||||||
DATA FIRST / .TRUE. /
|
|
||||||
* ..
|
|
||||||
* .. Executable Statements ..
|
|
||||||
*
|
|
||||||
IF( FIRST ) THEN
|
|
||||||
ONE = 1
|
|
||||||
*
|
|
||||||
* LBETA, LIEEE1, LT and LRND are the local values of BETA,
|
|
||||||
* IEEE1, T and RND.
|
|
||||||
*
|
|
||||||
* Throughout this routine we use the function DLAMC3 to ensure
|
|
||||||
* that relevant values are stored and not held in registers, or
|
|
||||||
* are not affected by optimizers.
|
|
||||||
*
|
|
||||||
* Compute a = 2.0**m with the smallest positive integer m such
|
|
||||||
* that
|
|
||||||
*
|
|
||||||
* fl( a + 1.0 ) = a.
|
|
||||||
*
|
|
||||||
A = 1
|
|
||||||
C = 1
|
|
||||||
*
|
|
||||||
*+ WHILE( C.EQ.ONE )LOOP
|
|
||||||
10 CONTINUE
|
|
||||||
IF( C.EQ.ONE ) THEN
|
|
||||||
A = 2*A
|
|
||||||
C = DLAMC3( A, ONE )
|
|
||||||
C = DLAMC3( C, -A )
|
|
||||||
GO TO 10
|
|
||||||
END IF
|
|
||||||
*+ END WHILE
|
|
||||||
*
|
|
||||||
* Now compute b = 2.0**m with the smallest positive integer m
|
|
||||||
* such that
|
|
||||||
*
|
|
||||||
* fl( a + b ) .gt. a.
|
|
||||||
*
|
|
||||||
B = 1
|
|
||||||
C = DLAMC3( A, B )
|
|
||||||
*
|
|
||||||
*+ WHILE( C.EQ.A )LOOP
|
|
||||||
20 CONTINUE
|
|
||||||
IF( C.EQ.A ) THEN
|
|
||||||
B = 2*B
|
|
||||||
C = DLAMC3( A, B )
|
|
||||||
GO TO 20
|
|
||||||
END IF
|
|
||||||
*+ END WHILE
|
|
||||||
*
|
|
||||||
* Now compute the base. a and c are neighbouring floating point
|
|
||||||
* numbers in the interval ( beta**t, beta**( t + 1 ) ) and so
|
|
||||||
* their difference is beta. Adding 0.25 to c is to ensure that it
|
|
||||||
* is truncated to beta and not ( beta - 1 ).
|
|
||||||
*
|
|
||||||
QTR = ONE / 4
|
|
||||||
SAVEC = C
|
|
||||||
C = DLAMC3( C, -A )
|
|
||||||
LBETA = C + QTR
|
|
||||||
*
|
|
||||||
* Now determine whether rounding or chopping occurs, by adding a
|
|
||||||
* bit less than beta/2 and a bit more than beta/2 to a.
|
|
||||||
*
|
|
||||||
B = LBETA
|
|
||||||
F = DLAMC3( B / 2, -B / 100 )
|
|
||||||
C = DLAMC3( F, A )
|
|
||||||
IF( C.EQ.A ) THEN
|
|
||||||
LRND = .TRUE.
|
|
||||||
ELSE
|
|
||||||
LRND = .FALSE.
|
|
||||||
END IF
|
|
||||||
F = DLAMC3( B / 2, B / 100 )
|
|
||||||
C = DLAMC3( F, A )
|
|
||||||
IF( ( LRND ) .AND. ( C.EQ.A ) )
|
|
||||||
$ LRND = .FALSE.
|
|
||||||
*
|
|
||||||
* Try and decide whether rounding is done in the IEEE 'round to
|
|
||||||
* nearest' style. B/2 is half a unit in the last place of the two
|
|
||||||
* numbers A and SAVEC. Furthermore, A is even, i.e. has last bit
|
|
||||||
* zero, and SAVEC is odd. Thus adding B/2 to A should not change
|
|
||||||
* A, but adding B/2 to SAVEC should change SAVEC.
|
|
||||||
*
|
|
||||||
T1 = DLAMC3( B / 2, A )
|
|
||||||
T2 = DLAMC3( B / 2, SAVEC )
|
|
||||||
LIEEE1 = ( T1.EQ.A ) .AND. ( T2.GT.SAVEC ) .AND. LRND
|
|
||||||
*
|
|
||||||
* Now find the mantissa, t. It should be the integer part of
|
|
||||||
* log to the base beta of a, however it is safer to determine t
|
|
||||||
* by powering. So we find t as the smallest positive integer for
|
|
||||||
* which
|
|
||||||
*
|
|
||||||
* fl( beta**t + 1.0 ) = 1.0.
|
|
||||||
*
|
|
||||||
LT = 0
|
|
||||||
A = 1
|
|
||||||
C = 1
|
|
||||||
*
|
|
||||||
*+ WHILE( C.EQ.ONE )LOOP
|
|
||||||
30 CONTINUE
|
|
||||||
IF( C.EQ.ONE ) THEN
|
|
||||||
LT = LT + 1
|
|
||||||
A = A*LBETA
|
|
||||||
C = DLAMC3( A, ONE )
|
|
||||||
C = DLAMC3( C, -A )
|
|
||||||
GO TO 30
|
|
||||||
END IF
|
|
||||||
*+ END WHILE
|
|
||||||
*
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
BETA = LBETA
|
|
||||||
T = LT
|
|
||||||
RND = LRND
|
|
||||||
IEEE1 = LIEEE1
|
|
||||||
FIRST = .FALSE.
|
|
||||||
RETURN
|
|
||||||
*
|
|
||||||
* End of DLAMC1
|
|
||||||
*
|
|
||||||
END
|
|
||||||
*
|
|
||||||
************************************************************************
|
|
||||||
*
|
|
||||||
SUBROUTINE DLAMC2( BETA, T, RND, EPS, EMIN, RMIN, EMAX, RMAX )
|
|
||||||
*
|
|
||||||
* -- LAPACK auxiliary routine (version 3.2) --
|
|
||||||
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
|
||||||
* November 2006
|
|
||||||
*
|
|
||||||
* .. Scalar Arguments ..
|
|
||||||
LOGICAL RND
|
|
||||||
INTEGER BETA, EMAX, EMIN, T
|
|
||||||
DOUBLE PRECISION EPS, RMAX, RMIN
|
|
||||||
* ..
|
|
||||||
*
|
|
||||||
* Purpose
|
|
||||||
* =======
|
|
||||||
*
|
|
||||||
* DLAMC2 determines the machine parameters specified in its argument
|
|
||||||
* list.
|
|
||||||
*
|
|
||||||
* Arguments
|
|
||||||
* =========
|
|
||||||
*
|
|
||||||
* BETA (output) INTEGER
|
|
||||||
* The base of the machine.
|
|
||||||
*
|
|
||||||
* T (output) INTEGER
|
|
||||||
* The number of ( BETA ) digits in the mantissa.
|
|
||||||
*
|
|
||||||
* RND (output) LOGICAL
|
|
||||||
* Specifies whether proper rounding ( RND = .TRUE. ) or
|
|
||||||
* chopping ( RND = .FALSE. ) occurs in addition. This may not
|
|
||||||
* be a reliable guide to the way in which the machine performs
|
|
||||||
* its arithmetic.
|
|
||||||
*
|
|
||||||
* EPS (output) DOUBLE PRECISION
|
|
||||||
* The smallest positive number such that
|
|
||||||
*
|
|
||||||
* fl( 1.0 - EPS ) .LT. 1.0,
|
|
||||||
*
|
|
||||||
* where fl denotes the computed value.
|
|
||||||
*
|
|
||||||
* EMIN (output) INTEGER
|
|
||||||
* The minimum exponent before (gradual) underflow occurs.
|
|
||||||
*
|
|
||||||
* RMIN (output) DOUBLE PRECISION
|
|
||||||
* The smallest normalized number for the machine, given by
|
|
||||||
* BASE**( EMIN - 1 ), where BASE is the floating point value
|
|
||||||
* of BETA.
|
|
||||||
*
|
|
||||||
* EMAX (output) INTEGER
|
|
||||||
* The maximum exponent before overflow occurs.
|
|
||||||
*
|
|
||||||
* RMAX (output) DOUBLE PRECISION
|
|
||||||
* The largest positive number for the machine, given by
|
|
||||||
* BASE**EMAX * ( 1 - EPS ), where BASE is the floating point
|
|
||||||
* value of BETA.
|
|
||||||
*
|
|
||||||
* Further Details
|
|
||||||
* ===============
|
|
||||||
*
|
|
||||||
* The computation of EPS is based on a routine PARANOIA by
|
|
||||||
* W. Kahan of the University of California at Berkeley.
|
|
||||||
*
|
|
||||||
* =====================================================================
|
|
||||||
*
|
|
||||||
* .. Local Scalars ..
|
|
||||||
LOGICAL FIRST, IEEE, IWARN, LIEEE1, LRND
|
|
||||||
INTEGER GNMIN, GPMIN, I, LBETA, LEMAX, LEMIN, LT,
|
|
||||||
$ NGNMIN, NGPMIN
|
|
||||||
DOUBLE PRECISION A, B, C, HALF, LEPS, LRMAX, LRMIN, ONE, RBASE,
|
|
||||||
$ SIXTH, SMALL, THIRD, TWO, ZERO
|
|
||||||
* ..
|
|
||||||
* .. External Functions ..
|
|
||||||
DOUBLE PRECISION DLAMC3
|
|
||||||
EXTERNAL DLAMC3
|
|
||||||
* ..
|
|
||||||
* .. External Subroutines ..
|
|
||||||
EXTERNAL DLAMC1, DLAMC4, DLAMC5
|
|
||||||
* ..
|
|
||||||
* .. Intrinsic Functions ..
|
|
||||||
INTRINSIC ABS, MAX, MIN
|
|
||||||
* ..
|
|
||||||
* .. Save statement ..
|
|
||||||
SAVE FIRST, IWARN, LBETA, LEMAX, LEMIN, LEPS, LRMAX,
|
|
||||||
$ LRMIN, LT
|
|
||||||
* ..
|
|
||||||
* .. Data statements ..
|
|
||||||
DATA FIRST / .TRUE. / , IWARN / .FALSE. /
|
|
||||||
* ..
|
|
||||||
* .. Executable Statements ..
|
|
||||||
*
|
|
||||||
IF( FIRST ) THEN
|
|
||||||
ZERO = 0
|
|
||||||
ONE = 1
|
|
||||||
TWO = 2
|
|
||||||
*
|
|
||||||
* LBETA, LT, LRND, LEPS, LEMIN and LRMIN are the local values of
|
|
||||||
* BETA, T, RND, EPS, EMIN and RMIN.
|
|
||||||
*
|
|
||||||
* Throughout this routine we use the function DLAMC3 to ensure
|
|
||||||
* that relevant values are stored and not held in registers, or
|
|
||||||
* are not affected by optimizers.
|
|
||||||
*
|
|
||||||
* DLAMC1 returns the parameters LBETA, LT, LRND and LIEEE1.
|
|
||||||
*
|
|
||||||
CALL DLAMC1( LBETA, LT, LRND, LIEEE1 )
|
|
||||||
*
|
|
||||||
* Start to find EPS.
|
|
||||||
*
|
|
||||||
B = LBETA
|
|
||||||
A = B**( -LT )
|
|
||||||
LEPS = A
|
|
||||||
*
|
|
||||||
* Try some tricks to see whether or not this is the correct EPS.
|
|
||||||
*
|
|
||||||
B = TWO / 3
|
|
||||||
HALF = ONE / 2
|
|
||||||
SIXTH = DLAMC3( B, -HALF )
|
|
||||||
THIRD = DLAMC3( SIXTH, SIXTH )
|
|
||||||
B = DLAMC3( THIRD, -HALF )
|
|
||||||
B = DLAMC3( B, SIXTH )
|
|
||||||
B = ABS( B )
|
|
||||||
IF( B.LT.LEPS )
|
|
||||||
$ B = LEPS
|
|
||||||
*
|
|
||||||
LEPS = 1
|
|
||||||
*
|
|
||||||
*+ WHILE( ( LEPS.GT.B ).AND.( B.GT.ZERO ) )LOOP
|
|
||||||
10 CONTINUE
|
|
||||||
IF( ( LEPS.GT.B ) .AND. ( B.GT.ZERO ) ) THEN
|
|
||||||
LEPS = B
|
|
||||||
C = DLAMC3( HALF*LEPS, ( TWO**5 )*( LEPS**2 ) )
|
|
||||||
C = DLAMC3( HALF, -C )
|
|
||||||
B = DLAMC3( HALF, C )
|
|
||||||
C = DLAMC3( HALF, -B )
|
|
||||||
B = DLAMC3( HALF, C )
|
|
||||||
GO TO 10
|
|
||||||
END IF
|
|
||||||
*+ END WHILE
|
|
||||||
*
|
|
||||||
IF( A.LT.LEPS )
|
|
||||||
$ LEPS = A
|
|
||||||
*
|
|
||||||
* Computation of EPS complete.
|
|
||||||
*
|
|
||||||
* Now find EMIN. Let A = + or - 1, and + or - (1 + BASE**(-3)).
|
|
||||||
* Keep dividing A by BETA until (gradual) underflow occurs. This
|
|
||||||
* is detected when we cannot recover the previous A.
|
|
||||||
*
|
|
||||||
RBASE = ONE / LBETA
|
|
||||||
SMALL = ONE
|
|
||||||
DO 20 I = 1, 3
|
|
||||||
SMALL = DLAMC3( SMALL*RBASE, ZERO )
|
|
||||||
20 CONTINUE
|
|
||||||
A = DLAMC3( ONE, SMALL )
|
|
||||||
CALL DLAMC4( NGPMIN, ONE, LBETA )
|
|
||||||
CALL DLAMC4( NGNMIN, -ONE, LBETA )
|
|
||||||
CALL DLAMC4( GPMIN, A, LBETA )
|
|
||||||
CALL DLAMC4( GNMIN, -A, LBETA )
|
|
||||||
IEEE = .FALSE.
|
|
||||||
*
|
|
||||||
IF( ( NGPMIN.EQ.NGNMIN ) .AND. ( GPMIN.EQ.GNMIN ) ) THEN
|
|
||||||
IF( NGPMIN.EQ.GPMIN ) THEN
|
|
||||||
LEMIN = NGPMIN
|
|
||||||
* ( Non twos-complement machines, no gradual underflow;
|
|
||||||
* e.g., VAX )
|
|
||||||
ELSE IF( ( GPMIN-NGPMIN ).EQ.3 ) THEN
|
|
||||||
LEMIN = NGPMIN - 1 + LT
|
|
||||||
IEEE = .TRUE.
|
|
||||||
* ( Non twos-complement machines, with gradual underflow;
|
|
||||||
* e.g., IEEE standard followers )
|
|
||||||
ELSE
|
|
||||||
LEMIN = MIN( NGPMIN, GPMIN )
|
|
||||||
* ( A guess; no known machine )
|
|
||||||
IWARN = .TRUE.
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
ELSE IF( ( NGPMIN.EQ.GPMIN ) .AND. ( NGNMIN.EQ.GNMIN ) ) THEN
|
|
||||||
IF( ABS( NGPMIN-NGNMIN ).EQ.1 ) THEN
|
|
||||||
LEMIN = MAX( NGPMIN, NGNMIN )
|
|
||||||
* ( Twos-complement machines, no gradual underflow;
|
|
||||||
* e.g., CYBER 205 )
|
|
||||||
ELSE
|
|
||||||
LEMIN = MIN( NGPMIN, NGNMIN )
|
|
||||||
* ( A guess; no known machine )
|
|
||||||
IWARN = .TRUE.
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
ELSE IF( ( ABS( NGPMIN-NGNMIN ).EQ.1 ) .AND.
|
|
||||||
$ ( GPMIN.EQ.GNMIN ) ) THEN
|
|
||||||
IF( ( GPMIN-MIN( NGPMIN, NGNMIN ) ).EQ.3 ) THEN
|
|
||||||
LEMIN = MAX( NGPMIN, NGNMIN ) - 1 + LT
|
|
||||||
* ( Twos-complement machines with gradual underflow;
|
|
||||||
* no known machine )
|
|
||||||
ELSE
|
|
||||||
LEMIN = MIN( NGPMIN, NGNMIN )
|
|
||||||
* ( A guess; no known machine )
|
|
||||||
IWARN = .TRUE.
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
ELSE
|
|
||||||
LEMIN = MIN( NGPMIN, NGNMIN, GPMIN, GNMIN )
|
|
||||||
* ( A guess; no known machine )
|
|
||||||
IWARN = .TRUE.
|
|
||||||
END IF
|
|
||||||
FIRST = .FALSE.
|
|
||||||
***
|
|
||||||
* Comment out this if block if EMIN is ok
|
|
||||||
IF( IWARN ) THEN
|
|
||||||
FIRST = .TRUE.
|
|
||||||
WRITE( 6, FMT = 9999 )LEMIN
|
|
||||||
END IF
|
|
||||||
***
|
|
||||||
*
|
|
||||||
* Assume IEEE arithmetic if we found denormalised numbers above,
|
|
||||||
* or if arithmetic seems to round in the IEEE style, determined
|
|
||||||
* in routine DLAMC1. A true IEEE machine should have both things
|
|
||||||
* true; however, faulty machines may have one or the other.
|
|
||||||
*
|
|
||||||
IEEE = IEEE .OR. LIEEE1
|
|
||||||
*
|
|
||||||
* Compute RMIN by successive division by BETA. We could compute
|
|
||||||
* RMIN as BASE**( EMIN - 1 ), but some machines underflow during
|
|
||||||
* this computation.
|
|
||||||
*
|
|
||||||
LRMIN = 1
|
|
||||||
DO 30 I = 1, 1 - LEMIN
|
|
||||||
LRMIN = DLAMC3( LRMIN*RBASE, ZERO )
|
|
||||||
30 CONTINUE
|
|
||||||
*
|
|
||||||
* Finally, call DLAMC5 to compute EMAX and RMAX.
|
|
||||||
*
|
|
||||||
CALL DLAMC5( LBETA, LT, LEMIN, IEEE, LEMAX, LRMAX )
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
BETA = LBETA
|
|
||||||
T = LT
|
|
||||||
RND = LRND
|
|
||||||
EPS = LEPS
|
|
||||||
EMIN = LEMIN
|
|
||||||
RMIN = LRMIN
|
|
||||||
EMAX = LEMAX
|
|
||||||
RMAX = LRMAX
|
|
||||||
*
|
|
||||||
RETURN
|
|
||||||
*
|
|
||||||
9999 FORMAT( / / ' WARNING. The value EMIN may be incorrect:-',
|
|
||||||
$ ' EMIN = ', I8, /
|
|
||||||
$ ' If, after inspection, the value EMIN looks',
|
|
||||||
$ ' acceptable please comment out ',
|
|
||||||
$ / ' the IF block as marked within the code of routine',
|
|
||||||
$ ' DLAMC2,', / ' otherwise supply EMIN explicitly.', / )
|
|
||||||
*
|
|
||||||
* End of DLAMC2
|
|
||||||
*
|
|
||||||
END
|
|
||||||
*
|
|
||||||
************************************************************************
|
|
||||||
*
|
|
||||||
DOUBLE PRECISION FUNCTION DLAMC3( A, B )
|
DOUBLE PRECISION FUNCTION DLAMC3( A, B )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
||||||
* November 2006
|
* November 2010
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION A, B
|
DOUBLE PRECISION A, B
|
||||||
* ..
|
* ..
|
||||||
*
|
|
||||||
* Purpose
|
|
||||||
* =======
|
|
||||||
*
|
|
||||||
* DLAMC3 is intended to force A and B to be stored prior to doing
|
|
||||||
* the addition of A and B , for use in situations where optimizers
|
|
||||||
* might hold one of these in a register.
|
|
||||||
*
|
|
||||||
* Arguments
|
|
||||||
* =========
|
|
||||||
*
|
|
||||||
* A (input) DOUBLE PRECISION
|
|
||||||
* B (input) DOUBLE PRECISION
|
|
||||||
* The values A and B.
|
|
||||||
*
|
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
*
|
*
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
@ -608,245 +187,3 @@
|
||||||
END
|
END
|
||||||
*
|
*
|
||||||
************************************************************************
|
************************************************************************
|
||||||
*
|
|
||||||
SUBROUTINE DLAMC4( EMIN, START, BASE )
|
|
||||||
*
|
|
||||||
* -- LAPACK auxiliary routine (version 3.2) --
|
|
||||||
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
|
||||||
* November 2006
|
|
||||||
*
|
|
||||||
* .. Scalar Arguments ..
|
|
||||||
INTEGER BASE, EMIN
|
|
||||||
DOUBLE PRECISION START
|
|
||||||
* ..
|
|
||||||
*
|
|
||||||
* Purpose
|
|
||||||
* =======
|
|
||||||
*
|
|
||||||
* DLAMC4 is a service routine for DLAMC2.
|
|
||||||
*
|
|
||||||
* Arguments
|
|
||||||
* =========
|
|
||||||
*
|
|
||||||
* EMIN (output) INTEGER
|
|
||||||
* The minimum exponent before (gradual) underflow, computed by
|
|
||||||
* setting A = START and dividing by BASE until the previous A
|
|
||||||
* can not be recovered.
|
|
||||||
*
|
|
||||||
* START (input) DOUBLE PRECISION
|
|
||||||
* The starting point for determining EMIN.
|
|
||||||
*
|
|
||||||
* BASE (input) INTEGER
|
|
||||||
* The base of the machine.
|
|
||||||
*
|
|
||||||
* =====================================================================
|
|
||||||
*
|
|
||||||
* .. Local Scalars ..
|
|
||||||
INTEGER I
|
|
||||||
DOUBLE PRECISION A, B1, B2, C1, C2, D1, D2, ONE, RBASE, ZERO
|
|
||||||
* ..
|
|
||||||
* .. External Functions ..
|
|
||||||
DOUBLE PRECISION DLAMC3
|
|
||||||
EXTERNAL DLAMC3
|
|
||||||
* ..
|
|
||||||
* .. Executable Statements ..
|
|
||||||
*
|
|
||||||
A = START
|
|
||||||
ONE = 1
|
|
||||||
RBASE = ONE / BASE
|
|
||||||
ZERO = 0
|
|
||||||
EMIN = 1
|
|
||||||
B1 = DLAMC3( A*RBASE, ZERO )
|
|
||||||
C1 = A
|
|
||||||
C2 = A
|
|
||||||
D1 = A
|
|
||||||
D2 = A
|
|
||||||
*+ WHILE( ( C1.EQ.A ).AND.( C2.EQ.A ).AND.
|
|
||||||
* $ ( D1.EQ.A ).AND.( D2.EQ.A ) )LOOP
|
|
||||||
10 CONTINUE
|
|
||||||
IF( ( C1.EQ.A ) .AND. ( C2.EQ.A ) .AND. ( D1.EQ.A ) .AND.
|
|
||||||
$ ( D2.EQ.A ) ) THEN
|
|
||||||
EMIN = EMIN - 1
|
|
||||||
A = B1
|
|
||||||
B1 = DLAMC3( A / BASE, ZERO )
|
|
||||||
C1 = DLAMC3( B1*BASE, ZERO )
|
|
||||||
D1 = ZERO
|
|
||||||
DO 20 I = 1, BASE
|
|
||||||
D1 = D1 + B1
|
|
||||||
20 CONTINUE
|
|
||||||
B2 = DLAMC3( A*RBASE, ZERO )
|
|
||||||
C2 = DLAMC3( B2 / RBASE, ZERO )
|
|
||||||
D2 = ZERO
|
|
||||||
DO 30 I = 1, BASE
|
|
||||||
D2 = D2 + B2
|
|
||||||
30 CONTINUE
|
|
||||||
GO TO 10
|
|
||||||
END IF
|
|
||||||
*+ END WHILE
|
|
||||||
*
|
|
||||||
RETURN
|
|
||||||
*
|
|
||||||
* End of DLAMC4
|
|
||||||
*
|
|
||||||
END
|
|
||||||
*
|
|
||||||
************************************************************************
|
|
||||||
*
|
|
||||||
SUBROUTINE DLAMC5( BETA, P, EMIN, IEEE, EMAX, RMAX )
|
|
||||||
*
|
|
||||||
* -- LAPACK auxiliary routine (version 3.2) --
|
|
||||||
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
|
||||||
* November 2006
|
|
||||||
*
|
|
||||||
* .. Scalar Arguments ..
|
|
||||||
LOGICAL IEEE
|
|
||||||
INTEGER BETA, EMAX, EMIN, P
|
|
||||||
DOUBLE PRECISION RMAX
|
|
||||||
* ..
|
|
||||||
*
|
|
||||||
* Purpose
|
|
||||||
* =======
|
|
||||||
*
|
|
||||||
* DLAMC5 attempts to compute RMAX, the largest machine floating-point
|
|
||||||
* number, without overflow. It assumes that EMAX + abs(EMIN) sum
|
|
||||||
* approximately to a power of 2. It will fail on machines where this
|
|
||||||
* assumption does not hold, for example, the Cyber 205 (EMIN = -28625,
|
|
||||||
* EMAX = 28718). It will also fail if the value supplied for EMIN is
|
|
||||||
* too large (i.e. too close to zero), probably with overflow.
|
|
||||||
*
|
|
||||||
* Arguments
|
|
||||||
* =========
|
|
||||||
*
|
|
||||||
* BETA (input) INTEGER
|
|
||||||
* The base of floating-point arithmetic.
|
|
||||||
*
|
|
||||||
* P (input) INTEGER
|
|
||||||
* The number of base BETA digits in the mantissa of a
|
|
||||||
* floating-point value.
|
|
||||||
*
|
|
||||||
* EMIN (input) INTEGER
|
|
||||||
* The minimum exponent before (gradual) underflow.
|
|
||||||
*
|
|
||||||
* IEEE (input) LOGICAL
|
|
||||||
* A logical flag specifying whether or not the arithmetic
|
|
||||||
* system is thought to comply with the IEEE standard.
|
|
||||||
*
|
|
||||||
* EMAX (output) INTEGER
|
|
||||||
* The largest exponent before overflow
|
|
||||||
*
|
|
||||||
* RMAX (output) DOUBLE PRECISION
|
|
||||||
* The largest machine floating-point number.
|
|
||||||
*
|
|
||||||
* =====================================================================
|
|
||||||
*
|
|
||||||
* .. Parameters ..
|
|
||||||
DOUBLE PRECISION ZERO, ONE
|
|
||||||
PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
|
|
||||||
* ..
|
|
||||||
* .. Local Scalars ..
|
|
||||||
INTEGER EXBITS, EXPSUM, I, LEXP, NBITS, TRY, UEXP
|
|
||||||
DOUBLE PRECISION OLDY, RECBAS, Y, Z
|
|
||||||
* ..
|
|
||||||
* .. External Functions ..
|
|
||||||
DOUBLE PRECISION DLAMC3
|
|
||||||
EXTERNAL DLAMC3
|
|
||||||
* ..
|
|
||||||
* .. Intrinsic Functions ..
|
|
||||||
INTRINSIC MOD
|
|
||||||
* ..
|
|
||||||
* .. Executable Statements ..
|
|
||||||
*
|
|
||||||
* First compute LEXP and UEXP, two powers of 2 that bound
|
|
||||||
* abs(EMIN). We then assume that EMAX + abs(EMIN) will sum
|
|
||||||
* approximately to the bound that is closest to abs(EMIN).
|
|
||||||
* (EMAX is the exponent of the required number RMAX).
|
|
||||||
*
|
|
||||||
LEXP = 1
|
|
||||||
EXBITS = 1
|
|
||||||
10 CONTINUE
|
|
||||||
TRY = LEXP*2
|
|
||||||
IF( TRY.LE.( -EMIN ) ) THEN
|
|
||||||
LEXP = TRY
|
|
||||||
EXBITS = EXBITS + 1
|
|
||||||
GO TO 10
|
|
||||||
END IF
|
|
||||||
IF( LEXP.EQ.-EMIN ) THEN
|
|
||||||
UEXP = LEXP
|
|
||||||
ELSE
|
|
||||||
UEXP = TRY
|
|
||||||
EXBITS = EXBITS + 1
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
* Now -LEXP is less than or equal to EMIN, and -UEXP is greater
|
|
||||||
* than or equal to EMIN. EXBITS is the number of bits needed to
|
|
||||||
* store the exponent.
|
|
||||||
*
|
|
||||||
IF( ( UEXP+EMIN ).GT.( -LEXP-EMIN ) ) THEN
|
|
||||||
EXPSUM = 2*LEXP
|
|
||||||
ELSE
|
|
||||||
EXPSUM = 2*UEXP
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
* EXPSUM is the exponent range, approximately equal to
|
|
||||||
* EMAX - EMIN + 1 .
|
|
||||||
*
|
|
||||||
EMAX = EXPSUM + EMIN - 1
|
|
||||||
NBITS = 1 + EXBITS + P
|
|
||||||
*
|
|
||||||
* NBITS is the total number of bits needed to store a
|
|
||||||
* floating-point number.
|
|
||||||
*
|
|
||||||
IF( ( MOD( NBITS, 2 ).EQ.1 ) .AND. ( BETA.EQ.2 ) ) THEN
|
|
||||||
*
|
|
||||||
* Either there are an odd number of bits used to store a
|
|
||||||
* floating-point number, which is unlikely, or some bits are
|
|
||||||
* not used in the representation of numbers, which is possible,
|
|
||||||
* (e.g. Cray machines) or the mantissa has an implicit bit,
|
|
||||||
* (e.g. IEEE machines, Dec Vax machines), which is perhaps the
|
|
||||||
* most likely. We have to assume the last alternative.
|
|
||||||
* If this is true, then we need to reduce EMAX by one because
|
|
||||||
* there must be some way of representing zero in an implicit-bit
|
|
||||||
* system. On machines like Cray, we are reducing EMAX by one
|
|
||||||
* unnecessarily.
|
|
||||||
*
|
|
||||||
EMAX = EMAX - 1
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
IF( IEEE ) THEN
|
|
||||||
*
|
|
||||||
* Assume we are on an IEEE machine which reserves one exponent
|
|
||||||
* for infinity and NaN.
|
|
||||||
*
|
|
||||||
EMAX = EMAX - 1
|
|
||||||
END IF
|
|
||||||
*
|
|
||||||
* Now create RMAX, the largest machine number, which should
|
|
||||||
* be equal to (1.0 - BETA**(-P)) * BETA**EMAX .
|
|
||||||
*
|
|
||||||
* First compute 1.0 - BETA**(-P), being careful that the
|
|
||||||
* result is less than 1.0 .
|
|
||||||
*
|
|
||||||
RECBAS = ONE / BETA
|
|
||||||
Z = BETA - ONE
|
|
||||||
Y = ZERO
|
|
||||||
DO 20 I = 1, P
|
|
||||||
Z = Z*RECBAS
|
|
||||||
IF( Y.LT.ONE )
|
|
||||||
$ OLDY = Y
|
|
||||||
Y = DLAMC3( Y, Z )
|
|
||||||
20 CONTINUE
|
|
||||||
IF( Y.GE.ONE )
|
|
||||||
$ Y = OLDY
|
|
||||||
*
|
|
||||||
* Now multiply by BETA**EMAX to get RMAX.
|
|
||||||
*
|
|
||||||
DO 30 I = 1, EMAX
|
|
||||||
Y = DLAMC3( Y*BETA, ZERO )
|
|
||||||
30 CONTINUE
|
|
||||||
*
|
|
||||||
RMAX = Y
|
|
||||||
RETURN
|
|
||||||
*
|
|
||||||
* End of DLAMC5
|
|
||||||
*
|
|
||||||
END
|
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAMRG + dependencies
|
*> Download DLAMRG + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlamrg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlamrg.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlamrg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlamrg.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlamrg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlamrg.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAMRG( N1, N2, A, DTRD1, DTRD2, INDEX )
|
* SUBROUTINE DLAMRG( N1, N2, A, DTRD1, DTRD2, INDEX )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER DTRD1, DTRD2, N1, N2
|
* INTEGER DTRD1, DTRD2, N1, N2
|
||||||
* ..
|
* ..
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* INTEGER INDEX( * )
|
* INTEGER INDEX( * )
|
||||||
* DOUBLE PRECISION A( * )
|
* DOUBLE PRECISION A( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
*> \param[in] N2
|
*> \param[in] N2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> N2 is INTEGER
|
*> N2 is INTEGER
|
||||||
*> These arguements contain the respective lengths of the two
|
*> These arguments contain the respective lengths of the two
|
||||||
*> sorted lists to be merged.
|
*> sorted lists to be merged.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
@ -87,22 +87,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLAMRG( N1, N2, A, DTRD1, DTRD2, INDEX )
|
SUBROUTINE DLAMRG( N1, N2, A, DTRD1, DTRD2, INDEX )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER DTRD1, DTRD2, N1, N2
|
INTEGER DTRD1, DTRD2, N1, N2
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLANGE + dependencies
|
*> Download DLANGE + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlange.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlange.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlange.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlange.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlange.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlange.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK )
|
* DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER NORM
|
* CHARACTER NORM
|
||||||
* INTEGER LDA, M, N
|
* INTEGER LDA, M, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -102,22 +102,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEauxiliary
|
*> \ingroup doubleGEauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK )
|
DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER NORM
|
CHARACTER NORM
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLANST + dependencies
|
*> Download DLANST + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlanst.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlanst.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlanst.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlanst.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanst.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanst.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E )
|
* DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER NORM
|
* CHARACTER NORM
|
||||||
* INTEGER N
|
* INTEGER N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION D( * ), E( * )
|
* DOUBLE PRECISION D( * ), E( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -88,22 +88,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E )
|
DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER NORM
|
CHARACTER NORM
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLANSY + dependencies
|
*> Download DLANSY + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlansy.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlansy.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlansy.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlansy.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansy.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansy.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DLANSY( NORM, UPLO, N, A, LDA, WORK )
|
* DOUBLE PRECISION FUNCTION DLANSY( NORM, UPLO, N, A, LDA, WORK )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER NORM, UPLO
|
* CHARACTER NORM, UPLO
|
||||||
* INTEGER LDA, N
|
* INTEGER LDA, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -110,22 +110,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleSYauxiliary
|
*> \ingroup doubleSYauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DLANSY( NORM, UPLO, N, A, LDA, WORK )
|
DOUBLE PRECISION FUNCTION DLANSY( NORM, UPLO, N, A, LDA, WORK )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER NORM, UPLO
|
CHARACTER NORM, UPLO
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAPY2 + dependencies
|
*> Download DLAPY2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapy2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapy2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapy2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapy2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
|
* DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION X, Y
|
* DOUBLE PRECISION X, Y
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -51,22 +51,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
|
DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION X, Y
|
DOUBLE PRECISION X, Y
|
||||||
|
@ -82,20 +82,32 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
DOUBLE PRECISION W, XABS, YABS, Z
|
DOUBLE PRECISION W, XABS, YABS, Z
|
||||||
|
LOGICAL X_IS_NAN, Y_IS_NAN
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
LOGICAL DISNAN
|
||||||
|
EXTERNAL DISNAN
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC ABS, MAX, MIN, SQRT
|
INTRINSIC ABS, MAX, MIN, SQRT
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
XABS = ABS( X )
|
X_IS_NAN = DISNAN( X )
|
||||||
YABS = ABS( Y )
|
Y_IS_NAN = DISNAN( Y )
|
||||||
W = MAX( XABS, YABS )
|
IF ( X_IS_NAN ) DLAPY2 = X
|
||||||
Z = MIN( XABS, YABS )
|
IF ( Y_IS_NAN ) DLAPY2 = Y
|
||||||
IF( Z.EQ.ZERO ) THEN
|
*
|
||||||
DLAPY2 = W
|
IF ( .NOT.( X_IS_NAN.OR.Y_IS_NAN ) ) THEN
|
||||||
ELSE
|
XABS = ABS( X )
|
||||||
DLAPY2 = W*SQRT( ONE+( Z / W )**2 )
|
YABS = ABS( Y )
|
||||||
|
W = MAX( XABS, YABS )
|
||||||
|
Z = MIN( XABS, YABS )
|
||||||
|
IF( Z.EQ.ZERO ) THEN
|
||||||
|
DLAPY2 = W
|
||||||
|
ELSE
|
||||||
|
DLAPY2 = W*SQRT( ONE+( Z / W )**2 )
|
||||||
|
END IF
|
||||||
END IF
|
END IF
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAPY3 + dependencies
|
*> Download DLAPY3 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapy3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapy3.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapy3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapy3.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy3.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
|
* DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION X, Y, Z
|
* DOUBLE PRECISION X, Y, Z
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -56,22 +56,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
|
DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION X, Y, Z
|
DOUBLE PRECISION X, Y, Z
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLARF + dependencies
|
*> Download DLARF + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarf.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarf.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarf.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarf.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
|
* SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER SIDE
|
* CHARACTER SIDE
|
||||||
* INTEGER INCV, LDC, M, N
|
* INTEGER INCV, LDC, M, N
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * )
|
* DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -112,22 +112,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
|
SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER SIDE
|
CHARACTER SIDE
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLARFB + dependencies
|
*> Download DLARFB + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarfb.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarfb.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarfb.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarfb.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfb.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfb.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
|
* SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
|
||||||
* T, LDT, C, LDC, WORK, LDWORK )
|
* T, LDT, C, LDC, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER DIRECT, SIDE, STOREV, TRANS
|
* CHARACTER DIRECT, SIDE, STOREV, TRANS
|
||||||
* INTEGER K, LDC, LDT, LDV, LDWORK, M, N
|
* INTEGER K, LDC, LDT, LDV, LDWORK, M, N
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ),
|
* DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ),
|
||||||
* $ WORK( LDWORK, * )
|
* $ WORK( LDWORK, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -154,12 +154,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2013
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
|
@ -195,10 +195,10 @@
|
||||||
SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
|
SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
|
||||||
$ T, LDT, C, LDC, WORK, LDWORK )
|
$ T, LDT, C, LDC, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2013
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER DIRECT, SIDE, STOREV, TRANS
|
CHARACTER DIRECT, SIDE, STOREV, TRANS
|
||||||
|
@ -217,12 +217,11 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
CHARACTER TRANST
|
CHARACTER TRANST
|
||||||
INTEGER I, J, LASTV, LASTC, lastv2
|
INTEGER I, J
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
INTEGER ILADLR, ILADLC
|
EXTERNAL LSAME
|
||||||
EXTERNAL LSAME, ILADLR, ILADLC
|
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL DCOPY, DGEMM, DTRMM
|
EXTERNAL DCOPY, DGEMM, DTRMM
|
||||||
|
@ -252,58 +251,53 @@
|
||||||
*
|
*
|
||||||
* Form H * C or H**T * C where C = ( C1 )
|
* Form H * C or H**T * C where C = ( C1 )
|
||||||
* ( C2 )
|
* ( C2 )
|
||||||
*
|
|
||||||
LASTV = MAX( K, ILADLR( M, K, V, LDV ) )
|
|
||||||
LASTC = ILADLC( LASTV, N, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK)
|
* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C1**T
|
* W := C1**T
|
||||||
*
|
*
|
||||||
DO 10 J = 1, K
|
DO 10 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
|
CALL DCOPY( N, C( J, 1 ), LDC, WORK( 1, J ), 1 )
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V1
|
* W := W * V1
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', N,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ K, ONE, V, LDV, WORK, LDWORK )
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( M.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C2**T *V2
|
* W := W + C2**T * V2
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'Transpose', 'No transpose',
|
CALL DGEMM( 'Transpose', 'No transpose', N, K, M-K,
|
||||||
$ LASTC, K, LASTV-K,
|
$ ONE, C( K+1, 1 ), LDC, V( K+1, 1 ), LDV,
|
||||||
$ ONE, C( K+1, 1 ), LDC, V( K+1, 1 ), LDV,
|
$ ONE, WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T**T or W * T
|
* W := W * T**T or W * T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
|
CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', N, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - V * W**T
|
* C := C - V * W**T
|
||||||
*
|
*
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( M.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* C2 := C2 - V2 * W**T
|
* C2 := C2 - V2 * W**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'Transpose',
|
CALL DGEMM( 'No transpose', 'Transpose', M-K, N, K,
|
||||||
$ LASTV-K, LASTC, K,
|
$ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK, ONE,
|
||||||
$ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK, ONE,
|
$ C( K+1, 1 ), LDC )
|
||||||
$ C( K+1, 1 ), LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V1**T
|
* W := W * V1**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', N, K,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ ONE, V, LDV, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C1 := C1 - W**T
|
* C1 := C1 - W**T
|
||||||
*
|
*
|
||||||
DO 30 J = 1, K
|
DO 30 J = 1, K
|
||||||
DO 20 I = 1, LASTC
|
DO 20 I = 1, N
|
||||||
C( J, I ) = C( J, I ) - WORK( I, J )
|
C( J, I ) = C( J, I ) - WORK( I, J )
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
30 CONTINUE
|
30 CONTINUE
|
||||||
|
@ -311,58 +305,53 @@
|
||||||
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
||||||
*
|
*
|
||||||
* Form C * H or C * H**T where C = ( C1 C2 )
|
* Form C * H or C * H**T where C = ( C1 C2 )
|
||||||
*
|
|
||||||
LASTV = MAX( K, ILADLR( N, K, V, LDV ) )
|
|
||||||
LASTC = ILADLR( M, LASTV, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
|
* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C1
|
* W := C1
|
||||||
*
|
*
|
||||||
DO 40 J = 1, K
|
DO 40 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
|
CALL DCOPY( M, C( 1, J ), 1, WORK( 1, J ), 1 )
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V1
|
* W := W * V1
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', M,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ K, ONE, V, LDV, WORK, LDWORK )
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( N.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C2 * V2
|
* W := W + C2 * V2
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'No transpose',
|
CALL DGEMM( 'No transpose', 'No transpose', M, K, N-K,
|
||||||
$ LASTC, K, LASTV-K,
|
$ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV,
|
||||||
$ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV,
|
$ ONE, WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T or W * T**T
|
* W := W * T or W * T**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
|
CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', M, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - W * V**T
|
* C := C - W * V**T
|
||||||
*
|
*
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( N.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* C2 := C2 - W * V2**T
|
* C2 := C2 - W * V2**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'Transpose',
|
CALL DGEMM( 'No transpose', 'Transpose', M, N-K, K,
|
||||||
$ LASTC, LASTV-K, K,
|
$ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV, ONE,
|
||||||
$ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV, ONE,
|
$ C( 1, K+1 ), LDC )
|
||||||
$ C( 1, K+1 ), LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V1**T
|
* W := W * V1**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', M, K,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ ONE, V, LDV, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C1 := C1 - W
|
* C1 := C1 - W
|
||||||
*
|
*
|
||||||
DO 60 J = 1, K
|
DO 60 J = 1, K
|
||||||
DO 50 I = 1, LASTC
|
DO 50 I = 1, M
|
||||||
C( I, J ) = C( I, J ) - WORK( I, J )
|
C( I, J ) = C( I, J ) - WORK( I, J )
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
|
@ -378,36 +367,31 @@
|
||||||
*
|
*
|
||||||
* Form H * C or H**T * C where C = ( C1 )
|
* Form H * C or H**T * C where C = ( C1 )
|
||||||
* ( C2 )
|
* ( C2 )
|
||||||
*
|
|
||||||
LASTC = ILADLC( M, N, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK)
|
* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C2**T
|
* W := C2**T
|
||||||
*
|
*
|
||||||
DO 70 J = 1, K
|
DO 70 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( M-K+J, 1 ), LDC,
|
CALL DCOPY( N, C( M-K+J, 1 ), LDC, WORK( 1, J ), 1 )
|
||||||
$ WORK( 1, J ), 1 )
|
|
||||||
70 CONTINUE
|
70 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V2
|
* W := W * V2
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', N,
|
||||||
$ LASTC, K, ONE, V( M-K+1, 1 ), LDV,
|
$ K, ONE, V( M-K+1, 1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
IF( M.GT.K ) THEN
|
IF( M.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C1**T*V1
|
* W := W + C1**T * V1
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'Transpose', 'No transpose',
|
CALL DGEMM( 'Transpose', 'No transpose', N, K, M-K,
|
||||||
$ LASTC, K, M-K, ONE, C, LDC, V, LDV,
|
$ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T**T or W * T
|
* W := W * T**T or W * T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
|
CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', N, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - V * W**T
|
* C := C - V * W**T
|
||||||
*
|
*
|
||||||
|
@ -415,57 +399,51 @@
|
||||||
*
|
*
|
||||||
* C1 := C1 - V1 * W**T
|
* C1 := C1 - V1 * W**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'Transpose',
|
CALL DGEMM( 'No transpose', 'Transpose', M-K, N, K,
|
||||||
$ M-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK,
|
$ -ONE, V, LDV, WORK, LDWORK, ONE, C, LDC )
|
||||||
$ ONE, C, LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V2**T
|
* W := W * V2**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', N, K,
|
||||||
$ LASTC, K, ONE, V( M-K+1, 1 ), LDV,
|
$ ONE, V( M-K+1, 1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
*
|
*
|
||||||
* C2 := C2 - W**T
|
* C2 := C2 - W**T
|
||||||
*
|
*
|
||||||
DO 90 J = 1, K
|
DO 90 J = 1, K
|
||||||
DO 80 I = 1, LASTC
|
DO 80 I = 1, N
|
||||||
C( M-K+J, I ) = C( M-K+J, I ) - WORK(I, J)
|
C( M-K+J, I ) = C( M-K+J, I ) - WORK( I, J )
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
90 CONTINUE
|
90 CONTINUE
|
||||||
*
|
*
|
||||||
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
||||||
*
|
*
|
||||||
* Form C * H or C * H**T where C = ( C1 C2 )
|
* Form C * H or C * H**T where C = ( C1 C2 )
|
||||||
*
|
|
||||||
LASTC = ILADLR( M, N, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
|
* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C2
|
* W := C2
|
||||||
*
|
*
|
||||||
DO 100 J = 1, K
|
DO 100 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( 1, N-K+J ), 1, WORK( 1, J ), 1 )
|
CALL DCOPY( M, C( 1, N-K+J ), 1, WORK( 1, J ), 1 )
|
||||||
100 CONTINUE
|
100 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V2
|
* W := W * V2
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', M,
|
||||||
$ LASTC, K, ONE, V( N-K+1, 1 ), LDV,
|
$ K, ONE, V( N-K+1, 1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
IF( N.GT.K ) THEN
|
IF( N.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C1 * V1
|
* W := W + C1 * V1
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'No transpose',
|
CALL DGEMM( 'No transpose', 'No transpose', M, K, N-K,
|
||||||
$ LASTC, K, N-K, ONE, C, LDC, V, LDV,
|
$ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T or W * T**T
|
* W := W * T or W * T**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
|
CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', M, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - W * V**T
|
* C := C - W * V**T
|
||||||
*
|
*
|
||||||
|
@ -473,22 +451,20 @@
|
||||||
*
|
*
|
||||||
* C1 := C1 - W * V1**T
|
* C1 := C1 - W * V1**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'Transpose',
|
CALL DGEMM( 'No transpose', 'Transpose', M, N-K, K,
|
||||||
$ LASTC, N-K, K, -ONE, WORK, LDWORK, V, LDV,
|
$ -ONE, WORK, LDWORK, V, LDV, ONE, C, LDC )
|
||||||
$ ONE, C, LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V2**T
|
* W := W * V2**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', M, K,
|
||||||
$ LASTC, K, ONE, V( N-K+1, 1 ), LDV,
|
$ ONE, V( N-K+1, 1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
*
|
*
|
||||||
* C2 := C2 - W
|
* C2 := C2 - W
|
||||||
*
|
*
|
||||||
DO 120 J = 1, K
|
DO 120 J = 1, K
|
||||||
DO 110 I = 1, LASTC
|
DO 110 I = 1, M
|
||||||
C( I, N-K+J ) = C( I, N-K+J ) - WORK(I, J)
|
C( I, N-K+J ) = C( I, N-K+J ) - WORK( I, J )
|
||||||
110 CONTINUE
|
110 CONTINUE
|
||||||
120 CONTINUE
|
120 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
|
@ -505,58 +481,53 @@
|
||||||
*
|
*
|
||||||
* Form H * C or H**T * C where C = ( C1 )
|
* Form H * C or H**T * C where C = ( C1 )
|
||||||
* ( C2 )
|
* ( C2 )
|
||||||
*
|
|
||||||
LASTV = MAX( K, ILADLC( K, M, V, LDV ) )
|
|
||||||
LASTC = ILADLC( LASTV, N, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK)
|
* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C1**T
|
* W := C1**T
|
||||||
*
|
*
|
||||||
DO 130 J = 1, K
|
DO 130 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
|
CALL DCOPY( N, C( J, 1 ), LDC, WORK( 1, J ), 1 )
|
||||||
130 CONTINUE
|
130 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V1**T
|
* W := W * V1**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', N, K,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ ONE, V, LDV, WORK, LDWORK )
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( M.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C2**T*V2**T
|
* W := W + C2**T * V2**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'Transpose', 'Transpose',
|
CALL DGEMM( 'Transpose', 'Transpose', N, K, M-K, ONE,
|
||||||
$ LASTC, K, LASTV-K,
|
$ C( K+1, 1 ), LDC, V( 1, K+1 ), LDV, ONE,
|
||||||
$ ONE, C( K+1, 1 ), LDC, V( 1, K+1 ), LDV,
|
$ WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T**T or W * T
|
* W := W * T**T or W * T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
|
CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', N, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - V**T * W**T
|
* C := C - V**T * W**T
|
||||||
*
|
*
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( M.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* C2 := C2 - V2**T * W**T
|
* C2 := C2 - V2**T * W**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'Transpose', 'Transpose',
|
CALL DGEMM( 'Transpose', 'Transpose', M-K, N, K, -ONE,
|
||||||
$ LASTV-K, LASTC, K,
|
$ V( 1, K+1 ), LDV, WORK, LDWORK, ONE,
|
||||||
$ -ONE, V( 1, K+1 ), LDV, WORK, LDWORK,
|
$ C( K+1, 1 ), LDC )
|
||||||
$ ONE, C( K+1, 1 ), LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V1
|
* W := W * V1
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', N,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ K, ONE, V, LDV, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C1 := C1 - W**T
|
* C1 := C1 - W**T
|
||||||
*
|
*
|
||||||
DO 150 J = 1, K
|
DO 150 J = 1, K
|
||||||
DO 140 I = 1, LASTC
|
DO 140 I = 1, N
|
||||||
C( J, I ) = C( J, I ) - WORK( I, J )
|
C( J, I ) = C( J, I ) - WORK( I, J )
|
||||||
140 CONTINUE
|
140 CONTINUE
|
||||||
150 CONTINUE
|
150 CONTINUE
|
||||||
|
@ -564,58 +535,53 @@
|
||||||
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
||||||
*
|
*
|
||||||
* Form C * H or C * H**T where C = ( C1 C2 )
|
* Form C * H or C * H**T where C = ( C1 C2 )
|
||||||
*
|
|
||||||
LASTV = MAX( K, ILADLC( K, N, V, LDV ) )
|
|
||||||
LASTC = ILADLR( M, LASTV, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK)
|
* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C1
|
* W := C1
|
||||||
*
|
*
|
||||||
DO 160 J = 1, K
|
DO 160 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
|
CALL DCOPY( M, C( 1, J ), 1, WORK( 1, J ), 1 )
|
||||||
160 CONTINUE
|
160 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V1**T
|
* W := W * V1**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', M, K,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ ONE, V, LDV, WORK, LDWORK )
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( N.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C2 * V2**T
|
* W := W + C2 * V2**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'Transpose',
|
CALL DGEMM( 'No transpose', 'Transpose', M, K, N-K,
|
||||||
$ LASTC, K, LASTV-K,
|
$ ONE, C( 1, K+1 ), LDC, V( 1, K+1 ), LDV,
|
||||||
$ ONE, C( 1, K+1 ), LDC, V( 1, K+1 ), LDV,
|
$ ONE, WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T or W * T**T
|
* W := W * T or W * T**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
|
CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', M, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - W * V
|
* C := C - W * V
|
||||||
*
|
*
|
||||||
IF( LASTV.GT.K ) THEN
|
IF( N.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* C2 := C2 - W * V2
|
* C2 := C2 - W * V2
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'No transpose',
|
CALL DGEMM( 'No transpose', 'No transpose', M, N-K, K,
|
||||||
$ LASTC, LASTV-K, K,
|
$ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV, ONE,
|
||||||
$ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV,
|
$ C( 1, K+1 ), LDC )
|
||||||
$ ONE, C( 1, K+1 ), LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V1
|
* W := W * V1
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', M,
|
||||||
$ LASTC, K, ONE, V, LDV, WORK, LDWORK )
|
$ K, ONE, V, LDV, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C1 := C1 - W
|
* C1 := C1 - W
|
||||||
*
|
*
|
||||||
DO 180 J = 1, K
|
DO 180 J = 1, K
|
||||||
DO 170 I = 1, LASTC
|
DO 170 I = 1, M
|
||||||
C( I, J ) = C( I, J ) - WORK( I, J )
|
C( I, J ) = C( I, J ) - WORK( I, J )
|
||||||
170 CONTINUE
|
170 CONTINUE
|
||||||
180 CONTINUE
|
180 CONTINUE
|
||||||
|
@ -631,36 +597,31 @@
|
||||||
*
|
*
|
||||||
* Form H * C or H**T * C where C = ( C1 )
|
* Form H * C or H**T * C where C = ( C1 )
|
||||||
* ( C2 )
|
* ( C2 )
|
||||||
*
|
|
||||||
LASTC = ILADLC( M, N, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK)
|
* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C2**T
|
* W := C2**T
|
||||||
*
|
*
|
||||||
DO 190 J = 1, K
|
DO 190 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( M-K+J, 1 ), LDC,
|
CALL DCOPY( N, C( M-K+J, 1 ), LDC, WORK( 1, J ), 1 )
|
||||||
$ WORK( 1, J ), 1 )
|
|
||||||
190 CONTINUE
|
190 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V2**T
|
* W := W * V2**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', N, K,
|
||||||
$ LASTC, K, ONE, V( 1, M-K+1 ), LDV,
|
$ ONE, V( 1, M-K+1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
IF( M.GT.K ) THEN
|
IF( M.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C1**T * V1**T
|
* W := W + C1**T * V1**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'Transpose', 'Transpose',
|
CALL DGEMM( 'Transpose', 'Transpose', N, K, M-K, ONE,
|
||||||
$ LASTC, K, M-K, ONE, C, LDC, V, LDV,
|
$ C, LDC, V, LDV, ONE, WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T**T or W * T
|
* W := W * T**T or W * T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
|
CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', N, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - V**T * W**T
|
* C := C - V**T * W**T
|
||||||
*
|
*
|
||||||
|
@ -668,58 +629,51 @@
|
||||||
*
|
*
|
||||||
* C1 := C1 - V1**T * W**T
|
* C1 := C1 - V1**T * W**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'Transpose', 'Transpose',
|
CALL DGEMM( 'Transpose', 'Transpose', M-K, N, K, -ONE,
|
||||||
$ M-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK,
|
$ V, LDV, WORK, LDWORK, ONE, C, LDC )
|
||||||
$ ONE, C, LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V2
|
* W := W * V2
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', N,
|
||||||
$ LASTC, K, ONE, V( 1, M-K+1 ), LDV,
|
$ K, ONE, V( 1, M-K+1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
*
|
*
|
||||||
* C2 := C2 - W**T
|
* C2 := C2 - W**T
|
||||||
*
|
*
|
||||||
DO 210 J = 1, K
|
DO 210 J = 1, K
|
||||||
DO 200 I = 1, LASTC
|
DO 200 I = 1, N
|
||||||
C( M-K+J, I ) = C( M-K+J, I ) - WORK(I, J)
|
C( M-K+J, I ) = C( M-K+J, I ) - WORK( I, J )
|
||||||
200 CONTINUE
|
200 CONTINUE
|
||||||
210 CONTINUE
|
210 CONTINUE
|
||||||
*
|
*
|
||||||
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
|
||||||
*
|
*
|
||||||
* Form C * H or C * H**T where C = ( C1 C2 )
|
* Form C * H or C * H' where C = ( C1 C2 )
|
||||||
*
|
|
||||||
LASTC = ILADLR( M, N, C, LDC )
|
|
||||||
*
|
*
|
||||||
* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK)
|
* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK)
|
||||||
*
|
*
|
||||||
* W := C2
|
* W := C2
|
||||||
*
|
*
|
||||||
DO 220 J = 1, K
|
DO 220 J = 1, K
|
||||||
CALL DCOPY( LASTC, C( 1, N-K+J ), 1,
|
CALL DCOPY( M, C( 1, N-K+J ), 1, WORK( 1, J ), 1 )
|
||||||
$ WORK( 1, J ), 1 )
|
|
||||||
220 CONTINUE
|
220 CONTINUE
|
||||||
*
|
*
|
||||||
* W := W * V2**T
|
* W := W * V2**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', M, K,
|
||||||
$ LASTC, K, ONE, V( 1, N-K+1 ), LDV,
|
$ ONE, V( 1, N-K+1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
IF( N.GT.K ) THEN
|
IF( N.GT.K ) THEN
|
||||||
*
|
*
|
||||||
* W := W + C1 * V1**T
|
* W := W + C1 * V1**T
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'Transpose',
|
CALL DGEMM( 'No transpose', 'Transpose', M, K, N-K,
|
||||||
$ LASTC, K, N-K, ONE, C, LDC, V, LDV,
|
$ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK )
|
||||||
$ ONE, WORK, LDWORK )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * T or W * T**T
|
* W := W * T or W * T**T
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
|
CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', M, K,
|
||||||
$ LASTC, K, ONE, T, LDT, WORK, LDWORK )
|
$ ONE, T, LDT, WORK, LDWORK )
|
||||||
*
|
*
|
||||||
* C := C - W * V
|
* C := C - W * V
|
||||||
*
|
*
|
||||||
|
@ -727,22 +681,20 @@
|
||||||
*
|
*
|
||||||
* C1 := C1 - W * V1
|
* C1 := C1 - W * V1
|
||||||
*
|
*
|
||||||
CALL DGEMM( 'No transpose', 'No transpose',
|
CALL DGEMM( 'No transpose', 'No transpose', M, N-K, K,
|
||||||
$ LASTC, N-K, K, -ONE, WORK, LDWORK, V, LDV,
|
$ -ONE, WORK, LDWORK, V, LDV, ONE, C, LDC )
|
||||||
$ ONE, C, LDC )
|
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* W := W * V2
|
* W := W * V2
|
||||||
*
|
*
|
||||||
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
|
CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', M,
|
||||||
$ LASTC, K, ONE, V( 1, N-K+1 ), LDV,
|
$ K, ONE, V( 1, N-K+1 ), LDV, WORK, LDWORK )
|
||||||
$ WORK, LDWORK )
|
|
||||||
*
|
*
|
||||||
* C1 := C1 - W
|
* C1 := C1 - W
|
||||||
*
|
*
|
||||||
DO 240 J = 1, K
|
DO 240 J = 1, K
|
||||||
DO 230 I = 1, LASTC
|
DO 230 I = 1, M
|
||||||
C( I, N-K+J ) = C( I, N-K+J ) - WORK(I, J)
|
C( I, N-K+J ) = C( I, N-K+J ) - WORK( I, J )
|
||||||
230 CONTINUE
|
230 CONTINUE
|
||||||
240 CONTINUE
|
240 CONTINUE
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLARFG + dependencies
|
*> Download DLARFG + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarfg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarfg.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarfg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarfg.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfg.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
|
* SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INCX, N
|
* INTEGER INCX, N
|
||||||
* DOUBLE PRECISION ALPHA, TAU
|
* DOUBLE PRECISION ALPHA, TAU
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION X( * )
|
* DOUBLE PRECISION X( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -94,22 +94,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
|
SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INCX, N
|
INTEGER INCX, N
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLARFT + dependencies
|
*> Download DLARFT + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarft.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarft.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarft.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarft.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarft.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarft.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
|
* SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER DIRECT, STOREV
|
* CHARACTER DIRECT, STOREV
|
||||||
* INTEGER K, LDT, LDV, N
|
* INTEGER K, LDT, LDV, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * )
|
* DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -125,12 +125,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
|
@ -163,10 +163,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
|
SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER DIRECT, STOREV
|
CHARACTER DIRECT, STOREV
|
||||||
|
@ -221,13 +221,13 @@
|
||||||
END DO
|
END DO
|
||||||
DO J = 1, I-1
|
DO J = 1, I-1
|
||||||
T( J, I ) = -TAU( I ) * V( I , J )
|
T( J, I ) = -TAU( I ) * V( I , J )
|
||||||
END DO
|
END DO
|
||||||
J = MIN( LASTV, PREVLASTV )
|
J = MIN( LASTV, PREVLASTV )
|
||||||
*
|
*
|
||||||
* T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)**T * V(i:j,i)
|
* T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)**T * V(i:j,i)
|
||||||
*
|
*
|
||||||
CALL DGEMV( 'Transpose', J-I, I-1, -TAU( I ),
|
CALL DGEMV( 'Transpose', J-I, I-1, -TAU( I ),
|
||||||
$ V( I+1, 1 ), LDV, V( I+1, I ), 1, ONE,
|
$ V( I+1, 1 ), LDV, V( I+1, I ), 1, ONE,
|
||||||
$ T( 1, I ), 1 )
|
$ T( 1, I ), 1 )
|
||||||
ELSE
|
ELSE
|
||||||
* Skip any trailing zeros.
|
* Skip any trailing zeros.
|
||||||
|
@ -236,7 +236,7 @@
|
||||||
END DO
|
END DO
|
||||||
DO J = 1, I-1
|
DO J = 1, I-1
|
||||||
T( J, I ) = -TAU( I ) * V( J , I )
|
T( J, I ) = -TAU( I ) * V( J , I )
|
||||||
END DO
|
END DO
|
||||||
J = MIN( LASTV, PREVLASTV )
|
J = MIN( LASTV, PREVLASTV )
|
||||||
*
|
*
|
||||||
* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**T
|
* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**T
|
||||||
|
@ -280,7 +280,7 @@
|
||||||
END DO
|
END DO
|
||||||
DO J = I+1, K
|
DO J = I+1, K
|
||||||
T( J, I ) = -TAU( I ) * V( N-K+I , J )
|
T( J, I ) = -TAU( I ) * V( N-K+I , J )
|
||||||
END DO
|
END DO
|
||||||
J = MAX( LASTV, PREVLASTV )
|
J = MAX( LASTV, PREVLASTV )
|
||||||
*
|
*
|
||||||
* T(i+1:k,i) = -tau(i) * V(j:n-k+i,i+1:k)**T * V(j:n-k+i,i)
|
* T(i+1:k,i) = -tau(i) * V(j:n-k+i,i+1:k)**T * V(j:n-k+i,i)
|
||||||
|
@ -295,7 +295,7 @@
|
||||||
END DO
|
END DO
|
||||||
DO J = I+1, K
|
DO J = I+1, K
|
||||||
T( J, I ) = -TAU( I ) * V( J, N-K+I )
|
T( J, I ) = -TAU( I ) * V( J, N-K+I )
|
||||||
END DO
|
END DO
|
||||||
J = MAX( LASTV, PREVLASTV )
|
J = MAX( LASTV, PREVLASTV )
|
||||||
*
|
*
|
||||||
* T(i+1:k,i) = -tau(i) * V(i+1:k,j:n-k+i) * V(i,j:n-k+i)**T
|
* T(i+1:k,i) = -tau(i) * V(i+1:k,j:n-k+i) * V(i,j:n-k+i)**T
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLARTG + dependencies
|
*> Download DLARTG + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlartg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlartg.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlartg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlartg.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartg.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartg.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLARTG( F, G, CS, SN, R )
|
* SUBROUTINE DLARTG( F, G, CS, SN, R )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION CS, F, G, R, SN
|
* DOUBLE PRECISION CS, F, G, R, SN
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -85,22 +85,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLARTG( F, G, CS, SN, R )
|
SUBROUTINE DLARTG( F, G, CS, SN, R )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION CS, F, G, R, SN
|
DOUBLE PRECISION CS, F, G, R, SN
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLAS2 + dependencies
|
*> Download DLAS2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlas2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlas2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlas2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlas2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlas2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlas2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLAS2( F, G, H, SSMIN, SSMAX )
|
* SUBROUTINE DLAS2( F, G, H, SSMIN, SSMAX )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION F, G, H, SSMAX, SSMIN
|
* DOUBLE PRECISION F, G, H, SSMAX, SSMIN
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -73,14 +73,14 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
*> \par Further Details:
|
*> \par Further Details:
|
||||||
* =====================
|
* =====================
|
||||||
|
@ -107,10 +107,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLAS2( F, G, H, SSMIN, SSMAX )
|
SUBROUTINE DLAS2( F, G, H, SSMIN, SSMAX )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION F, G, H, SSMAX, SSMIN
|
DOUBLE PRECISION F, G, H, SSMAX, SSMIN
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASCL + dependencies
|
*> Download DLASCL + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlascl.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlascl.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlascl.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlascl.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlascl.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlascl.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
|
* SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER TYPE
|
* CHARACTER TYPE
|
||||||
* INTEGER INFO, KL, KU, LDA, M, N
|
* INTEGER INFO, KL, KU, LDA, M, N
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * )
|
* DOUBLE PRECISION A( LDA, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -114,7 +114,11 @@
|
||||||
*> \param[in] LDA
|
*> \param[in] LDA
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> LDA is INTEGER
|
*> LDA is INTEGER
|
||||||
*> The leading dimension of the array A. LDA >= max(1,M).
|
*> The leading dimension of the array A.
|
||||||
|
*> If TYPE = 'G', 'L', 'U', 'H', LDA >= max(1,M);
|
||||||
|
*> TYPE = 'B', LDA >= KL+1;
|
||||||
|
*> TYPE = 'Q', LDA >= KU+1;
|
||||||
|
*> TYPE = 'Z', LDA >= 2*KL+KU+1.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] INFO
|
*> \param[out] INFO
|
||||||
|
@ -127,22 +131,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
|
SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER TYPE
|
CHARACTER TYPE
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,231 @@
|
||||||
|
*> \brief \b DLASD5 computes the square root of the i-th eigenvalue of a positive symmetric rank-one modification of a 2-by-2 diagonal matrix. Used by sbdsdc.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLASD5 + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasd5.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasd5.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd5.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLASD5( I, D, Z, DELTA, RHO, DSIGMA, WORK )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER I
|
||||||
|
* DOUBLE PRECISION DSIGMA, RHO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION D( 2 ), DELTA( 2 ), WORK( 2 ), Z( 2 )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> This subroutine computes the square root of the I-th eigenvalue
|
||||||
|
*> of a positive symmetric rank-one modification of a 2-by-2 diagonal
|
||||||
|
*> matrix
|
||||||
|
*>
|
||||||
|
*> diag( D ) * diag( D ) + RHO * Z * transpose(Z) .
|
||||||
|
*>
|
||||||
|
*> The diagonal entries in the array D are assumed to satisfy
|
||||||
|
*>
|
||||||
|
*> 0 <= D(i) < D(j) for i < j .
|
||||||
|
*>
|
||||||
|
*> We also assume RHO > 0 and that the Euclidean norm of the vector
|
||||||
|
*> Z is one.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] I
|
||||||
|
*> \verbatim
|
||||||
|
*> I is INTEGER
|
||||||
|
*> The index of the eigenvalue to be computed. I = 1 or I = 2.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] D
|
||||||
|
*> \verbatim
|
||||||
|
*> D is DOUBLE PRECISION array, dimension ( 2 )
|
||||||
|
*> The original eigenvalues. We assume 0 <= D(1) < D(2).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is DOUBLE PRECISION array, dimension ( 2 )
|
||||||
|
*> The components of the updating vector.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DELTA
|
||||||
|
*> \verbatim
|
||||||
|
*> DELTA is DOUBLE PRECISION array, dimension ( 2 )
|
||||||
|
*> Contains (D(j) - sigma_I) in its j-th component.
|
||||||
|
*> The vector DELTA contains the information necessary
|
||||||
|
*> to construct the eigenvectors.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] RHO
|
||||||
|
*> \verbatim
|
||||||
|
*> RHO is DOUBLE PRECISION
|
||||||
|
*> The scalar in the symmetric updating formula.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DSIGMA
|
||||||
|
*> \verbatim
|
||||||
|
*> DSIGMA is DOUBLE PRECISION
|
||||||
|
*> The computed sigma_I, the I-th updated eigenvalue.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension ( 2 )
|
||||||
|
*> WORK contains (D(j) + sigma_I) in its j-th component.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date December 2016
|
||||||
|
*
|
||||||
|
*> \ingroup OTHERauxiliary
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ren-Cang Li, Computer Science Division, University of California
|
||||||
|
*> at Berkeley, USA
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLASD5( I, D, Z, DELTA, RHO, DSIGMA, WORK )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* December 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER I
|
||||||
|
DOUBLE PRECISION DSIGMA, RHO
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION D( 2 ), DELTA( 2 ), WORK( 2 ), Z( 2 )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO, ONE, TWO, THREE, FOUR
|
||||||
|
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0, TWO = 2.0D+0,
|
||||||
|
$ THREE = 3.0D+0, FOUR = 4.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
DOUBLE PRECISION B, C, DEL, DELSQ, TAU, W
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC ABS, SQRT
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
DEL = D( 2 ) - D( 1 )
|
||||||
|
DELSQ = DEL*( D( 2 )+D( 1 ) )
|
||||||
|
IF( I.EQ.1 ) THEN
|
||||||
|
W = ONE + FOUR*RHO*( Z( 2 )*Z( 2 ) / ( D( 1 )+THREE*D( 2 ) )-
|
||||||
|
$ Z( 1 )*Z( 1 ) / ( THREE*D( 1 )+D( 2 ) ) ) / DEL
|
||||||
|
IF( W.GT.ZERO ) THEN
|
||||||
|
B = DELSQ + RHO*( Z( 1 )*Z( 1 )+Z( 2 )*Z( 2 ) )
|
||||||
|
C = RHO*Z( 1 )*Z( 1 )*DELSQ
|
||||||
|
*
|
||||||
|
* B > ZERO, always
|
||||||
|
*
|
||||||
|
* The following TAU is DSIGMA * DSIGMA - D( 1 ) * D( 1 )
|
||||||
|
*
|
||||||
|
TAU = TWO*C / ( B+SQRT( ABS( B*B-FOUR*C ) ) )
|
||||||
|
*
|
||||||
|
* The following TAU is DSIGMA - D( 1 )
|
||||||
|
*
|
||||||
|
TAU = TAU / ( D( 1 )+SQRT( D( 1 )*D( 1 )+TAU ) )
|
||||||
|
DSIGMA = D( 1 ) + TAU
|
||||||
|
DELTA( 1 ) = -TAU
|
||||||
|
DELTA( 2 ) = DEL - TAU
|
||||||
|
WORK( 1 ) = TWO*D( 1 ) + TAU
|
||||||
|
WORK( 2 ) = ( D( 1 )+TAU ) + D( 2 )
|
||||||
|
* DELTA( 1 ) = -Z( 1 ) / TAU
|
||||||
|
* DELTA( 2 ) = Z( 2 ) / ( DEL-TAU )
|
||||||
|
ELSE
|
||||||
|
B = -DELSQ + RHO*( Z( 1 )*Z( 1 )+Z( 2 )*Z( 2 ) )
|
||||||
|
C = RHO*Z( 2 )*Z( 2 )*DELSQ
|
||||||
|
*
|
||||||
|
* The following TAU is DSIGMA * DSIGMA - D( 2 ) * D( 2 )
|
||||||
|
*
|
||||||
|
IF( B.GT.ZERO ) THEN
|
||||||
|
TAU = -TWO*C / ( B+SQRT( B*B+FOUR*C ) )
|
||||||
|
ELSE
|
||||||
|
TAU = ( B-SQRT( B*B+FOUR*C ) ) / TWO
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* The following TAU is DSIGMA - D( 2 )
|
||||||
|
*
|
||||||
|
TAU = TAU / ( D( 2 )+SQRT( ABS( D( 2 )*D( 2 )+TAU ) ) )
|
||||||
|
DSIGMA = D( 2 ) + TAU
|
||||||
|
DELTA( 1 ) = -( DEL+TAU )
|
||||||
|
DELTA( 2 ) = -TAU
|
||||||
|
WORK( 1 ) = D( 1 ) + TAU + D( 2 )
|
||||||
|
WORK( 2 ) = TWO*D( 2 ) + TAU
|
||||||
|
* DELTA( 1 ) = -Z( 1 ) / ( DEL+TAU )
|
||||||
|
* DELTA( 2 ) = -Z( 2 ) / TAU
|
||||||
|
END IF
|
||||||
|
* TEMP = SQRT( DELTA( 1 )*DELTA( 1 )+DELTA( 2 )*DELTA( 2 ) )
|
||||||
|
* DELTA( 1 ) = DELTA( 1 ) / TEMP
|
||||||
|
* DELTA( 2 ) = DELTA( 2 ) / TEMP
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Now I=2
|
||||||
|
*
|
||||||
|
B = -DELSQ + RHO*( Z( 1 )*Z( 1 )+Z( 2 )*Z( 2 ) )
|
||||||
|
C = RHO*Z( 2 )*Z( 2 )*DELSQ
|
||||||
|
*
|
||||||
|
* The following TAU is DSIGMA * DSIGMA - D( 2 ) * D( 2 )
|
||||||
|
*
|
||||||
|
IF( B.GT.ZERO ) THEN
|
||||||
|
TAU = ( B+SQRT( B*B+FOUR*C ) ) / TWO
|
||||||
|
ELSE
|
||||||
|
TAU = TWO*C / ( -B+SQRT( B*B+FOUR*C ) )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* The following TAU is DSIGMA - D( 2 )
|
||||||
|
*
|
||||||
|
TAU = TAU / ( D( 2 )+SQRT( D( 2 )*D( 2 )+TAU ) )
|
||||||
|
DSIGMA = D( 2 ) + TAU
|
||||||
|
DELTA( 1 ) = -( DEL+TAU )
|
||||||
|
DELTA( 2 ) = -TAU
|
||||||
|
WORK( 1 ) = D( 1 ) + TAU + D( 2 )
|
||||||
|
WORK( 2 ) = TWO*D( 2 ) + TAU
|
||||||
|
* DELTA( 1 ) = -Z( 1 ) / ( DEL+TAU )
|
||||||
|
* DELTA( 2 ) = -Z( 2 ) / TAU
|
||||||
|
* TEMP = SQRT( DELTA( 1 )*DELTA( 1 )+DELTA( 2 )*DELTA( 2 ) )
|
||||||
|
* DELTA( 1 ) = DELTA( 1 ) / TEMP
|
||||||
|
* DELTA( 2 ) = DELTA( 2 ) / TEMP
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLASD5
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,443 @@
|
||||||
|
*> \brief \b DLASD6 computes the SVD of an updated upper bidiagonal matrix obtained by merging two smaller ones by appending a row. Used by sbdsdc.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLASD6 + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasd6.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasd6.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd6.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLASD6( ICOMPQ, NL, NR, SQRE, D, VF, VL, ALPHA, BETA,
|
||||||
|
* IDXQ, PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM,
|
||||||
|
* LDGNUM, POLES, DIFL, DIFR, Z, K, C, S, WORK,
|
||||||
|
* IWORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
|
||||||
|
* $ NR, SQRE
|
||||||
|
* DOUBLE PRECISION ALPHA, BETA, C, S
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER GIVCOL( LDGCOL, * ), IDXQ( * ), IWORK( * ),
|
||||||
|
* $ PERM( * )
|
||||||
|
* DOUBLE PRECISION D( * ), DIFL( * ), DIFR( * ),
|
||||||
|
* $ GIVNUM( LDGNUM, * ), POLES( LDGNUM, * ),
|
||||||
|
* $ VF( * ), VL( * ), WORK( * ), Z( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLASD6 computes the SVD of an updated upper bidiagonal matrix B
|
||||||
|
*> obtained by merging two smaller ones by appending a row. This
|
||||||
|
*> routine is used only for the problem which requires all singular
|
||||||
|
*> values and optionally singular vector matrices in factored form.
|
||||||
|
*> B is an N-by-M matrix with N = NL + NR + 1 and M = N + SQRE.
|
||||||
|
*> A related subroutine, DLASD1, handles the case in which all singular
|
||||||
|
*> values and singular vectors of the bidiagonal matrix are desired.
|
||||||
|
*>
|
||||||
|
*> DLASD6 computes the SVD as follows:
|
||||||
|
*>
|
||||||
|
*> ( D1(in) 0 0 0 )
|
||||||
|
*> B = U(in) * ( Z1**T a Z2**T b ) * VT(in)
|
||||||
|
*> ( 0 0 D2(in) 0 )
|
||||||
|
*>
|
||||||
|
*> = U(out) * ( D(out) 0) * VT(out)
|
||||||
|
*>
|
||||||
|
*> where Z**T = (Z1**T a Z2**T b) = u**T VT**T, and u is a vector of dimension M
|
||||||
|
*> with ALPHA and BETA in the NL+1 and NL+2 th entries and zeros
|
||||||
|
*> elsewhere; and the entry b is empty if SQRE = 0.
|
||||||
|
*>
|
||||||
|
*> The singular values of B can be computed using D1, D2, the first
|
||||||
|
*> components of all the right singular vectors of the lower block, and
|
||||||
|
*> the last components of all the right singular vectors of the upper
|
||||||
|
*> block. These components are stored and updated in VF and VL,
|
||||||
|
*> respectively, in DLASD6. Hence U and VT are not explicitly
|
||||||
|
*> referenced.
|
||||||
|
*>
|
||||||
|
*> The singular values are stored in D. The algorithm consists of two
|
||||||
|
*> stages:
|
||||||
|
*>
|
||||||
|
*> The first stage consists of deflating the size of the problem
|
||||||
|
*> when there are multiple singular values or if there is a zero
|
||||||
|
*> in the Z vector. For each such occurrence the dimension of the
|
||||||
|
*> secular equation problem is reduced by one. This stage is
|
||||||
|
*> performed by the routine DLASD7.
|
||||||
|
*>
|
||||||
|
*> The second stage consists of calculating the updated
|
||||||
|
*> singular values. This is done by finding the roots of the
|
||||||
|
*> secular equation via the routine DLASD4 (as called by DLASD8).
|
||||||
|
*> This routine also updates VF and VL and computes the distances
|
||||||
|
*> between the updated singular values and the old singular
|
||||||
|
*> values.
|
||||||
|
*>
|
||||||
|
*> DLASD6 is called from DLASDA.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] ICOMPQ
|
||||||
|
*> \verbatim
|
||||||
|
*> ICOMPQ is INTEGER
|
||||||
|
*> Specifies whether singular vectors are to be computed in
|
||||||
|
*> factored form:
|
||||||
|
*> = 0: Compute singular values only.
|
||||||
|
*> = 1: Compute singular vectors in factored form as well.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NL
|
||||||
|
*> \verbatim
|
||||||
|
*> NL is INTEGER
|
||||||
|
*> The row dimension of the upper block. NL >= 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NR
|
||||||
|
*> \verbatim
|
||||||
|
*> NR is INTEGER
|
||||||
|
*> The row dimension of the lower block. NR >= 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SQRE
|
||||||
|
*> \verbatim
|
||||||
|
*> SQRE is INTEGER
|
||||||
|
*> = 0: the lower block is an NR-by-NR square matrix.
|
||||||
|
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
|
||||||
|
*>
|
||||||
|
*> The bidiagonal matrix has row dimension N = NL + NR + 1,
|
||||||
|
*> and column dimension M = N + SQRE.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] D
|
||||||
|
*> \verbatim
|
||||||
|
*> D is DOUBLE PRECISION array, dimension ( NL+NR+1 ).
|
||||||
|
*> On entry D(1:NL,1:NL) contains the singular values of the
|
||||||
|
*> upper block, and D(NL+2:N) contains the singular values
|
||||||
|
*> of the lower block. On exit D(1:N) contains the singular
|
||||||
|
*> values of the modified matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] VF
|
||||||
|
*> \verbatim
|
||||||
|
*> VF is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> On entry, VF(1:NL+1) contains the first components of all
|
||||||
|
*> right singular vectors of the upper block; and VF(NL+2:M)
|
||||||
|
*> contains the first components of all right singular vectors
|
||||||
|
*> of the lower block. On exit, VF contains the first components
|
||||||
|
*> of all right singular vectors of the bidiagonal matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] VL
|
||||||
|
*> \verbatim
|
||||||
|
*> VL is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> On entry, VL(1:NL+1) contains the last components of all
|
||||||
|
*> right singular vectors of the upper block; and VL(NL+2:M)
|
||||||
|
*> contains the last components of all right singular vectors of
|
||||||
|
*> the lower block. On exit, VL contains the last components of
|
||||||
|
*> all right singular vectors of the bidiagonal matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] ALPHA
|
||||||
|
*> \verbatim
|
||||||
|
*> ALPHA is DOUBLE PRECISION
|
||||||
|
*> Contains the diagonal element associated with the added row.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] BETA
|
||||||
|
*> \verbatim
|
||||||
|
*> BETA is DOUBLE PRECISION
|
||||||
|
*> Contains the off-diagonal element associated with the added
|
||||||
|
*> row.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] IDXQ
|
||||||
|
*> \verbatim
|
||||||
|
*> IDXQ is INTEGER array, dimension ( N )
|
||||||
|
*> This contains the permutation which will reintegrate the
|
||||||
|
*> subproblem just solved back into sorted order, i.e.
|
||||||
|
*> D( IDXQ( I = 1, N ) ) will be in ascending order.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] PERM
|
||||||
|
*> \verbatim
|
||||||
|
*> PERM is INTEGER array, dimension ( N )
|
||||||
|
*> The permutations (from deflation and sorting) to be applied
|
||||||
|
*> to each block. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVPTR
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVPTR is INTEGER
|
||||||
|
*> The number of Givens rotations which took place in this
|
||||||
|
*> subproblem. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVCOL is INTEGER array, dimension ( LDGCOL, 2 )
|
||||||
|
*> Each pair of numbers indicates a pair of columns to take place
|
||||||
|
*> in a Givens rotation. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGCOL is INTEGER
|
||||||
|
*> leading dimension of GIVCOL, must be at least N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVNUM is DOUBLE PRECISION array, dimension ( LDGNUM, 2 )
|
||||||
|
*> Each number indicates the C or S value to be used in the
|
||||||
|
*> corresponding Givens rotation. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGNUM is INTEGER
|
||||||
|
*> The leading dimension of GIVNUM and POLES, must be at least N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] POLES
|
||||||
|
*> \verbatim
|
||||||
|
*> POLES is DOUBLE PRECISION array, dimension ( LDGNUM, 2 )
|
||||||
|
*> On exit, POLES(1,*) is an array containing the new singular
|
||||||
|
*> values obtained from solving the secular equation, and
|
||||||
|
*> POLES(2,*) is an array containing the poles in the secular
|
||||||
|
*> equation. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DIFL
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFL is DOUBLE PRECISION array, dimension ( N )
|
||||||
|
*> On exit, DIFL(I) is the distance between I-th updated
|
||||||
|
*> (undeflated) singular value and the I-th (undeflated) old
|
||||||
|
*> singular value.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DIFR
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFR is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDDIFR, 2 ) if ICOMPQ = 1 and
|
||||||
|
*> dimension ( K ) if ICOMPQ = 0.
|
||||||
|
*> On exit, DIFR(I,1) = D(I) - DSIGMA(I+1), DIFR(K,1) is not
|
||||||
|
*> defined and will not be referenced.
|
||||||
|
*>
|
||||||
|
*> If ICOMPQ = 1, DIFR(1:K,2) is an array containing the
|
||||||
|
*> normalizing factors for the right singular vector matrix.
|
||||||
|
*>
|
||||||
|
*> See DLASD8 for details on DIFL and DIFR.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> The first elements of this array contain the components
|
||||||
|
*> of the deflation-adjusted updating row vector.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] K
|
||||||
|
*> \verbatim
|
||||||
|
*> K is INTEGER
|
||||||
|
*> Contains the dimension of the non-deflated matrix,
|
||||||
|
*> This is the order of the related secular equation. 1 <= K <=N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION
|
||||||
|
*> C contains garbage if SQRE =0 and the C-value of a Givens
|
||||||
|
*> rotation related to the right null space if SQRE = 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] S
|
||||||
|
*> \verbatim
|
||||||
|
*> S is DOUBLE PRECISION
|
||||||
|
*> S contains garbage if SQRE =0 and the S-value of a Givens
|
||||||
|
*> rotation related to the right null space if SQRE = 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension ( 4 * M )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IWORK
|
||||||
|
*> \verbatim
|
||||||
|
*> IWORK is INTEGER array, dimension ( 3 * N )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit.
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> > 0: if INFO = 1, a singular value did not converge
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date June 2016
|
||||||
|
*
|
||||||
|
*> \ingroup OTHERauxiliary
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Huan Ren, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLASD6( ICOMPQ, NL, NR, SQRE, D, VF, VL, ALPHA, BETA,
|
||||||
|
$ IDXQ, PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM,
|
||||||
|
$ LDGNUM, POLES, DIFL, DIFR, Z, K, C, S, WORK,
|
||||||
|
$ IWORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* June 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
|
||||||
|
$ NR, SQRE
|
||||||
|
DOUBLE PRECISION ALPHA, BETA, C, S
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER GIVCOL( LDGCOL, * ), IDXQ( * ), IWORK( * ),
|
||||||
|
$ PERM( * )
|
||||||
|
DOUBLE PRECISION D( * ), DIFL( * ), DIFR( * ),
|
||||||
|
$ GIVNUM( LDGNUM, * ), POLES( LDGNUM, * ),
|
||||||
|
$ VF( * ), VL( * ), WORK( * ), Z( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE, ZERO
|
||||||
|
PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I, IDX, IDXC, IDXP, ISIGMA, IVFW, IVLW, IW, M,
|
||||||
|
$ N, N1, N2
|
||||||
|
DOUBLE PRECISION ORGNRM
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DCOPY, DLAMRG, DLASCL, DLASD7, DLASD8, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC ABS, MAX
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
N = NL + NR + 1
|
||||||
|
M = N + SQRE
|
||||||
|
*
|
||||||
|
IF( ( ICOMPQ.LT.0 ) .OR. ( ICOMPQ.GT.1 ) ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( NL.LT.1 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( NR.LT.1 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( ( SQRE.LT.0 ) .OR. ( SQRE.GT.1 ) ) THEN
|
||||||
|
INFO = -4
|
||||||
|
ELSE IF( LDGCOL.LT.N ) THEN
|
||||||
|
INFO = -14
|
||||||
|
ELSE IF( LDGNUM.LT.N ) THEN
|
||||||
|
INFO = -16
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLASD6', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* The following values are for bookkeeping purposes only. They are
|
||||||
|
* integer pointers which indicate the portion of the workspace
|
||||||
|
* used by a particular array in DLASD7 and DLASD8.
|
||||||
|
*
|
||||||
|
ISIGMA = 1
|
||||||
|
IW = ISIGMA + N
|
||||||
|
IVFW = IW + M
|
||||||
|
IVLW = IVFW + M
|
||||||
|
*
|
||||||
|
IDX = 1
|
||||||
|
IDXC = IDX + N
|
||||||
|
IDXP = IDXC + N
|
||||||
|
*
|
||||||
|
* Scale.
|
||||||
|
*
|
||||||
|
ORGNRM = MAX( ABS( ALPHA ), ABS( BETA ) )
|
||||||
|
D( NL+1 ) = ZERO
|
||||||
|
DO 10 I = 1, N
|
||||||
|
IF( ABS( D( I ) ).GT.ORGNRM ) THEN
|
||||||
|
ORGNRM = ABS( D( I ) )
|
||||||
|
END IF
|
||||||
|
10 CONTINUE
|
||||||
|
CALL DLASCL( 'G', 0, 0, ORGNRM, ONE, N, 1, D, N, INFO )
|
||||||
|
ALPHA = ALPHA / ORGNRM
|
||||||
|
BETA = BETA / ORGNRM
|
||||||
|
*
|
||||||
|
* Sort and Deflate singular values.
|
||||||
|
*
|
||||||
|
CALL DLASD7( ICOMPQ, NL, NR, SQRE, K, D, Z, WORK( IW ), VF,
|
||||||
|
$ WORK( IVFW ), VL, WORK( IVLW ), ALPHA, BETA,
|
||||||
|
$ WORK( ISIGMA ), IWORK( IDX ), IWORK( IDXP ), IDXQ,
|
||||||
|
$ PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM, C, S,
|
||||||
|
$ INFO )
|
||||||
|
*
|
||||||
|
* Solve Secular Equation, compute DIFL, DIFR, and update VF, VL.
|
||||||
|
*
|
||||||
|
CALL DLASD8( ICOMPQ, K, D, Z, VF, VL, DIFL, DIFR, LDGNUM,
|
||||||
|
$ WORK( ISIGMA ), WORK( IW ), INFO )
|
||||||
|
*
|
||||||
|
* Report the possible convergence failure.
|
||||||
|
*
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Save the poles if ICOMPQ = 1.
|
||||||
|
*
|
||||||
|
IF( ICOMPQ.EQ.1 ) THEN
|
||||||
|
CALL DCOPY( K, D, 1, POLES( 1, 1 ), 1 )
|
||||||
|
CALL DCOPY( K, WORK( ISIGMA ), 1, POLES( 1, 2 ), 1 )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Unscale.
|
||||||
|
*
|
||||||
|
CALL DLASCL( 'G', 0, 0, ONE, ORGNRM, N, 1, D, N, INFO )
|
||||||
|
*
|
||||||
|
* Prepare the IDXQ sorting permutation.
|
||||||
|
*
|
||||||
|
N1 = K
|
||||||
|
N2 = N - K
|
||||||
|
CALL DLAMRG( N1, N2, D, 1, -1, IDXQ )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLASD6
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,580 @@
|
||||||
|
*> \brief \b DLASD7 merges the two sets of singular values together into a single sorted set. Then it tries to deflate the size of the problem. Used by sbdsdc.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLASD7 + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasd7.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasd7.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd7.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLASD7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL,
|
||||||
|
* VLW, ALPHA, BETA, DSIGMA, IDX, IDXP, IDXQ,
|
||||||
|
* PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
|
||||||
|
* C, S, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
|
||||||
|
* $ NR, SQRE
|
||||||
|
* DOUBLE PRECISION ALPHA, BETA, C, S
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER GIVCOL( LDGCOL, * ), IDX( * ), IDXP( * ),
|
||||||
|
* $ IDXQ( * ), PERM( * )
|
||||||
|
* DOUBLE PRECISION D( * ), DSIGMA( * ), GIVNUM( LDGNUM, * ),
|
||||||
|
* $ VF( * ), VFW( * ), VL( * ), VLW( * ), Z( * ),
|
||||||
|
* $ ZW( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLASD7 merges the two sets of singular values together into a single
|
||||||
|
*> sorted set. Then it tries to deflate the size of the problem. There
|
||||||
|
*> are two ways in which deflation can occur: when two or more singular
|
||||||
|
*> values are close together or if there is a tiny entry in the Z
|
||||||
|
*> vector. For each such occurrence the order of the related
|
||||||
|
*> secular equation problem is reduced by one.
|
||||||
|
*>
|
||||||
|
*> DLASD7 is called from DLASD6.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] ICOMPQ
|
||||||
|
*> \verbatim
|
||||||
|
*> ICOMPQ is INTEGER
|
||||||
|
*> Specifies whether singular vectors are to be computed
|
||||||
|
*> in compact form, as follows:
|
||||||
|
*> = 0: Compute singular values only.
|
||||||
|
*> = 1: Compute singular vectors of upper
|
||||||
|
*> bidiagonal matrix in compact form.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NL
|
||||||
|
*> \verbatim
|
||||||
|
*> NL is INTEGER
|
||||||
|
*> The row dimension of the upper block. NL >= 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NR
|
||||||
|
*> \verbatim
|
||||||
|
*> NR is INTEGER
|
||||||
|
*> The row dimension of the lower block. NR >= 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SQRE
|
||||||
|
*> \verbatim
|
||||||
|
*> SQRE is INTEGER
|
||||||
|
*> = 0: the lower block is an NR-by-NR square matrix.
|
||||||
|
*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
|
||||||
|
*>
|
||||||
|
*> The bidiagonal matrix has
|
||||||
|
*> N = NL + NR + 1 rows and
|
||||||
|
*> M = N + SQRE >= N columns.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] K
|
||||||
|
*> \verbatim
|
||||||
|
*> K is INTEGER
|
||||||
|
*> Contains the dimension of the non-deflated matrix, this is
|
||||||
|
*> the order of the related secular equation. 1 <= K <=N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] D
|
||||||
|
*> \verbatim
|
||||||
|
*> D is DOUBLE PRECISION array, dimension ( N )
|
||||||
|
*> On entry D contains the singular values of the two submatrices
|
||||||
|
*> to be combined. On exit D contains the trailing (N-K) updated
|
||||||
|
*> singular values (those which were deflated) sorted into
|
||||||
|
*> increasing order.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> On exit Z contains the updating row vector in the secular
|
||||||
|
*> equation.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] ZW
|
||||||
|
*> \verbatim
|
||||||
|
*> ZW is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> Workspace for Z.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] VF
|
||||||
|
*> \verbatim
|
||||||
|
*> VF is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> On entry, VF(1:NL+1) contains the first components of all
|
||||||
|
*> right singular vectors of the upper block; and VF(NL+2:M)
|
||||||
|
*> contains the first components of all right singular vectors
|
||||||
|
*> of the lower block. On exit, VF contains the first components
|
||||||
|
*> of all right singular vectors of the bidiagonal matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] VFW
|
||||||
|
*> \verbatim
|
||||||
|
*> VFW is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> Workspace for VF.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] VL
|
||||||
|
*> \verbatim
|
||||||
|
*> VL is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> On entry, VL(1:NL+1) contains the last components of all
|
||||||
|
*> right singular vectors of the upper block; and VL(NL+2:M)
|
||||||
|
*> contains the last components of all right singular vectors
|
||||||
|
*> of the lower block. On exit, VL contains the last components
|
||||||
|
*> of all right singular vectors of the bidiagonal matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] VLW
|
||||||
|
*> \verbatim
|
||||||
|
*> VLW is DOUBLE PRECISION array, dimension ( M )
|
||||||
|
*> Workspace for VL.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] ALPHA
|
||||||
|
*> \verbatim
|
||||||
|
*> ALPHA is DOUBLE PRECISION
|
||||||
|
*> Contains the diagonal element associated with the added row.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] BETA
|
||||||
|
*> \verbatim
|
||||||
|
*> BETA is DOUBLE PRECISION
|
||||||
|
*> Contains the off-diagonal element associated with the added
|
||||||
|
*> row.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DSIGMA
|
||||||
|
*> \verbatim
|
||||||
|
*> DSIGMA is DOUBLE PRECISION array, dimension ( N )
|
||||||
|
*> Contains a copy of the diagonal elements (K-1 singular values
|
||||||
|
*> and one zero) in the secular equation.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IDX
|
||||||
|
*> \verbatim
|
||||||
|
*> IDX is INTEGER array, dimension ( N )
|
||||||
|
*> This will contain the permutation used to sort the contents of
|
||||||
|
*> D into ascending order.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IDXP
|
||||||
|
*> \verbatim
|
||||||
|
*> IDXP is INTEGER array, dimension ( N )
|
||||||
|
*> This will contain the permutation used to place deflated
|
||||||
|
*> values of D at the end of the array. On output IDXP(2:K)
|
||||||
|
*> points to the nondeflated D-values and IDXP(K+1:N)
|
||||||
|
*> points to the deflated singular values.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] IDXQ
|
||||||
|
*> \verbatim
|
||||||
|
*> IDXQ is INTEGER array, dimension ( N )
|
||||||
|
*> This contains the permutation which separately sorts the two
|
||||||
|
*> sub-problems in D into ascending order. Note that entries in
|
||||||
|
*> the first half of this permutation must first be moved one
|
||||||
|
*> position backward; and entries in the second half
|
||||||
|
*> must first have NL+1 added to their values.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] PERM
|
||||||
|
*> \verbatim
|
||||||
|
*> PERM is INTEGER array, dimension ( N )
|
||||||
|
*> The permutations (from deflation and sorting) to be applied
|
||||||
|
*> to each singular block. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVPTR
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVPTR is INTEGER
|
||||||
|
*> The number of Givens rotations which took place in this
|
||||||
|
*> subproblem. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVCOL is INTEGER array, dimension ( LDGCOL, 2 )
|
||||||
|
*> Each pair of numbers indicates a pair of columns to take place
|
||||||
|
*> in a Givens rotation. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGCOL is INTEGER
|
||||||
|
*> The leading dimension of GIVCOL, must be at least N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVNUM is DOUBLE PRECISION array, dimension ( LDGNUM, 2 )
|
||||||
|
*> Each number indicates the C or S value to be used in the
|
||||||
|
*> corresponding Givens rotation. Not referenced if ICOMPQ = 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGNUM is INTEGER
|
||||||
|
*> The leading dimension of GIVNUM, must be at least N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION
|
||||||
|
*> C contains garbage if SQRE =0 and the C-value of a Givens
|
||||||
|
*> rotation related to the right null space if SQRE = 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] S
|
||||||
|
*> \verbatim
|
||||||
|
*> S is DOUBLE PRECISION
|
||||||
|
*> S contains garbage if SQRE =0 and the S-value of a Givens
|
||||||
|
*> rotation related to the right null space if SQRE = 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit.
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date December 2016
|
||||||
|
*
|
||||||
|
*> \ingroup OTHERauxiliary
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Huan Ren, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLASD7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL,
|
||||||
|
$ VLW, ALPHA, BETA, DSIGMA, IDX, IDXP, IDXQ,
|
||||||
|
$ PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
|
||||||
|
$ C, S, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* December 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
|
||||||
|
$ NR, SQRE
|
||||||
|
DOUBLE PRECISION ALPHA, BETA, C, S
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER GIVCOL( LDGCOL, * ), IDX( * ), IDXP( * ),
|
||||||
|
$ IDXQ( * ), PERM( * )
|
||||||
|
DOUBLE PRECISION D( * ), DSIGMA( * ), GIVNUM( LDGNUM, * ),
|
||||||
|
$ VF( * ), VFW( * ), VL( * ), VLW( * ), Z( * ),
|
||||||
|
$ ZW( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO, ONE, TWO, EIGHT
|
||||||
|
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0, TWO = 2.0D+0,
|
||||||
|
$ EIGHT = 8.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
*
|
||||||
|
INTEGER I, IDXI, IDXJ, IDXJP, J, JP, JPREV, K2, M, N,
|
||||||
|
$ NLP1, NLP2
|
||||||
|
DOUBLE PRECISION EPS, HLFTOL, TAU, TOL, Z1
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DCOPY, DLAMRG, DROT, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
DOUBLE PRECISION DLAMCH, DLAPY2
|
||||||
|
EXTERNAL DLAMCH, DLAPY2
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC ABS, MAX
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
N = NL + NR + 1
|
||||||
|
M = N + SQRE
|
||||||
|
*
|
||||||
|
IF( ( ICOMPQ.LT.0 ) .OR. ( ICOMPQ.GT.1 ) ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( NL.LT.1 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( NR.LT.1 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( ( SQRE.LT.0 ) .OR. ( SQRE.GT.1 ) ) THEN
|
||||||
|
INFO = -4
|
||||||
|
ELSE IF( LDGCOL.LT.N ) THEN
|
||||||
|
INFO = -22
|
||||||
|
ELSE IF( LDGNUM.LT.N ) THEN
|
||||||
|
INFO = -24
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLASD7', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
NLP1 = NL + 1
|
||||||
|
NLP2 = NL + 2
|
||||||
|
IF( ICOMPQ.EQ.1 ) THEN
|
||||||
|
GIVPTR = 0
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Generate the first part of the vector Z and move the singular
|
||||||
|
* values in the first part of D one position backward.
|
||||||
|
*
|
||||||
|
Z1 = ALPHA*VL( NLP1 )
|
||||||
|
VL( NLP1 ) = ZERO
|
||||||
|
TAU = VF( NLP1 )
|
||||||
|
DO 10 I = NL, 1, -1
|
||||||
|
Z( I+1 ) = ALPHA*VL( I )
|
||||||
|
VL( I ) = ZERO
|
||||||
|
VF( I+1 ) = VF( I )
|
||||||
|
D( I+1 ) = D( I )
|
||||||
|
IDXQ( I+1 ) = IDXQ( I ) + 1
|
||||||
|
10 CONTINUE
|
||||||
|
VF( 1 ) = TAU
|
||||||
|
*
|
||||||
|
* Generate the second part of the vector Z.
|
||||||
|
*
|
||||||
|
DO 20 I = NLP2, M
|
||||||
|
Z( I ) = BETA*VF( I )
|
||||||
|
VF( I ) = ZERO
|
||||||
|
20 CONTINUE
|
||||||
|
*
|
||||||
|
* Sort the singular values into increasing order
|
||||||
|
*
|
||||||
|
DO 30 I = NLP2, N
|
||||||
|
IDXQ( I ) = IDXQ( I ) + NLP1
|
||||||
|
30 CONTINUE
|
||||||
|
*
|
||||||
|
* DSIGMA, IDXC, IDXC, and ZW are used as storage space.
|
||||||
|
*
|
||||||
|
DO 40 I = 2, N
|
||||||
|
DSIGMA( I ) = D( IDXQ( I ) )
|
||||||
|
ZW( I ) = Z( IDXQ( I ) )
|
||||||
|
VFW( I ) = VF( IDXQ( I ) )
|
||||||
|
VLW( I ) = VL( IDXQ( I ) )
|
||||||
|
40 CONTINUE
|
||||||
|
*
|
||||||
|
CALL DLAMRG( NL, NR, DSIGMA( 2 ), 1, 1, IDX( 2 ) )
|
||||||
|
*
|
||||||
|
DO 50 I = 2, N
|
||||||
|
IDXI = 1 + IDX( I )
|
||||||
|
D( I ) = DSIGMA( IDXI )
|
||||||
|
Z( I ) = ZW( IDXI )
|
||||||
|
VF( I ) = VFW( IDXI )
|
||||||
|
VL( I ) = VLW( IDXI )
|
||||||
|
50 CONTINUE
|
||||||
|
*
|
||||||
|
* Calculate the allowable deflation tolerence
|
||||||
|
*
|
||||||
|
EPS = DLAMCH( 'Epsilon' )
|
||||||
|
TOL = MAX( ABS( ALPHA ), ABS( BETA ) )
|
||||||
|
TOL = EIGHT*EIGHT*EPS*MAX( ABS( D( N ) ), TOL )
|
||||||
|
*
|
||||||
|
* There are 2 kinds of deflation -- first a value in the z-vector
|
||||||
|
* is small, second two (or more) singular values are very close
|
||||||
|
* together (their difference is small).
|
||||||
|
*
|
||||||
|
* If the value in the z-vector is small, we simply permute the
|
||||||
|
* array so that the corresponding singular value is moved to the
|
||||||
|
* end.
|
||||||
|
*
|
||||||
|
* If two values in the D-vector are close, we perform a two-sided
|
||||||
|
* rotation designed to make one of the corresponding z-vector
|
||||||
|
* entries zero, and then permute the array so that the deflated
|
||||||
|
* singular value is moved to the end.
|
||||||
|
*
|
||||||
|
* If there are multiple singular values then the problem deflates.
|
||||||
|
* Here the number of equal singular values are found. As each equal
|
||||||
|
* singular value is found, an elementary reflector is computed to
|
||||||
|
* rotate the corresponding singular subspace so that the
|
||||||
|
* corresponding components of Z are zero in this new basis.
|
||||||
|
*
|
||||||
|
K = 1
|
||||||
|
K2 = N + 1
|
||||||
|
DO 60 J = 2, N
|
||||||
|
IF( ABS( Z( J ) ).LE.TOL ) THEN
|
||||||
|
*
|
||||||
|
* Deflate due to small z component.
|
||||||
|
*
|
||||||
|
K2 = K2 - 1
|
||||||
|
IDXP( K2 ) = J
|
||||||
|
IF( J.EQ.N )
|
||||||
|
$ GO TO 100
|
||||||
|
ELSE
|
||||||
|
JPREV = J
|
||||||
|
GO TO 70
|
||||||
|
END IF
|
||||||
|
60 CONTINUE
|
||||||
|
70 CONTINUE
|
||||||
|
J = JPREV
|
||||||
|
80 CONTINUE
|
||||||
|
J = J + 1
|
||||||
|
IF( J.GT.N )
|
||||||
|
$ GO TO 90
|
||||||
|
IF( ABS( Z( J ) ).LE.TOL ) THEN
|
||||||
|
*
|
||||||
|
* Deflate due to small z component.
|
||||||
|
*
|
||||||
|
K2 = K2 - 1
|
||||||
|
IDXP( K2 ) = J
|
||||||
|
ELSE
|
||||||
|
*
|
||||||
|
* Check if singular values are close enough to allow deflation.
|
||||||
|
*
|
||||||
|
IF( ABS( D( J )-D( JPREV ) ).LE.TOL ) THEN
|
||||||
|
*
|
||||||
|
* Deflation is possible.
|
||||||
|
*
|
||||||
|
S = Z( JPREV )
|
||||||
|
C = Z( J )
|
||||||
|
*
|
||||||
|
* Find sqrt(a**2+b**2) without overflow or
|
||||||
|
* destructive underflow.
|
||||||
|
*
|
||||||
|
TAU = DLAPY2( C, S )
|
||||||
|
Z( J ) = TAU
|
||||||
|
Z( JPREV ) = ZERO
|
||||||
|
C = C / TAU
|
||||||
|
S = -S / TAU
|
||||||
|
*
|
||||||
|
* Record the appropriate Givens rotation
|
||||||
|
*
|
||||||
|
IF( ICOMPQ.EQ.1 ) THEN
|
||||||
|
GIVPTR = GIVPTR + 1
|
||||||
|
IDXJP = IDXQ( IDX( JPREV )+1 )
|
||||||
|
IDXJ = IDXQ( IDX( J )+1 )
|
||||||
|
IF( IDXJP.LE.NLP1 ) THEN
|
||||||
|
IDXJP = IDXJP - 1
|
||||||
|
END IF
|
||||||
|
IF( IDXJ.LE.NLP1 ) THEN
|
||||||
|
IDXJ = IDXJ - 1
|
||||||
|
END IF
|
||||||
|
GIVCOL( GIVPTR, 2 ) = IDXJP
|
||||||
|
GIVCOL( GIVPTR, 1 ) = IDXJ
|
||||||
|
GIVNUM( GIVPTR, 2 ) = C
|
||||||
|
GIVNUM( GIVPTR, 1 ) = S
|
||||||
|
END IF
|
||||||
|
CALL DROT( 1, VF( JPREV ), 1, VF( J ), 1, C, S )
|
||||||
|
CALL DROT( 1, VL( JPREV ), 1, VL( J ), 1, C, S )
|
||||||
|
K2 = K2 - 1
|
||||||
|
IDXP( K2 ) = JPREV
|
||||||
|
JPREV = J
|
||||||
|
ELSE
|
||||||
|
K = K + 1
|
||||||
|
ZW( K ) = Z( JPREV )
|
||||||
|
DSIGMA( K ) = D( JPREV )
|
||||||
|
IDXP( K ) = JPREV
|
||||||
|
JPREV = J
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
GO TO 80
|
||||||
|
90 CONTINUE
|
||||||
|
*
|
||||||
|
* Record the last singular value.
|
||||||
|
*
|
||||||
|
K = K + 1
|
||||||
|
ZW( K ) = Z( JPREV )
|
||||||
|
DSIGMA( K ) = D( JPREV )
|
||||||
|
IDXP( K ) = JPREV
|
||||||
|
*
|
||||||
|
100 CONTINUE
|
||||||
|
*
|
||||||
|
* Sort the singular values into DSIGMA. The singular values which
|
||||||
|
* were not deflated go into the first K slots of DSIGMA, except
|
||||||
|
* that DSIGMA(1) is treated separately.
|
||||||
|
*
|
||||||
|
DO 110 J = 2, N
|
||||||
|
JP = IDXP( J )
|
||||||
|
DSIGMA( J ) = D( JP )
|
||||||
|
VFW( J ) = VF( JP )
|
||||||
|
VLW( J ) = VL( JP )
|
||||||
|
110 CONTINUE
|
||||||
|
IF( ICOMPQ.EQ.1 ) THEN
|
||||||
|
DO 120 J = 2, N
|
||||||
|
JP = IDXP( J )
|
||||||
|
PERM( J ) = IDXQ( IDX( JP )+1 )
|
||||||
|
IF( PERM( J ).LE.NLP1 ) THEN
|
||||||
|
PERM( J ) = PERM( J ) - 1
|
||||||
|
END IF
|
||||||
|
120 CONTINUE
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* The deflated singular values go back into the last N - K slots of
|
||||||
|
* D.
|
||||||
|
*
|
||||||
|
CALL DCOPY( N-K, DSIGMA( K+1 ), 1, D( K+1 ), 1 )
|
||||||
|
*
|
||||||
|
* Determine DSIGMA(1), DSIGMA(2), Z(1), VF(1), VL(1), VF(M), and
|
||||||
|
* VL(M).
|
||||||
|
*
|
||||||
|
DSIGMA( 1 ) = ZERO
|
||||||
|
HLFTOL = TOL / TWO
|
||||||
|
IF( ABS( DSIGMA( 2 ) ).LE.HLFTOL )
|
||||||
|
$ DSIGMA( 2 ) = HLFTOL
|
||||||
|
IF( M.GT.N ) THEN
|
||||||
|
Z( 1 ) = DLAPY2( Z1, Z( M ) )
|
||||||
|
IF( Z( 1 ).LE.TOL ) THEN
|
||||||
|
C = ONE
|
||||||
|
S = ZERO
|
||||||
|
Z( 1 ) = TOL
|
||||||
|
ELSE
|
||||||
|
C = Z1 / Z( 1 )
|
||||||
|
S = -Z( M ) / Z( 1 )
|
||||||
|
END IF
|
||||||
|
CALL DROT( 1, VF( M ), 1, VF( 1 ), 1, C, S )
|
||||||
|
CALL DROT( 1, VL( M ), 1, VL( 1 ), 1, C, S )
|
||||||
|
ELSE
|
||||||
|
IF( ABS( Z1 ).LE.TOL ) THEN
|
||||||
|
Z( 1 ) = TOL
|
||||||
|
ELSE
|
||||||
|
Z( 1 ) = Z1
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Restore Z, VF, and VL.
|
||||||
|
*
|
||||||
|
CALL DCOPY( K-1, ZW( 2 ), 1, Z( 2 ), 1 )
|
||||||
|
CALL DCOPY( N-1, VFW( 2 ), 1, VF( 2 ), 1 )
|
||||||
|
CALL DCOPY( N-1, VLW( 2 ), 1, VL( 2 ), 1 )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLASD7
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,342 @@
|
||||||
|
*> \brief \b DLASD8 finds the square roots of the roots of the secular equation, and stores, for each element in D, the distance to its two nearest poles. Used by sbdsdc.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLASD8 + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasd8.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasd8.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd8.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLASD8( ICOMPQ, K, D, Z, VF, VL, DIFL, DIFR, LDDIFR,
|
||||||
|
* DSIGMA, WORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER ICOMPQ, INFO, K, LDDIFR
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION D( * ), DIFL( * ), DIFR( LDDIFR, * ),
|
||||||
|
* $ DSIGMA( * ), VF( * ), VL( * ), WORK( * ),
|
||||||
|
* $ Z( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLASD8 finds the square roots of the roots of the secular equation,
|
||||||
|
*> as defined by the values in DSIGMA and Z. It makes the appropriate
|
||||||
|
*> calls to DLASD4, and stores, for each element in D, the distance
|
||||||
|
*> to its two nearest poles (elements in DSIGMA). It also updates
|
||||||
|
*> the arrays VF and VL, the first and last components of all the
|
||||||
|
*> right singular vectors of the original bidiagonal matrix.
|
||||||
|
*>
|
||||||
|
*> DLASD8 is called from DLASD6.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] ICOMPQ
|
||||||
|
*> \verbatim
|
||||||
|
*> ICOMPQ is INTEGER
|
||||||
|
*> Specifies whether singular vectors are to be computed in
|
||||||
|
*> factored form in the calling routine:
|
||||||
|
*> = 0: Compute singular values only.
|
||||||
|
*> = 1: Compute singular vectors in factored form as well.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] K
|
||||||
|
*> \verbatim
|
||||||
|
*> K is INTEGER
|
||||||
|
*> The number of terms in the rational function to be solved
|
||||||
|
*> by DLASD4. K >= 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] D
|
||||||
|
*> \verbatim
|
||||||
|
*> D is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> On output, D contains the updated singular values.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> On entry, the first K elements of this array contain the
|
||||||
|
*> components of the deflation-adjusted updating row vector.
|
||||||
|
*> On exit, Z is updated.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] VF
|
||||||
|
*> \verbatim
|
||||||
|
*> VF is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> On entry, VF contains information passed through DBEDE8.
|
||||||
|
*> On exit, VF contains the first K components of the first
|
||||||
|
*> components of all right singular vectors of the bidiagonal
|
||||||
|
*> matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] VL
|
||||||
|
*> \verbatim
|
||||||
|
*> VL is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> On entry, VL contains information passed through DBEDE8.
|
||||||
|
*> On exit, VL contains the first K components of the last
|
||||||
|
*> components of all right singular vectors of the bidiagonal
|
||||||
|
*> matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DIFL
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFL is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> On exit, DIFL(I) = D(I) - DSIGMA(I).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DIFR
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFR is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDDIFR, 2 ) if ICOMPQ = 1 and
|
||||||
|
*> dimension ( K ) if ICOMPQ = 0.
|
||||||
|
*> On exit, DIFR(I,1) = D(I) - DSIGMA(I+1), DIFR(K,1) is not
|
||||||
|
*> defined and will not be referenced.
|
||||||
|
*>
|
||||||
|
*> If ICOMPQ = 1, DIFR(1:K,2) is an array containing the
|
||||||
|
*> normalizing factors for the right singular vector matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDDIFR
|
||||||
|
*> \verbatim
|
||||||
|
*> LDDIFR is INTEGER
|
||||||
|
*> The leading dimension of DIFR, must be at least K.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] DSIGMA
|
||||||
|
*> \verbatim
|
||||||
|
*> DSIGMA is DOUBLE PRECISION array, dimension ( K )
|
||||||
|
*> On entry, the first K elements of this array contain the old
|
||||||
|
*> roots of the deflated updating problem. These are the poles
|
||||||
|
*> of the secular equation.
|
||||||
|
*> On exit, the elements of DSIGMA may be very slightly altered
|
||||||
|
*> in value.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension (3*K)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit.
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> > 0: if INFO = 1, a singular value did not converge
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date June 2017
|
||||||
|
*
|
||||||
|
*> \ingroup OTHERauxiliary
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Huan Ren, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLASD8( ICOMPQ, K, D, Z, VF, VL, DIFL, DIFR, LDDIFR,
|
||||||
|
$ DSIGMA, WORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.1) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* June 2017
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER ICOMPQ, INFO, K, LDDIFR
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION D( * ), DIFL( * ), DIFR( LDDIFR, * ),
|
||||||
|
$ DSIGMA( * ), VF( * ), VL( * ), WORK( * ),
|
||||||
|
$ Z( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ONE
|
||||||
|
PARAMETER ( ONE = 1.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I, IWK1, IWK2, IWK2I, IWK3, IWK3I, J
|
||||||
|
DOUBLE PRECISION DIFLJ, DIFRJ, DJ, DSIGJ, DSIGJP, RHO, TEMP
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DCOPY, DLASCL, DLASD4, DLASET, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
DOUBLE PRECISION DDOT, DLAMC3, DNRM2
|
||||||
|
EXTERNAL DDOT, DLAMC3, DNRM2
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC ABS, SIGN, SQRT
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
*
|
||||||
|
IF( ( ICOMPQ.LT.0 ) .OR. ( ICOMPQ.GT.1 ) ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( K.LT.1 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( LDDIFR.LT.K ) THEN
|
||||||
|
INFO = -9
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLASD8', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Quick return if possible
|
||||||
|
*
|
||||||
|
IF( K.EQ.1 ) THEN
|
||||||
|
D( 1 ) = ABS( Z( 1 ) )
|
||||||
|
DIFL( 1 ) = D( 1 )
|
||||||
|
IF( ICOMPQ.EQ.1 ) THEN
|
||||||
|
DIFL( 2 ) = ONE
|
||||||
|
DIFR( 1, 2 ) = ONE
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Modify values DSIGMA(i) to make sure all DSIGMA(i)-DSIGMA(j) can
|
||||||
|
* be computed with high relative accuracy (barring over/underflow).
|
||||||
|
* This is a problem on machines without a guard digit in
|
||||||
|
* add/subtract (Cray XMP, Cray YMP, Cray C 90 and Cray 2).
|
||||||
|
* The following code replaces DSIGMA(I) by 2*DSIGMA(I)-DSIGMA(I),
|
||||||
|
* which on any of these machines zeros out the bottommost
|
||||||
|
* bit of DSIGMA(I) if it is 1; this makes the subsequent
|
||||||
|
* subtractions DSIGMA(I)-DSIGMA(J) unproblematic when cancellation
|
||||||
|
* occurs. On binary machines with a guard digit (almost all
|
||||||
|
* machines) it does not change DSIGMA(I) at all. On hexadecimal
|
||||||
|
* and decimal machines with a guard digit, it slightly
|
||||||
|
* changes the bottommost bits of DSIGMA(I). It does not account
|
||||||
|
* for hexadecimal or decimal machines without guard digits
|
||||||
|
* (we know of none). We use a subroutine call to compute
|
||||||
|
* 2*DLAMBDA(I) to prevent optimizing compilers from eliminating
|
||||||
|
* this code.
|
||||||
|
*
|
||||||
|
DO 10 I = 1, K
|
||||||
|
DSIGMA( I ) = DLAMC3( DSIGMA( I ), DSIGMA( I ) ) - DSIGMA( I )
|
||||||
|
10 CONTINUE
|
||||||
|
*
|
||||||
|
* Book keeping.
|
||||||
|
*
|
||||||
|
IWK1 = 1
|
||||||
|
IWK2 = IWK1 + K
|
||||||
|
IWK3 = IWK2 + K
|
||||||
|
IWK2I = IWK2 - 1
|
||||||
|
IWK3I = IWK3 - 1
|
||||||
|
*
|
||||||
|
* Normalize Z.
|
||||||
|
*
|
||||||
|
RHO = DNRM2( K, Z, 1 )
|
||||||
|
CALL DLASCL( 'G', 0, 0, RHO, ONE, K, 1, Z, K, INFO )
|
||||||
|
RHO = RHO*RHO
|
||||||
|
*
|
||||||
|
* Initialize WORK(IWK3).
|
||||||
|
*
|
||||||
|
CALL DLASET( 'A', K, 1, ONE, ONE, WORK( IWK3 ), K )
|
||||||
|
*
|
||||||
|
* Compute the updated singular values, the arrays DIFL, DIFR,
|
||||||
|
* and the updated Z.
|
||||||
|
*
|
||||||
|
DO 40 J = 1, K
|
||||||
|
CALL DLASD4( K, J, DSIGMA, Z, WORK( IWK1 ), RHO, D( J ),
|
||||||
|
$ WORK( IWK2 ), INFO )
|
||||||
|
*
|
||||||
|
* If the root finder fails, report the convergence failure.
|
||||||
|
*
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
WORK( IWK3I+J ) = WORK( IWK3I+J )*WORK( J )*WORK( IWK2I+J )
|
||||||
|
DIFL( J ) = -WORK( J )
|
||||||
|
DIFR( J, 1 ) = -WORK( J+1 )
|
||||||
|
DO 20 I = 1, J - 1
|
||||||
|
WORK( IWK3I+I ) = WORK( IWK3I+I )*WORK( I )*
|
||||||
|
$ WORK( IWK2I+I ) / ( DSIGMA( I )-
|
||||||
|
$ DSIGMA( J ) ) / ( DSIGMA( I )+
|
||||||
|
$ DSIGMA( J ) )
|
||||||
|
20 CONTINUE
|
||||||
|
DO 30 I = J + 1, K
|
||||||
|
WORK( IWK3I+I ) = WORK( IWK3I+I )*WORK( I )*
|
||||||
|
$ WORK( IWK2I+I ) / ( DSIGMA( I )-
|
||||||
|
$ DSIGMA( J ) ) / ( DSIGMA( I )+
|
||||||
|
$ DSIGMA( J ) )
|
||||||
|
30 CONTINUE
|
||||||
|
40 CONTINUE
|
||||||
|
*
|
||||||
|
* Compute updated Z.
|
||||||
|
*
|
||||||
|
DO 50 I = 1, K
|
||||||
|
Z( I ) = SIGN( SQRT( ABS( WORK( IWK3I+I ) ) ), Z( I ) )
|
||||||
|
50 CONTINUE
|
||||||
|
*
|
||||||
|
* Update VF and VL.
|
||||||
|
*
|
||||||
|
DO 80 J = 1, K
|
||||||
|
DIFLJ = DIFL( J )
|
||||||
|
DJ = D( J )
|
||||||
|
DSIGJ = -DSIGMA( J )
|
||||||
|
IF( J.LT.K ) THEN
|
||||||
|
DIFRJ = -DIFR( J, 1 )
|
||||||
|
DSIGJP = -DSIGMA( J+1 )
|
||||||
|
END IF
|
||||||
|
WORK( J ) = -Z( J ) / DIFLJ / ( DSIGMA( J )+DJ )
|
||||||
|
DO 60 I = 1, J - 1
|
||||||
|
WORK( I ) = Z( I ) / ( DLAMC3( DSIGMA( I ), DSIGJ )-DIFLJ )
|
||||||
|
$ / ( DSIGMA( I )+DJ )
|
||||||
|
60 CONTINUE
|
||||||
|
DO 70 I = J + 1, K
|
||||||
|
WORK( I ) = Z( I ) / ( DLAMC3( DSIGMA( I ), DSIGJP )+DIFRJ )
|
||||||
|
$ / ( DSIGMA( I )+DJ )
|
||||||
|
70 CONTINUE
|
||||||
|
TEMP = DNRM2( K, WORK, 1 )
|
||||||
|
WORK( IWK2I+J ) = DDOT( K, WORK, 1, VF, 1 ) / TEMP
|
||||||
|
WORK( IWK3I+J ) = DDOT( K, WORK, 1, VL, 1 ) / TEMP
|
||||||
|
IF( ICOMPQ.EQ.1 ) THEN
|
||||||
|
DIFR( J, 2 ) = TEMP
|
||||||
|
END IF
|
||||||
|
80 CONTINUE
|
||||||
|
*
|
||||||
|
CALL DCOPY( K, WORK( IWK2 ), 1, VF, 1 )
|
||||||
|
CALL DCOPY( K, WORK( IWK3 ), 1, VL, 1 )
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLASD8
|
||||||
|
*
|
||||||
|
END
|
||||||
|
|
|
@ -0,0 +1,514 @@
|
||||||
|
*> \brief \b DLASDA computes the singular value decomposition (SVD) of a real upper bidiagonal matrix with diagonal d and off-diagonal e. Used by sbdsdc.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLASDA + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasda.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasda.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasda.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLASDA( ICOMPQ, SMLSIZ, N, SQRE, D, E, U, LDU, VT, K,
|
||||||
|
* DIFL, DIFR, Z, POLES, GIVPTR, GIVCOL, LDGCOL,
|
||||||
|
* PERM, GIVNUM, C, S, WORK, IWORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER ICOMPQ, INFO, LDGCOL, LDU, N, SMLSIZ, SQRE
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER GIVCOL( LDGCOL, * ), GIVPTR( * ), IWORK( * ),
|
||||||
|
* $ K( * ), PERM( LDGCOL, * )
|
||||||
|
* DOUBLE PRECISION C( * ), D( * ), DIFL( LDU, * ), DIFR( LDU, * ),
|
||||||
|
* $ E( * ), GIVNUM( LDU, * ), POLES( LDU, * ),
|
||||||
|
* $ S( * ), U( LDU, * ), VT( LDU, * ), WORK( * ),
|
||||||
|
* $ Z( LDU, * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> Using a divide and conquer approach, DLASDA computes the singular
|
||||||
|
*> value decomposition (SVD) of a real upper bidiagonal N-by-M matrix
|
||||||
|
*> B with diagonal D and offdiagonal E, where M = N + SQRE. The
|
||||||
|
*> algorithm computes the singular values in the SVD B = U * S * VT.
|
||||||
|
*> The orthogonal matrices U and VT are optionally computed in
|
||||||
|
*> compact form.
|
||||||
|
*>
|
||||||
|
*> A related subroutine, DLASD0, computes the singular values and
|
||||||
|
*> the singular vectors in explicit form.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] ICOMPQ
|
||||||
|
*> \verbatim
|
||||||
|
*> ICOMPQ is INTEGER
|
||||||
|
*> Specifies whether singular vectors are to be computed
|
||||||
|
*> in compact form, as follows
|
||||||
|
*> = 0: Compute singular values only.
|
||||||
|
*> = 1: Compute singular vectors of upper bidiagonal
|
||||||
|
*> matrix in compact form.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SMLSIZ
|
||||||
|
*> \verbatim
|
||||||
|
*> SMLSIZ is INTEGER
|
||||||
|
*> The maximum size of the subproblems at the bottom of the
|
||||||
|
*> computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> The row dimension of the upper bidiagonal matrix. This is
|
||||||
|
*> also the dimension of the main diagonal array D.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SQRE
|
||||||
|
*> \verbatim
|
||||||
|
*> SQRE is INTEGER
|
||||||
|
*> Specifies the column dimension of the bidiagonal matrix.
|
||||||
|
*> = 0: The bidiagonal matrix has column dimension M = N;
|
||||||
|
*> = 1: The bidiagonal matrix has column dimension M = N + 1.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] D
|
||||||
|
*> \verbatim
|
||||||
|
*> D is DOUBLE PRECISION array, dimension ( N )
|
||||||
|
*> On entry D contains the main diagonal of the bidiagonal
|
||||||
|
*> matrix. On exit D, if INFO = 0, contains its singular values.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] E
|
||||||
|
*> \verbatim
|
||||||
|
*> E is DOUBLE PRECISION array, dimension ( M-1 )
|
||||||
|
*> Contains the subdiagonal entries of the bidiagonal matrix.
|
||||||
|
*> On exit, E has been destroyed.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] U
|
||||||
|
*> \verbatim
|
||||||
|
*> U is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDU, SMLSIZ ) if ICOMPQ = 1, and not referenced
|
||||||
|
*> if ICOMPQ = 0. If ICOMPQ = 1, on exit, U contains the left
|
||||||
|
*> singular vector matrices of all subproblems at the bottom
|
||||||
|
*> level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDU
|
||||||
|
*> \verbatim
|
||||||
|
*> LDU is INTEGER, LDU = > N.
|
||||||
|
*> The leading dimension of arrays U, VT, DIFL, DIFR, POLES,
|
||||||
|
*> GIVNUM, and Z.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] VT
|
||||||
|
*> \verbatim
|
||||||
|
*> VT is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDU, SMLSIZ+1 ) if ICOMPQ = 1, and not referenced
|
||||||
|
*> if ICOMPQ = 0. If ICOMPQ = 1, on exit, VT**T contains the right
|
||||||
|
*> singular vector matrices of all subproblems at the bottom
|
||||||
|
*> level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] K
|
||||||
|
*> \verbatim
|
||||||
|
*> K is INTEGER array,
|
||||||
|
*> dimension ( N ) if ICOMPQ = 1 and dimension 1 if ICOMPQ = 0.
|
||||||
|
*> If ICOMPQ = 1, on exit, K(I) is the dimension of the I-th
|
||||||
|
*> secular equation on the computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DIFL
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFL is DOUBLE PRECISION array, dimension ( LDU, NLVL ),
|
||||||
|
*> where NLVL = floor(log_2 (N/SMLSIZ))).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] DIFR
|
||||||
|
*> \verbatim
|
||||||
|
*> DIFR is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDU, 2 * NLVL ) if ICOMPQ = 1 and
|
||||||
|
*> dimension ( N ) if ICOMPQ = 0.
|
||||||
|
*> If ICOMPQ = 1, on exit, DIFL(1:N, I) and DIFR(1:N, 2 * I - 1)
|
||||||
|
*> record distances between singular values on the I-th
|
||||||
|
*> level and singular values on the (I -1)-th level, and
|
||||||
|
*> DIFR(1:N, 2 * I ) contains the normalizing factors for
|
||||||
|
*> the right singular vector matrix. See DLASD8 for details.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] Z
|
||||||
|
*> \verbatim
|
||||||
|
*> Z is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDU, NLVL ) if ICOMPQ = 1 and
|
||||||
|
*> dimension ( N ) if ICOMPQ = 0.
|
||||||
|
*> The first K elements of Z(1, I) contain the components of
|
||||||
|
*> the deflation-adjusted updating row vector for subproblems
|
||||||
|
*> on the I-th level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] POLES
|
||||||
|
*> \verbatim
|
||||||
|
*> POLES is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDU, 2 * NLVL ) if ICOMPQ = 1, and not referenced
|
||||||
|
*> if ICOMPQ = 0. If ICOMPQ = 1, on exit, POLES(1, 2*I - 1) and
|
||||||
|
*> POLES(1, 2*I) contain the new and old singular values
|
||||||
|
*> involved in the secular equations on the I-th level.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVPTR
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVPTR is INTEGER array,
|
||||||
|
*> dimension ( N ) if ICOMPQ = 1, and not referenced if
|
||||||
|
*> ICOMPQ = 0. If ICOMPQ = 1, on exit, GIVPTR( I ) records
|
||||||
|
*> the number of Givens rotations performed on the I-th
|
||||||
|
*> problem on the computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVCOL is INTEGER array,
|
||||||
|
*> dimension ( LDGCOL, 2 * NLVL ) if ICOMPQ = 1, and not
|
||||||
|
*> referenced if ICOMPQ = 0. If ICOMPQ = 1, on exit, for each I,
|
||||||
|
*> GIVCOL(1, 2 *I - 1) and GIVCOL(1, 2 *I) record the locations
|
||||||
|
*> of Givens rotations performed on the I-th level on the
|
||||||
|
*> computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDGCOL
|
||||||
|
*> \verbatim
|
||||||
|
*> LDGCOL is INTEGER, LDGCOL = > N.
|
||||||
|
*> The leading dimension of arrays GIVCOL and PERM.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] PERM
|
||||||
|
*> \verbatim
|
||||||
|
*> PERM is INTEGER array,
|
||||||
|
*> dimension ( LDGCOL, NLVL ) if ICOMPQ = 1, and not referenced
|
||||||
|
*> if ICOMPQ = 0. If ICOMPQ = 1, on exit, PERM(1, I) records
|
||||||
|
*> permutations done on the I-th level of the computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] GIVNUM
|
||||||
|
*> \verbatim
|
||||||
|
*> GIVNUM is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( LDU, 2 * NLVL ) if ICOMPQ = 1, and not
|
||||||
|
*> referenced if ICOMPQ = 0. If ICOMPQ = 1, on exit, for each I,
|
||||||
|
*> GIVNUM(1, 2 *I - 1) and GIVNUM(1, 2 *I) record the C- and S-
|
||||||
|
*> values of Givens rotations performed on the I-th level on
|
||||||
|
*> the computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION array,
|
||||||
|
*> dimension ( N ) if ICOMPQ = 1, and dimension 1 if ICOMPQ = 0.
|
||||||
|
*> If ICOMPQ = 1 and the I-th subproblem is not square, on exit,
|
||||||
|
*> C( I ) contains the C-value of a Givens rotation related to
|
||||||
|
*> the right null space of the I-th subproblem.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] S
|
||||||
|
*> \verbatim
|
||||||
|
*> S is DOUBLE PRECISION array, dimension ( N ) if
|
||||||
|
*> ICOMPQ = 1, and dimension 1 if ICOMPQ = 0. If ICOMPQ = 1
|
||||||
|
*> and the I-th subproblem is not square, on exit, S( I )
|
||||||
|
*> contains the S-value of a Givens rotation related to
|
||||||
|
*> the right null space of the I-th subproblem.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension
|
||||||
|
*> (6 * N + (SMLSIZ + 1)*(SMLSIZ + 1)).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] IWORK
|
||||||
|
*> \verbatim
|
||||||
|
*> IWORK is INTEGER array, dimension (7*N)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> = 0: successful exit.
|
||||||
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
|
*> > 0: if INFO = 1, a singular value did not converge
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date June 2017
|
||||||
|
*
|
||||||
|
*> \ingroup OTHERauxiliary
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Huan Ren, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLASDA( ICOMPQ, SMLSIZ, N, SQRE, D, E, U, LDU, VT, K,
|
||||||
|
$ DIFL, DIFR, Z, POLES, GIVPTR, GIVCOL, LDGCOL,
|
||||||
|
$ PERM, GIVNUM, C, S, WORK, IWORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.1) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* June 2017
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER ICOMPQ, INFO, LDGCOL, LDU, N, SMLSIZ, SQRE
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER GIVCOL( LDGCOL, * ), GIVPTR( * ), IWORK( * ),
|
||||||
|
$ K( * ), PERM( LDGCOL, * )
|
||||||
|
DOUBLE PRECISION C( * ), D( * ), DIFL( LDU, * ), DIFR( LDU, * ),
|
||||||
|
$ E( * ), GIVNUM( LDU, * ), POLES( LDU, * ),
|
||||||
|
$ S( * ), U( LDU, * ), VT( LDU, * ), WORK( * ),
|
||||||
|
$ Z( LDU, * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO, ONE
|
||||||
|
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I, I1, IC, IDXQ, IDXQI, IM1, INODE, ITEMP, IWK,
|
||||||
|
$ J, LF, LL, LVL, LVL2, M, NCC, ND, NDB1, NDIML,
|
||||||
|
$ NDIMR, NL, NLF, NLP1, NLVL, NR, NRF, NRP1, NRU,
|
||||||
|
$ NWORK1, NWORK2, SMLSZP, SQREI, VF, VFI, VL, VLI
|
||||||
|
DOUBLE PRECISION ALPHA, BETA
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DCOPY, DLASD6, DLASDQ, DLASDT, DLASET, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
*
|
||||||
|
IF( ( ICOMPQ.LT.0 ) .OR. ( ICOMPQ.GT.1 ) ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( SMLSIZ.LT.3 ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( N.LT.0 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( ( SQRE.LT.0 ) .OR. ( SQRE.GT.1 ) ) THEN
|
||||||
|
INFO = -4
|
||||||
|
ELSE IF( LDU.LT.( N+SQRE ) ) THEN
|
||||||
|
INFO = -8
|
||||||
|
ELSE IF( LDGCOL.LT.N ) THEN
|
||||||
|
INFO = -17
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLASDA', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
M = N + SQRE
|
||||||
|
*
|
||||||
|
* If the input matrix is too small, call DLASDQ to find the SVD.
|
||||||
|
*
|
||||||
|
IF( N.LE.SMLSIZ ) THEN
|
||||||
|
IF( ICOMPQ.EQ.0 ) THEN
|
||||||
|
CALL DLASDQ( 'U', SQRE, N, 0, 0, 0, D, E, VT, LDU, U, LDU,
|
||||||
|
$ U, LDU, WORK, INFO )
|
||||||
|
ELSE
|
||||||
|
CALL DLASDQ( 'U', SQRE, N, M, N, 0, D, E, VT, LDU, U, LDU,
|
||||||
|
$ U, LDU, WORK, INFO )
|
||||||
|
END IF
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Book-keeping and set up the computation tree.
|
||||||
|
*
|
||||||
|
INODE = 1
|
||||||
|
NDIML = INODE + N
|
||||||
|
NDIMR = NDIML + N
|
||||||
|
IDXQ = NDIMR + N
|
||||||
|
IWK = IDXQ + N
|
||||||
|
*
|
||||||
|
NCC = 0
|
||||||
|
NRU = 0
|
||||||
|
*
|
||||||
|
SMLSZP = SMLSIZ + 1
|
||||||
|
VF = 1
|
||||||
|
VL = VF + M
|
||||||
|
NWORK1 = VL + M
|
||||||
|
NWORK2 = NWORK1 + SMLSZP*SMLSZP
|
||||||
|
*
|
||||||
|
CALL DLASDT( N, NLVL, ND, IWORK( INODE ), IWORK( NDIML ),
|
||||||
|
$ IWORK( NDIMR ), SMLSIZ )
|
||||||
|
*
|
||||||
|
* for the nodes on bottom level of the tree, solve
|
||||||
|
* their subproblems by DLASDQ.
|
||||||
|
*
|
||||||
|
NDB1 = ( ND+1 ) / 2
|
||||||
|
DO 30 I = NDB1, ND
|
||||||
|
*
|
||||||
|
* IC : center row of each node
|
||||||
|
* NL : number of rows of left subproblem
|
||||||
|
* NR : number of rows of right subproblem
|
||||||
|
* NLF: starting row of the left subproblem
|
||||||
|
* NRF: starting row of the right subproblem
|
||||||
|
*
|
||||||
|
I1 = I - 1
|
||||||
|
IC = IWORK( INODE+I1 )
|
||||||
|
NL = IWORK( NDIML+I1 )
|
||||||
|
NLP1 = NL + 1
|
||||||
|
NR = IWORK( NDIMR+I1 )
|
||||||
|
NLF = IC - NL
|
||||||
|
NRF = IC + 1
|
||||||
|
IDXQI = IDXQ + NLF - 2
|
||||||
|
VFI = VF + NLF - 1
|
||||||
|
VLI = VL + NLF - 1
|
||||||
|
SQREI = 1
|
||||||
|
IF( ICOMPQ.EQ.0 ) THEN
|
||||||
|
CALL DLASET( 'A', NLP1, NLP1, ZERO, ONE, WORK( NWORK1 ),
|
||||||
|
$ SMLSZP )
|
||||||
|
CALL DLASDQ( 'U', SQREI, NL, NLP1, NRU, NCC, D( NLF ),
|
||||||
|
$ E( NLF ), WORK( NWORK1 ), SMLSZP,
|
||||||
|
$ WORK( NWORK2 ), NL, WORK( NWORK2 ), NL,
|
||||||
|
$ WORK( NWORK2 ), INFO )
|
||||||
|
ITEMP = NWORK1 + NL*SMLSZP
|
||||||
|
CALL DCOPY( NLP1, WORK( NWORK1 ), 1, WORK( VFI ), 1 )
|
||||||
|
CALL DCOPY( NLP1, WORK( ITEMP ), 1, WORK( VLI ), 1 )
|
||||||
|
ELSE
|
||||||
|
CALL DLASET( 'A', NL, NL, ZERO, ONE, U( NLF, 1 ), LDU )
|
||||||
|
CALL DLASET( 'A', NLP1, NLP1, ZERO, ONE, VT( NLF, 1 ), LDU )
|
||||||
|
CALL DLASDQ( 'U', SQREI, NL, NLP1, NL, NCC, D( NLF ),
|
||||||
|
$ E( NLF ), VT( NLF, 1 ), LDU, U( NLF, 1 ), LDU,
|
||||||
|
$ U( NLF, 1 ), LDU, WORK( NWORK1 ), INFO )
|
||||||
|
CALL DCOPY( NLP1, VT( NLF, 1 ), 1, WORK( VFI ), 1 )
|
||||||
|
CALL DCOPY( NLP1, VT( NLF, NLP1 ), 1, WORK( VLI ), 1 )
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
DO 10 J = 1, NL
|
||||||
|
IWORK( IDXQI+J ) = J
|
||||||
|
10 CONTINUE
|
||||||
|
IF( ( I.EQ.ND ) .AND. ( SQRE.EQ.0 ) ) THEN
|
||||||
|
SQREI = 0
|
||||||
|
ELSE
|
||||||
|
SQREI = 1
|
||||||
|
END IF
|
||||||
|
IDXQI = IDXQI + NLP1
|
||||||
|
VFI = VFI + NLP1
|
||||||
|
VLI = VLI + NLP1
|
||||||
|
NRP1 = NR + SQREI
|
||||||
|
IF( ICOMPQ.EQ.0 ) THEN
|
||||||
|
CALL DLASET( 'A', NRP1, NRP1, ZERO, ONE, WORK( NWORK1 ),
|
||||||
|
$ SMLSZP )
|
||||||
|
CALL DLASDQ( 'U', SQREI, NR, NRP1, NRU, NCC, D( NRF ),
|
||||||
|
$ E( NRF ), WORK( NWORK1 ), SMLSZP,
|
||||||
|
$ WORK( NWORK2 ), NR, WORK( NWORK2 ), NR,
|
||||||
|
$ WORK( NWORK2 ), INFO )
|
||||||
|
ITEMP = NWORK1 + ( NRP1-1 )*SMLSZP
|
||||||
|
CALL DCOPY( NRP1, WORK( NWORK1 ), 1, WORK( VFI ), 1 )
|
||||||
|
CALL DCOPY( NRP1, WORK( ITEMP ), 1, WORK( VLI ), 1 )
|
||||||
|
ELSE
|
||||||
|
CALL DLASET( 'A', NR, NR, ZERO, ONE, U( NRF, 1 ), LDU )
|
||||||
|
CALL DLASET( 'A', NRP1, NRP1, ZERO, ONE, VT( NRF, 1 ), LDU )
|
||||||
|
CALL DLASDQ( 'U', SQREI, NR, NRP1, NR, NCC, D( NRF ),
|
||||||
|
$ E( NRF ), VT( NRF, 1 ), LDU, U( NRF, 1 ), LDU,
|
||||||
|
$ U( NRF, 1 ), LDU, WORK( NWORK1 ), INFO )
|
||||||
|
CALL DCOPY( NRP1, VT( NRF, 1 ), 1, WORK( VFI ), 1 )
|
||||||
|
CALL DCOPY( NRP1, VT( NRF, NRP1 ), 1, WORK( VLI ), 1 )
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
DO 20 J = 1, NR
|
||||||
|
IWORK( IDXQI+J ) = J
|
||||||
|
20 CONTINUE
|
||||||
|
30 CONTINUE
|
||||||
|
*
|
||||||
|
* Now conquer each subproblem bottom-up.
|
||||||
|
*
|
||||||
|
J = 2**NLVL
|
||||||
|
DO 50 LVL = NLVL, 1, -1
|
||||||
|
LVL2 = LVL*2 - 1
|
||||||
|
*
|
||||||
|
* Find the first node LF and last node LL on
|
||||||
|
* the current level LVL.
|
||||||
|
*
|
||||||
|
IF( LVL.EQ.1 ) THEN
|
||||||
|
LF = 1
|
||||||
|
LL = 1
|
||||||
|
ELSE
|
||||||
|
LF = 2**( LVL-1 )
|
||||||
|
LL = 2*LF - 1
|
||||||
|
END IF
|
||||||
|
DO 40 I = LF, LL
|
||||||
|
IM1 = I - 1
|
||||||
|
IC = IWORK( INODE+IM1 )
|
||||||
|
NL = IWORK( NDIML+IM1 )
|
||||||
|
NR = IWORK( NDIMR+IM1 )
|
||||||
|
NLF = IC - NL
|
||||||
|
NRF = IC + 1
|
||||||
|
IF( I.EQ.LL ) THEN
|
||||||
|
SQREI = SQRE
|
||||||
|
ELSE
|
||||||
|
SQREI = 1
|
||||||
|
END IF
|
||||||
|
VFI = VF + NLF - 1
|
||||||
|
VLI = VL + NLF - 1
|
||||||
|
IDXQI = IDXQ + NLF - 1
|
||||||
|
ALPHA = D( IC )
|
||||||
|
BETA = E( IC )
|
||||||
|
IF( ICOMPQ.EQ.0 ) THEN
|
||||||
|
CALL DLASD6( ICOMPQ, NL, NR, SQREI, D( NLF ),
|
||||||
|
$ WORK( VFI ), WORK( VLI ), ALPHA, BETA,
|
||||||
|
$ IWORK( IDXQI ), PERM, GIVPTR( 1 ), GIVCOL,
|
||||||
|
$ LDGCOL, GIVNUM, LDU, POLES, DIFL, DIFR, Z,
|
||||||
|
$ K( 1 ), C( 1 ), S( 1 ), WORK( NWORK1 ),
|
||||||
|
$ IWORK( IWK ), INFO )
|
||||||
|
ELSE
|
||||||
|
J = J - 1
|
||||||
|
CALL DLASD6( ICOMPQ, NL, NR, SQREI, D( NLF ),
|
||||||
|
$ WORK( VFI ), WORK( VLI ), ALPHA, BETA,
|
||||||
|
$ IWORK( IDXQI ), PERM( NLF, LVL ),
|
||||||
|
$ GIVPTR( J ), GIVCOL( NLF, LVL2 ), LDGCOL,
|
||||||
|
$ GIVNUM( NLF, LVL2 ), LDU,
|
||||||
|
$ POLES( NLF, LVL2 ), DIFL( NLF, LVL ),
|
||||||
|
$ DIFR( NLF, LVL2 ), Z( NLF, LVL ), K( J ),
|
||||||
|
$ C( J ), S( J ), WORK( NWORK1 ),
|
||||||
|
$ IWORK( IWK ), INFO )
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
40 CONTINUE
|
||||||
|
50 CONTINUE
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLASDA
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,413 @@
|
||||||
|
*> \brief \b DLASDQ computes the SVD of a real bidiagonal matrix with diagonal d and off-diagonal e. Used by sbdsdc.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLASDQ + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasdq.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasdq.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdq.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT,
|
||||||
|
* U, LDU, C, LDC, WORK, INFO )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* CHARACTER UPLO
|
||||||
|
* INTEGER INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU, SQRE
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* DOUBLE PRECISION C( LDC, * ), D( * ), E( * ), U( LDU, * ),
|
||||||
|
* $ VT( LDVT, * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLASDQ computes the singular value decomposition (SVD) of a real
|
||||||
|
*> (upper or lower) bidiagonal matrix with diagonal D and offdiagonal
|
||||||
|
*> E, accumulating the transformations if desired. Letting B denote
|
||||||
|
*> the input bidiagonal matrix, the algorithm computes orthogonal
|
||||||
|
*> matrices Q and P such that B = Q * S * P**T (P**T denotes the transpose
|
||||||
|
*> of P). The singular values S are overwritten on D.
|
||||||
|
*>
|
||||||
|
*> The input matrix U is changed to U * Q if desired.
|
||||||
|
*> The input matrix VT is changed to P**T * VT if desired.
|
||||||
|
*> The input matrix C is changed to Q**T * C if desired.
|
||||||
|
*>
|
||||||
|
*> See "Computing Small Singular Values of Bidiagonal Matrices With
|
||||||
|
*> Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan,
|
||||||
|
*> LAPACK Working Note #3, for a detailed description of the algorithm.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] UPLO
|
||||||
|
*> \verbatim
|
||||||
|
*> UPLO is CHARACTER*1
|
||||||
|
*> On entry, UPLO specifies whether the input bidiagonal matrix
|
||||||
|
*> is upper or lower bidiagonal, and whether it is square are
|
||||||
|
*> not.
|
||||||
|
*> UPLO = 'U' or 'u' B is upper bidiagonal.
|
||||||
|
*> UPLO = 'L' or 'l' B is lower bidiagonal.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] SQRE
|
||||||
|
*> \verbatim
|
||||||
|
*> SQRE is INTEGER
|
||||||
|
*> = 0: then the input matrix is N-by-N.
|
||||||
|
*> = 1: then the input matrix is N-by-(N+1) if UPLU = 'U' and
|
||||||
|
*> (N+1)-by-N if UPLU = 'L'.
|
||||||
|
*>
|
||||||
|
*> The bidiagonal matrix has
|
||||||
|
*> N = NL + NR + 1 rows and
|
||||||
|
*> M = N + SQRE >= N columns.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> On entry, N specifies the number of rows and columns
|
||||||
|
*> in the matrix. N must be at least 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NCVT
|
||||||
|
*> \verbatim
|
||||||
|
*> NCVT is INTEGER
|
||||||
|
*> On entry, NCVT specifies the number of columns of
|
||||||
|
*> the matrix VT. NCVT must be at least 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NRU
|
||||||
|
*> \verbatim
|
||||||
|
*> NRU is INTEGER
|
||||||
|
*> On entry, NRU specifies the number of rows of
|
||||||
|
*> the matrix U. NRU must be at least 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] NCC
|
||||||
|
*> \verbatim
|
||||||
|
*> NCC is INTEGER
|
||||||
|
*> On entry, NCC specifies the number of columns of
|
||||||
|
*> the matrix C. NCC must be at least 0.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] D
|
||||||
|
*> \verbatim
|
||||||
|
*> D is DOUBLE PRECISION array, dimension (N)
|
||||||
|
*> On entry, D contains the diagonal entries of the
|
||||||
|
*> bidiagonal matrix whose SVD is desired. On normal exit,
|
||||||
|
*> D contains the singular values in ascending order.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] E
|
||||||
|
*> \verbatim
|
||||||
|
*> E is DOUBLE PRECISION array.
|
||||||
|
*> dimension is (N-1) if SQRE = 0 and N if SQRE = 1.
|
||||||
|
*> On entry, the entries of E contain the offdiagonal entries
|
||||||
|
*> of the bidiagonal matrix whose SVD is desired. On normal
|
||||||
|
*> exit, E will contain 0. If the algorithm does not converge,
|
||||||
|
*> D and E will contain the diagonal and superdiagonal entries
|
||||||
|
*> of a bidiagonal matrix orthogonally equivalent to the one
|
||||||
|
*> given as input.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] VT
|
||||||
|
*> \verbatim
|
||||||
|
*> VT is DOUBLE PRECISION array, dimension (LDVT, NCVT)
|
||||||
|
*> On entry, contains a matrix which on exit has been
|
||||||
|
*> premultiplied by P**T, dimension N-by-NCVT if SQRE = 0
|
||||||
|
*> and (N+1)-by-NCVT if SQRE = 1 (not referenced if NCVT=0).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDVT
|
||||||
|
*> \verbatim
|
||||||
|
*> LDVT is INTEGER
|
||||||
|
*> On entry, LDVT specifies the leading dimension of VT as
|
||||||
|
*> declared in the calling (sub) program. LDVT must be at
|
||||||
|
*> least 1. If NCVT is nonzero LDVT must also be at least N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] U
|
||||||
|
*> \verbatim
|
||||||
|
*> U is DOUBLE PRECISION array, dimension (LDU, N)
|
||||||
|
*> On entry, contains a matrix which on exit has been
|
||||||
|
*> postmultiplied by Q, dimension NRU-by-N if SQRE = 0
|
||||||
|
*> and NRU-by-(N+1) if SQRE = 1 (not referenced if NRU=0).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDU
|
||||||
|
*> \verbatim
|
||||||
|
*> LDU is INTEGER
|
||||||
|
*> On entry, LDU specifies the leading dimension of U as
|
||||||
|
*> declared in the calling (sub) program. LDU must be at
|
||||||
|
*> least max( 1, NRU ) .
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in,out] C
|
||||||
|
*> \verbatim
|
||||||
|
*> C is DOUBLE PRECISION array, dimension (LDC, NCC)
|
||||||
|
*> On entry, contains an N-by-NCC matrix which on exit
|
||||||
|
*> has been premultiplied by Q**T dimension N-by-NCC if SQRE = 0
|
||||||
|
*> and (N+1)-by-NCC if SQRE = 1 (not referenced if NCC=0).
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] LDC
|
||||||
|
*> \verbatim
|
||||||
|
*> LDC is INTEGER
|
||||||
|
*> On entry, LDC specifies the leading dimension of C as
|
||||||
|
*> declared in the calling (sub) program. LDC must be at
|
||||||
|
*> least 1. If NCC is nonzero, LDC must also be at least N.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] WORK
|
||||||
|
*> \verbatim
|
||||||
|
*> WORK is DOUBLE PRECISION array, dimension (4*N)
|
||||||
|
*> Workspace. Only referenced if one of NCVT, NRU, or NCC is
|
||||||
|
*> nonzero, and if N is at least 2.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INFO
|
||||||
|
*> \verbatim
|
||||||
|
*> INFO is INTEGER
|
||||||
|
*> On exit, a value of 0 indicates a successful exit.
|
||||||
|
*> If INFO < 0, argument number -INFO is illegal.
|
||||||
|
*> If INFO > 0, the algorithm did not converge, and INFO
|
||||||
|
*> specifies how many superdiagonals did not converge.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date June 2016
|
||||||
|
*
|
||||||
|
*> \ingroup OTHERauxiliary
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Huan Ren, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT,
|
||||||
|
$ U, LDU, C, LDC, WORK, INFO )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* June 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
CHARACTER UPLO
|
||||||
|
INTEGER INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU, SQRE
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
DOUBLE PRECISION C( LDC, * ), D( * ), E( * ), U( LDU, * ),
|
||||||
|
$ VT( LDVT, * ), WORK( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION ZERO
|
||||||
|
PARAMETER ( ZERO = 0.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
LOGICAL ROTATE
|
||||||
|
INTEGER I, ISUB, IUPLO, J, NP1, SQRE1
|
||||||
|
DOUBLE PRECISION CS, R, SMIN, SN
|
||||||
|
* ..
|
||||||
|
* .. External Subroutines ..
|
||||||
|
EXTERNAL DBDSQR, DLARTG, DLASR, DSWAP, XERBLA
|
||||||
|
* ..
|
||||||
|
* .. External Functions ..
|
||||||
|
LOGICAL LSAME
|
||||||
|
EXTERNAL LSAME
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC MAX
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Test the input parameters.
|
||||||
|
*
|
||||||
|
INFO = 0
|
||||||
|
IUPLO = 0
|
||||||
|
IF( LSAME( UPLO, 'U' ) )
|
||||||
|
$ IUPLO = 1
|
||||||
|
IF( LSAME( UPLO, 'L' ) )
|
||||||
|
$ IUPLO = 2
|
||||||
|
IF( IUPLO.EQ.0 ) THEN
|
||||||
|
INFO = -1
|
||||||
|
ELSE IF( ( SQRE.LT.0 ) .OR. ( SQRE.GT.1 ) ) THEN
|
||||||
|
INFO = -2
|
||||||
|
ELSE IF( N.LT.0 ) THEN
|
||||||
|
INFO = -3
|
||||||
|
ELSE IF( NCVT.LT.0 ) THEN
|
||||||
|
INFO = -4
|
||||||
|
ELSE IF( NRU.LT.0 ) THEN
|
||||||
|
INFO = -5
|
||||||
|
ELSE IF( NCC.LT.0 ) THEN
|
||||||
|
INFO = -6
|
||||||
|
ELSE IF( ( NCVT.EQ.0 .AND. LDVT.LT.1 ) .OR.
|
||||||
|
$ ( NCVT.GT.0 .AND. LDVT.LT.MAX( 1, N ) ) ) THEN
|
||||||
|
INFO = -10
|
||||||
|
ELSE IF( LDU.LT.MAX( 1, NRU ) ) THEN
|
||||||
|
INFO = -12
|
||||||
|
ELSE IF( ( NCC.EQ.0 .AND. LDC.LT.1 ) .OR.
|
||||||
|
$ ( NCC.GT.0 .AND. LDC.LT.MAX( 1, N ) ) ) THEN
|
||||||
|
INFO = -14
|
||||||
|
END IF
|
||||||
|
IF( INFO.NE.0 ) THEN
|
||||||
|
CALL XERBLA( 'DLASDQ', -INFO )
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
IF( N.EQ.0 )
|
||||||
|
$ RETURN
|
||||||
|
*
|
||||||
|
* ROTATE is true if any singular vectors desired, false otherwise
|
||||||
|
*
|
||||||
|
ROTATE = ( NCVT.GT.0 ) .OR. ( NRU.GT.0 ) .OR. ( NCC.GT.0 )
|
||||||
|
NP1 = N + 1
|
||||||
|
SQRE1 = SQRE
|
||||||
|
*
|
||||||
|
* If matrix non-square upper bidiagonal, rotate to be lower
|
||||||
|
* bidiagonal. The rotations are on the right.
|
||||||
|
*
|
||||||
|
IF( ( IUPLO.EQ.1 ) .AND. ( SQRE1.EQ.1 ) ) THEN
|
||||||
|
DO 10 I = 1, N - 1
|
||||||
|
CALL DLARTG( D( I ), E( I ), CS, SN, R )
|
||||||
|
D( I ) = R
|
||||||
|
E( I ) = SN*D( I+1 )
|
||||||
|
D( I+1 ) = CS*D( I+1 )
|
||||||
|
IF( ROTATE ) THEN
|
||||||
|
WORK( I ) = CS
|
||||||
|
WORK( N+I ) = SN
|
||||||
|
END IF
|
||||||
|
10 CONTINUE
|
||||||
|
CALL DLARTG( D( N ), E( N ), CS, SN, R )
|
||||||
|
D( N ) = R
|
||||||
|
E( N ) = ZERO
|
||||||
|
IF( ROTATE ) THEN
|
||||||
|
WORK( N ) = CS
|
||||||
|
WORK( N+N ) = SN
|
||||||
|
END IF
|
||||||
|
IUPLO = 2
|
||||||
|
SQRE1 = 0
|
||||||
|
*
|
||||||
|
* Update singular vectors if desired.
|
||||||
|
*
|
||||||
|
IF( NCVT.GT.0 )
|
||||||
|
$ CALL DLASR( 'L', 'V', 'F', NP1, NCVT, WORK( 1 ),
|
||||||
|
$ WORK( NP1 ), VT, LDVT )
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* If matrix lower bidiagonal, rotate to be upper bidiagonal
|
||||||
|
* by applying Givens rotations on the left.
|
||||||
|
*
|
||||||
|
IF( IUPLO.EQ.2 ) THEN
|
||||||
|
DO 20 I = 1, N - 1
|
||||||
|
CALL DLARTG( D( I ), E( I ), CS, SN, R )
|
||||||
|
D( I ) = R
|
||||||
|
E( I ) = SN*D( I+1 )
|
||||||
|
D( I+1 ) = CS*D( I+1 )
|
||||||
|
IF( ROTATE ) THEN
|
||||||
|
WORK( I ) = CS
|
||||||
|
WORK( N+I ) = SN
|
||||||
|
END IF
|
||||||
|
20 CONTINUE
|
||||||
|
*
|
||||||
|
* If matrix (N+1)-by-N lower bidiagonal, one additional
|
||||||
|
* rotation is needed.
|
||||||
|
*
|
||||||
|
IF( SQRE1.EQ.1 ) THEN
|
||||||
|
CALL DLARTG( D( N ), E( N ), CS, SN, R )
|
||||||
|
D( N ) = R
|
||||||
|
IF( ROTATE ) THEN
|
||||||
|
WORK( N ) = CS
|
||||||
|
WORK( N+N ) = SN
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Update singular vectors if desired.
|
||||||
|
*
|
||||||
|
IF( NRU.GT.0 ) THEN
|
||||||
|
IF( SQRE1.EQ.0 ) THEN
|
||||||
|
CALL DLASR( 'R', 'V', 'F', NRU, N, WORK( 1 ),
|
||||||
|
$ WORK( NP1 ), U, LDU )
|
||||||
|
ELSE
|
||||||
|
CALL DLASR( 'R', 'V', 'F', NRU, NP1, WORK( 1 ),
|
||||||
|
$ WORK( NP1 ), U, LDU )
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
IF( NCC.GT.0 ) THEN
|
||||||
|
IF( SQRE1.EQ.0 ) THEN
|
||||||
|
CALL DLASR( 'L', 'V', 'F', N, NCC, WORK( 1 ),
|
||||||
|
$ WORK( NP1 ), C, LDC )
|
||||||
|
ELSE
|
||||||
|
CALL DLASR( 'L', 'V', 'F', NP1, NCC, WORK( 1 ),
|
||||||
|
$ WORK( NP1 ), C, LDC )
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Call DBDSQR to compute the SVD of the reduced real
|
||||||
|
* N-by-N upper bidiagonal matrix.
|
||||||
|
*
|
||||||
|
CALL DBDSQR( 'U', N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, C,
|
||||||
|
$ LDC, WORK, INFO )
|
||||||
|
*
|
||||||
|
* Sort the singular values into ascending order (insertion sort on
|
||||||
|
* singular values, but only one transposition per singular vector)
|
||||||
|
*
|
||||||
|
DO 40 I = 1, N
|
||||||
|
*
|
||||||
|
* Scan for smallest D(I).
|
||||||
|
*
|
||||||
|
ISUB = I
|
||||||
|
SMIN = D( I )
|
||||||
|
DO 30 J = I + 1, N
|
||||||
|
IF( D( J ).LT.SMIN ) THEN
|
||||||
|
ISUB = J
|
||||||
|
SMIN = D( J )
|
||||||
|
END IF
|
||||||
|
30 CONTINUE
|
||||||
|
IF( ISUB.NE.I ) THEN
|
||||||
|
*
|
||||||
|
* Swap singular values and vectors.
|
||||||
|
*
|
||||||
|
D( ISUB ) = D( I )
|
||||||
|
D( I ) = SMIN
|
||||||
|
IF( NCVT.GT.0 )
|
||||||
|
$ CALL DSWAP( NCVT, VT( ISUB, 1 ), LDVT, VT( I, 1 ), LDVT )
|
||||||
|
IF( NRU.GT.0 )
|
||||||
|
$ CALL DSWAP( NRU, U( 1, ISUB ), 1, U( 1, I ), 1 )
|
||||||
|
IF( NCC.GT.0 )
|
||||||
|
$ CALL DSWAP( NCC, C( ISUB, 1 ), LDC, C( I, 1 ), LDC )
|
||||||
|
END IF
|
||||||
|
40 CONTINUE
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLASDQ
|
||||||
|
*
|
||||||
|
END
|
|
@ -0,0 +1,172 @@
|
||||||
|
*> \brief \b DLASDT creates a tree of subproblems for bidiagonal divide and conquer. Used by sbdsdc.
|
||||||
|
*
|
||||||
|
* =========== DOCUMENTATION ===========
|
||||||
|
*
|
||||||
|
* Online html documentation available at
|
||||||
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
|
*
|
||||||
|
*> \htmlonly
|
||||||
|
*> Download DLASDT + dependencies
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasdt.f">
|
||||||
|
*> [TGZ]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasdt.f">
|
||||||
|
*> [ZIP]</a>
|
||||||
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdt.f">
|
||||||
|
*> [TXT]</a>
|
||||||
|
*> \endhtmlonly
|
||||||
|
*
|
||||||
|
* Definition:
|
||||||
|
* ===========
|
||||||
|
*
|
||||||
|
* SUBROUTINE DLASDT( N, LVL, ND, INODE, NDIML, NDIMR, MSUB )
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
* INTEGER LVL, MSUB, N, ND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
* INTEGER INODE( * ), NDIML( * ), NDIMR( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*> \par Purpose:
|
||||||
|
* =============
|
||||||
|
*>
|
||||||
|
*> \verbatim
|
||||||
|
*>
|
||||||
|
*> DLASDT creates a tree of subproblems for bidiagonal divide and
|
||||||
|
*> conquer.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> On entry, the number of diagonal elements of the
|
||||||
|
*> bidiagonal matrix.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] LVL
|
||||||
|
*> \verbatim
|
||||||
|
*> LVL is INTEGER
|
||||||
|
*> On exit, the number of levels on the computation tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] ND
|
||||||
|
*> \verbatim
|
||||||
|
*> ND is INTEGER
|
||||||
|
*> On exit, the number of nodes on the tree.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] INODE
|
||||||
|
*> \verbatim
|
||||||
|
*> INODE is INTEGER array, dimension ( N )
|
||||||
|
*> On exit, centers of subproblems.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] NDIML
|
||||||
|
*> \verbatim
|
||||||
|
*> NDIML is INTEGER array, dimension ( N )
|
||||||
|
*> On exit, row dimensions of left children.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[out] NDIMR
|
||||||
|
*> \verbatim
|
||||||
|
*> NDIMR is INTEGER array, dimension ( N )
|
||||||
|
*> On exit, row dimensions of right children.
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] MSUB
|
||||||
|
*> \verbatim
|
||||||
|
*> MSUB is INTEGER
|
||||||
|
*> On entry, the maximum row dimension each subproblem at the
|
||||||
|
*> bottom of the tree can be of.
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
*> \author Univ. of Tennessee
|
||||||
|
*> \author Univ. of California Berkeley
|
||||||
|
*> \author Univ. of Colorado Denver
|
||||||
|
*> \author NAG Ltd.
|
||||||
|
*
|
||||||
|
*> \date December 2016
|
||||||
|
*
|
||||||
|
*> \ingroup OTHERauxiliary
|
||||||
|
*
|
||||||
|
*> \par Contributors:
|
||||||
|
* ==================
|
||||||
|
*>
|
||||||
|
*> Ming Gu and Huan Ren, Computer Science Division, University of
|
||||||
|
*> California at Berkeley, USA
|
||||||
|
*>
|
||||||
|
* =====================================================================
|
||||||
|
SUBROUTINE DLASDT( N, LVL, ND, INODE, NDIML, NDIMR, MSUB )
|
||||||
|
*
|
||||||
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
|
* December 2016
|
||||||
|
*
|
||||||
|
* .. Scalar Arguments ..
|
||||||
|
INTEGER LVL, MSUB, N, ND
|
||||||
|
* ..
|
||||||
|
* .. Array Arguments ..
|
||||||
|
INTEGER INODE( * ), NDIML( * ), NDIMR( * )
|
||||||
|
* ..
|
||||||
|
*
|
||||||
|
* =====================================================================
|
||||||
|
*
|
||||||
|
* .. Parameters ..
|
||||||
|
DOUBLE PRECISION TWO
|
||||||
|
PARAMETER ( TWO = 2.0D+0 )
|
||||||
|
* ..
|
||||||
|
* .. Local Scalars ..
|
||||||
|
INTEGER I, IL, IR, LLST, MAXN, NCRNT, NLVL
|
||||||
|
DOUBLE PRECISION TEMP
|
||||||
|
* ..
|
||||||
|
* .. Intrinsic Functions ..
|
||||||
|
INTRINSIC DBLE, INT, LOG, MAX
|
||||||
|
* ..
|
||||||
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
* Find the number of levels on the tree.
|
||||||
|
*
|
||||||
|
MAXN = MAX( 1, N )
|
||||||
|
TEMP = LOG( DBLE( MAXN ) / DBLE( MSUB+1 ) ) / LOG( TWO )
|
||||||
|
LVL = INT( TEMP ) + 1
|
||||||
|
*
|
||||||
|
I = N / 2
|
||||||
|
INODE( 1 ) = I + 1
|
||||||
|
NDIML( 1 ) = I
|
||||||
|
NDIMR( 1 ) = N - I - 1
|
||||||
|
IL = 0
|
||||||
|
IR = 1
|
||||||
|
LLST = 1
|
||||||
|
DO 20 NLVL = 1, LVL - 1
|
||||||
|
*
|
||||||
|
* Constructing the tree at (NLVL+1)-st level. The number of
|
||||||
|
* nodes created on this level is LLST * 2.
|
||||||
|
*
|
||||||
|
DO 10 I = 0, LLST - 1
|
||||||
|
IL = IL + 2
|
||||||
|
IR = IR + 2
|
||||||
|
NCRNT = LLST + I
|
||||||
|
NDIML( IL ) = NDIML( NCRNT ) / 2
|
||||||
|
NDIMR( IL ) = NDIML( NCRNT ) - NDIML( IL ) - 1
|
||||||
|
INODE( IL ) = INODE( NCRNT ) - NDIMR( IL ) - 1
|
||||||
|
NDIML( IR ) = NDIMR( NCRNT ) / 2
|
||||||
|
NDIMR( IR ) = NDIMR( NCRNT ) - NDIML( IR ) - 1
|
||||||
|
INODE( IR ) = INODE( NCRNT ) + NDIML( IR ) + 1
|
||||||
|
10 CONTINUE
|
||||||
|
LLST = LLST*2
|
||||||
|
20 CONTINUE
|
||||||
|
ND = LLST*2 - 1
|
||||||
|
*
|
||||||
|
RETURN
|
||||||
|
*
|
||||||
|
* End of DLASDT
|
||||||
|
*
|
||||||
|
END
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASET + dependencies
|
*> Download DLASET + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaset.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaset.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaset.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaset.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaset.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaset.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA )
|
* SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER UPLO
|
* CHARACTER UPLO
|
||||||
* INTEGER LDA, M, N
|
* INTEGER LDA, M, N
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * )
|
* DOUBLE PRECISION A( LDA, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
*> The constant to which the diagonal elements are to be set.
|
*> The constant to which the diagonal elements are to be set.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] A
|
*> \param[out] A
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> A is DOUBLE PRECISION array, dimension (LDA,N)
|
*> A is DOUBLE PRECISION array, dimension (LDA,N)
|
||||||
*> On exit, the leading m-by-n submatrix of A is set as follows:
|
*> On exit, the leading m-by-n submatrix of A is set as follows:
|
||||||
|
@ -98,22 +98,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA )
|
SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER UPLO
|
CHARACTER UPLO
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASQ1 + dependencies
|
*> Download DLASQ1 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq1.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq1.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq1.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq1.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq1.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq1.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASQ1( N, D, E, WORK, INFO )
|
* SUBROUTINE DLASQ1( N, D, E, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, N
|
* INTEGER INFO, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION D( * ), E( * ), WORK( * )
|
* DOUBLE PRECISION D( * ), E( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -89,29 +89,29 @@
|
||||||
*> represent a matrix with the same singular values
|
*> represent a matrix with the same singular values
|
||||||
*> which the calling subroutine could use to finish the
|
*> which the calling subroutine could use to finish the
|
||||||
*> computation, or even feed back into DLASQ1
|
*> computation, or even feed back into DLASQ1
|
||||||
*> = 3, termination criterion of outer while loop not met
|
*> = 3, termination criterion of outer while loop not met
|
||||||
*> (program created more than N unreduced blocks)
|
*> (program created more than N unreduced blocks)
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASQ1( N, D, E, WORK, INFO )
|
SUBROUTINE DLASQ1( N, D, E, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, N
|
INTEGER INFO, N
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
*
|
*
|
||||||
INFO = 0
|
INFO = 0
|
||||||
IF( N.LT.0 ) THEN
|
IF( N.LT.0 ) THEN
|
||||||
INFO = -2
|
INFO = -1
|
||||||
CALL XERBLA( 'DLASQ1', -INFO )
|
CALL XERBLA( 'DLASQ1', -INFO )
|
||||||
RETURN
|
RETURN
|
||||||
ELSE IF( N.EQ.0 ) THEN
|
ELSE IF( N.EQ.0 ) THEN
|
||||||
|
@ -189,7 +189,7 @@
|
||||||
CALL DCOPY( N-1, E, 1, WORK( 2 ), 2 )
|
CALL DCOPY( N-1, E, 1, WORK( 2 ), 2 )
|
||||||
CALL DLASCL( 'G', 0, 0, SIGMX, SCALE, 2*N-1, 1, WORK, 2*N-1,
|
CALL DLASCL( 'G', 0, 0, SIGMX, SCALE, 2*N-1, 1, WORK, 2*N-1,
|
||||||
$ IINFO )
|
$ IINFO )
|
||||||
*
|
*
|
||||||
* Compute the q's and e's.
|
* Compute the q's and e's.
|
||||||
*
|
*
|
||||||
DO 30 I = 1, 2*N - 1
|
DO 30 I = 1, 2*N - 1
|
||||||
|
|
|
@ -2,38 +2,38 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASQ2 + dependencies
|
*> Download DLASQ2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASQ2( N, Z, INFO )
|
* SUBROUTINE DLASQ2( N, Z, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, N
|
* INTEGER INFO, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION Z( * )
|
* DOUBLE PRECISION Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
*>
|
*>
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*>
|
*>
|
||||||
*> DLASQ2 computes all the eigenvalues of the symmetric positive
|
*> DLASQ2 computes all the eigenvalues of the symmetric positive
|
||||||
*> definite tridiagonal matrix associated with the qd array Z to high
|
*> definite tridiagonal matrix associated with the qd array Z to high
|
||||||
*> relative accuracy are computed to high relative accuracy, in the
|
*> relative accuracy are computed to high relative accuracy, in the
|
||||||
*> absence of denormalization, underflow and overflow.
|
*> absence of denormalization, underflow and overflow.
|
||||||
|
@ -83,19 +83,19 @@
|
||||||
*> = 2, current block of Z not diagonalized after 100*N
|
*> = 2, current block of Z not diagonalized after 100*N
|
||||||
*> iterations (in inner while loop). On exit Z holds
|
*> iterations (in inner while loop). On exit Z holds
|
||||||
*> a qd array with the same eigenvalues as the given Z.
|
*> a qd array with the same eigenvalues as the given Z.
|
||||||
*> = 3, termination criterion of outer while loop not met
|
*> = 3, termination criterion of outer while loop not met
|
||||||
*> (program created more than N unreduced blocks)
|
*> (program created more than N unreduced blocks)
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -112,10 +112,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASQ2( N, Z, INFO )
|
SUBROUTINE DLASQ2( N, Z, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, N
|
INTEGER INFO, N
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
LOGICAL IEEE
|
LOGICAL IEEE
|
||||||
INTEGER I0, I1, I4, IINFO, IPN4, ITER, IWHILA, IWHILB,
|
INTEGER I0, I1, I4, IINFO, IPN4, ITER, IWHILA, IWHILB,
|
||||||
$ K, KMIN, N0, N1, NBIG, NDIV, NFAIL, PP, SPLT,
|
$ K, KMIN, N0, N1, NBIG, NDIV, NFAIL, PP, SPLT,
|
||||||
$ TTYPE
|
$ TTYPE
|
||||||
DOUBLE PRECISION D, DEE, DEEMIN, DESIG, DMIN, DMIN1, DMIN2, DN,
|
DOUBLE PRECISION D, DEE, DEEMIN, DESIG, DMIN, DMIN1, DMIN2, DN,
|
||||||
$ DN1, DN2, E, EMAX, EMIN, EPS, G, OLDEMN, QMAX,
|
$ DN1, DN2, E, EMAX, EMIN, EPS, G, OLDEMN, QMAX,
|
||||||
|
@ -155,7 +155,7 @@
|
||||||
INTRINSIC ABS, DBLE, MAX, MIN, SQRT
|
INTRINSIC ABS, DBLE, MAX, MIN, SQRT
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
* Test the input arguments.
|
* Test the input arguments.
|
||||||
* (in case DLASQ2 is not called by DLASQ1)
|
* (in case DLASQ2 is not called by DLASQ1)
|
||||||
*
|
*
|
||||||
|
@ -195,7 +195,7 @@
|
||||||
END IF
|
END IF
|
||||||
Z( 5 ) = Z( 1 ) + Z( 2 ) + Z( 3 )
|
Z( 5 ) = Z( 1 ) + Z( 2 ) + Z( 3 )
|
||||||
IF( Z( 2 ).GT.Z( 3 )*TOL2 ) THEN
|
IF( Z( 2 ).GT.Z( 3 )*TOL2 ) THEN
|
||||||
T = HALF*( ( Z( 1 )-Z( 3 ) )+Z( 2 ) )
|
T = HALF*( ( Z( 1 )-Z( 3 ) )+Z( 2 ) )
|
||||||
S = Z( 3 )*( Z( 2 ) / T )
|
S = Z( 3 )*( Z( 2 ) / T )
|
||||||
IF( S.LE.T ) THEN
|
IF( S.LE.T ) THEN
|
||||||
S = Z( 3 )*( Z( 2 ) / ( T*( ONE+SQRT( ONE+S / T ) ) ) )
|
S = Z( 3 )*( Z( 2 ) / ( T*( ONE+SQRT( ONE+S / T ) ) ) )
|
||||||
|
@ -264,19 +264,19 @@
|
||||||
Z( 2*N-1 ) = ZERO
|
Z( 2*N-1 ) = ZERO
|
||||||
RETURN
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Check whether the machine is IEEE conformable.
|
* Check whether the machine is IEEE conformable.
|
||||||
*
|
*
|
||||||
IEEE = ILAENV( 10, 'DLASQ2', 'N', 1, 2, 3, 4 ).EQ.1 .AND.
|
IEEE = ILAENV( 10, 'DLASQ2', 'N', 1, 2, 3, 4 ).EQ.1 .AND.
|
||||||
$ ILAENV( 11, 'DLASQ2', 'N', 1, 2, 3, 4 ).EQ.1
|
$ ILAENV( 11, 'DLASQ2', 'N', 1, 2, 3, 4 ).EQ.1
|
||||||
*
|
*
|
||||||
* Rearrange data for locality: Z=(q1,qq1,e1,ee1,q2,qq2,e2,ee2,...).
|
* Rearrange data for locality: Z=(q1,qq1,e1,ee1,q2,qq2,e2,ee2,...).
|
||||||
*
|
*
|
||||||
DO 30 K = 2*N, 2, -2
|
DO 30 K = 2*N, 2, -2
|
||||||
Z( 2*K ) = ZERO
|
Z( 2*K ) = ZERO
|
||||||
Z( 2*K-1 ) = Z( K )
|
Z( 2*K-1 ) = Z( K )
|
||||||
Z( 2*K-2 ) = ZERO
|
Z( 2*K-2 ) = ZERO
|
||||||
Z( 2*K-3 ) = Z( K-1 )
|
Z( 2*K-3 ) = Z( K-1 )
|
||||||
30 CONTINUE
|
30 CONTINUE
|
||||||
*
|
*
|
||||||
I0 = 1
|
I0 = 1
|
||||||
|
@ -333,7 +333,7 @@
|
||||||
D = Z( I4+1 )*( D / Z( I4-2*PP-2 ) )
|
D = Z( I4+1 )*( D / Z( I4-2*PP-2 ) )
|
||||||
END IF
|
END IF
|
||||||
EMIN = MIN( EMIN, Z( I4-2*PP ) )
|
EMIN = MIN( EMIN, Z( I4-2*PP ) )
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
Z( 4*N0-PP-2 ) = D
|
Z( 4*N0-PP-2 ) = D
|
||||||
*
|
*
|
||||||
* Now find qmax.
|
* Now find qmax.
|
||||||
|
@ -364,14 +364,14 @@
|
||||||
NDIV = 2*( N0-I0 )
|
NDIV = 2*( N0-I0 )
|
||||||
*
|
*
|
||||||
DO 160 IWHILA = 1, N + 1
|
DO 160 IWHILA = 1, N + 1
|
||||||
IF( N0.LT.1 )
|
IF( N0.LT.1 )
|
||||||
$ GO TO 170
|
$ GO TO 170
|
||||||
*
|
*
|
||||||
* While array unfinished do
|
* While array unfinished do
|
||||||
*
|
*
|
||||||
* E(N0) holds the value of SIGMA when submatrix in I0:N0
|
* E(N0) holds the value of SIGMA when submatrix in I0:N0
|
||||||
* splits from the rest of the array, but is negated.
|
* splits from the rest of the array, but is negated.
|
||||||
*
|
*
|
||||||
DESIG = ZERO
|
DESIG = ZERO
|
||||||
IF( N0.EQ.N ) THEN
|
IF( N0.EQ.N ) THEN
|
||||||
SIGMA = ZERO
|
SIGMA = ZERO
|
||||||
|
@ -386,7 +386,7 @@
|
||||||
* Find last unreduced submatrix's top index I0, find QMAX and
|
* Find last unreduced submatrix's top index I0, find QMAX and
|
||||||
* EMIN. Find Gershgorin-type bound if Q's much greater than E's.
|
* EMIN. Find Gershgorin-type bound if Q's much greater than E's.
|
||||||
*
|
*
|
||||||
EMAX = ZERO
|
EMAX = ZERO
|
||||||
IF( N0.GT.I0 ) THEN
|
IF( N0.GT.I0 ) THEN
|
||||||
EMIN = ABS( Z( 4*N0-5 ) )
|
EMIN = ABS( Z( 4*N0-5 ) )
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -404,7 +404,7 @@
|
||||||
QMAX = MAX( QMAX, Z( I4-7 )+Z( I4-5 ) )
|
QMAX = MAX( QMAX, Z( I4-7 )+Z( I4-5 ) )
|
||||||
EMIN = MIN( EMIN, Z( I4-5 ) )
|
EMIN = MIN( EMIN, Z( I4-5 ) )
|
||||||
90 CONTINUE
|
90 CONTINUE
|
||||||
I4 = 4
|
I4 = 4
|
||||||
*
|
*
|
||||||
100 CONTINUE
|
100 CONTINUE
|
||||||
I0 = I4 / 4
|
I0 = I4 / 4
|
||||||
|
@ -421,7 +421,7 @@
|
||||||
KMIN = ( I4+3 )/4
|
KMIN = ( I4+3 )/4
|
||||||
END IF
|
END IF
|
||||||
110 CONTINUE
|
110 CONTINUE
|
||||||
IF( (KMIN-I0)*2.LT.N0-KMIN .AND.
|
IF( (KMIN-I0)*2.LT.N0-KMIN .AND.
|
||||||
$ DEEMIN.LE.HALF*Z(4*N0-3) ) THEN
|
$ DEEMIN.LE.HALF*Z(4*N0-3) ) THEN
|
||||||
IPN4 = 4*( I0+N0 )
|
IPN4 = 4*( I0+N0 )
|
||||||
PP = 2
|
PP = 2
|
||||||
|
@ -446,15 +446,15 @@
|
||||||
*
|
*
|
||||||
DMIN = -MAX( ZERO, QMIN-TWO*SQRT( QMIN )*SQRT( EMAX ) )
|
DMIN = -MAX( ZERO, QMIN-TWO*SQRT( QMIN )*SQRT( EMAX ) )
|
||||||
*
|
*
|
||||||
* Now I0:N0 is unreduced.
|
* Now I0:N0 is unreduced.
|
||||||
* PP = 0 for ping, PP = 1 for pong.
|
* PP = 0 for ping, PP = 1 for pong.
|
||||||
* PP = 2 indicates that flipping was applied to the Z array and
|
* PP = 2 indicates that flipping was applied to the Z array and
|
||||||
* and that the tests for deflation upon entry in DLASQ3
|
* and that the tests for deflation upon entry in DLASQ3
|
||||||
* should not be performed.
|
* should not be performed.
|
||||||
*
|
*
|
||||||
NBIG = 100*( N0-I0+1 )
|
NBIG = 100*( N0-I0+1 )
|
||||||
DO 140 IWHILB = 1, NBIG
|
DO 140 IWHILB = 1, NBIG
|
||||||
IF( I0.GT.N0 )
|
IF( I0.GT.N0 )
|
||||||
$ GO TO 150
|
$ GO TO 150
|
||||||
*
|
*
|
||||||
* While submatrix unfinished take a good dqds step.
|
* While submatrix unfinished take a good dqds step.
|
||||||
|
@ -497,8 +497,8 @@
|
||||||
140 CONTINUE
|
140 CONTINUE
|
||||||
*
|
*
|
||||||
INFO = 2
|
INFO = 2
|
||||||
*
|
*
|
||||||
* Maximum number of iterations exceeded, restore the shift
|
* Maximum number of iterations exceeded, restore the shift
|
||||||
* SIGMA and place the new d's and e's in a qd array.
|
* SIGMA and place the new d's and e's in a qd array.
|
||||||
* This might need to be done for several blocks
|
* This might need to be done for several blocks
|
||||||
*
|
*
|
||||||
|
@ -549,16 +549,16 @@
|
||||||
INFO = 3
|
INFO = 3
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
* end IWHILA
|
* end IWHILA
|
||||||
*
|
*
|
||||||
170 CONTINUE
|
170 CONTINUE
|
||||||
*
|
*
|
||||||
* Move q's to the front.
|
* Move q's to the front.
|
||||||
*
|
*
|
||||||
DO 180 K = 2, N
|
DO 180 K = 2, N
|
||||||
Z( K ) = Z( 4*K-3 )
|
Z( K ) = Z( 4*K-3 )
|
||||||
180 CONTINUE
|
180 CONTINUE
|
||||||
*
|
*
|
||||||
* Sort and compute sum of eigenvalues.
|
* Sort and compute sum of eigenvalues.
|
||||||
*
|
*
|
||||||
CALL DLASRT( 'D', N, Z, IINFO )
|
CALL DLASRT( 'D', N, Z, IINFO )
|
||||||
|
@ -570,7 +570,7 @@
|
||||||
*
|
*
|
||||||
* Store trace, sum(eigenvalues) and information on performance.
|
* Store trace, sum(eigenvalues) and information on performance.
|
||||||
*
|
*
|
||||||
Z( 2*N+1 ) = TRACE
|
Z( 2*N+1 ) = TRACE
|
||||||
Z( 2*N+2 ) = E
|
Z( 2*N+2 ) = E
|
||||||
Z( 2*N+3 ) = DBLE( ITER )
|
Z( 2*N+3 ) = DBLE( ITER )
|
||||||
Z( 2*N+4 ) = DBLE( NDIV ) / DBLE( N**2 )
|
Z( 2*N+4 ) = DBLE( NDIV ) / DBLE( N**2 )
|
||||||
|
|
|
@ -2,18 +2,18 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASQ3 + dependencies
|
*> Download DLASQ3 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq3.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq3.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq3.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq3.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
* SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL,
|
* SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL,
|
||||||
* ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
|
* ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
|
||||||
* DN2, G, TAU )
|
* DN2, G, TAU )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* LOGICAL IEEE
|
* LOGICAL IEEE
|
||||||
* INTEGER I0, ITER, N0, NDIV, NFAIL, PP
|
* INTEGER I0, ITER, N0, NDIV, NFAIL, PP
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION Z( * )
|
* DOUBLE PRECISION Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -58,9 +58,9 @@
|
||||||
*> Last index.
|
*> Last index.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] Z
|
*> \param[in,out] Z
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> Z is DOUBLE PRECISION array, dimension ( 4*N )
|
*> Z is DOUBLE PRECISION array, dimension ( 4*N0 )
|
||||||
*> Z holds the qd array.
|
*> Z holds the qd array.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
@ -68,8 +68,8 @@
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> PP is INTEGER
|
*> PP is INTEGER
|
||||||
*> PP=0 for ping, PP=1 for pong.
|
*> PP=0 for ping, PP=1 for pong.
|
||||||
*> PP=2 indicates that flipping was applied to the Z array
|
*> PP=2 indicates that flipping was applied to the Z array
|
||||||
*> and that the initial tests for deflation should not be
|
*> and that the initial tests for deflation should not be
|
||||||
*> performed.
|
*> performed.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
@ -97,22 +97,22 @@
|
||||||
*> Maximum value of q.
|
*> Maximum value of q.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] NFAIL
|
*> \param[in,out] NFAIL
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> NFAIL is INTEGER
|
*> NFAIL is INTEGER
|
||||||
*> Number of times shift was too big.
|
*> Increment NFAIL by 1 each time the shift was too big.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] ITER
|
*> \param[in,out] ITER
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> ITER is INTEGER
|
*> ITER is INTEGER
|
||||||
*> Number of iterations.
|
*> Increment ITER by 1 for each iteration.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[out] NDIV
|
*> \param[in,out] NDIV
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> NDIV is INTEGER
|
*> NDIV is INTEGER
|
||||||
*> Number of divisions.
|
*> Increment NDIV by 1 for each division.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] IEEE
|
*> \param[in] IEEE
|
||||||
|
@ -168,12 +168,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -182,10 +182,10 @@
|
||||||
$ ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
|
$ ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
|
||||||
$ DN2, G, TAU )
|
$ DN2, G, TAU )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
LOGICAL IEEE
|
LOGICAL IEEE
|
||||||
|
@ -286,7 +286,7 @@
|
||||||
GO TO 10
|
GO TO 10
|
||||||
*
|
*
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
IF( PP.EQ.2 )
|
IF( PP.EQ.2 )
|
||||||
$ PP = 0
|
$ PP = 0
|
||||||
*
|
*
|
||||||
* Reverse the qd-array, if warranted.
|
* Reverse the qd-array, if warranted.
|
||||||
|
@ -345,7 +345,7 @@
|
||||||
*
|
*
|
||||||
GO TO 90
|
GO TO 90
|
||||||
*
|
*
|
||||||
ELSE IF( DMIN.LT.ZERO .AND. DMIN1.GT.ZERO .AND.
|
ELSE IF( DMIN.LT.ZERO .AND. DMIN1.GT.ZERO .AND.
|
||||||
$ Z( 4*( N0-1 )-PP ).LT.TOL*( SIGMA+DN1 ) .AND.
|
$ Z( 4*( N0-1 )-PP ).LT.TOL*( SIGMA+DN1 ) .AND.
|
||||||
$ ABS( DN ).LT.TOL*SIGMA ) THEN
|
$ ABS( DN ).LT.TOL*SIGMA ) THEN
|
||||||
*
|
*
|
||||||
|
@ -389,7 +389,7 @@
|
||||||
GO TO 70
|
GO TO 70
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
*
|
*
|
||||||
* Possible underflow. Play it safe.
|
* Possible underflow. Play it safe.
|
||||||
*
|
*
|
||||||
GO TO 80
|
GO TO 80
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASQ4 + dependencies
|
*> Download DLASQ4 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq4.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq4.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq4.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq4.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq4.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq4.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN,
|
* SUBROUTINE DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN,
|
||||||
* DN1, DN2, TAU, TTYPE, G )
|
* DN1, DN2, TAU, TTYPE, G )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER I0, N0, N0IN, PP, TTYPE
|
* INTEGER I0, N0, N0IN, PP, TTYPE
|
||||||
* DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, TAU
|
* DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, TAU
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION Z( * )
|
* DOUBLE PRECISION Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in] Z
|
*> \param[in] Z
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> Z is DOUBLE PRECISION array, dimension ( 4*N )
|
*> Z is DOUBLE PRECISION array, dimension ( 4*N0 )
|
||||||
*> Z holds the qd array.
|
*> Z holds the qd array.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
*>
|
*>
|
||||||
*> \param[in,out] G
|
*> \param[in,out] G
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> G is REAL
|
*> G is DOUBLE PRECISION
|
||||||
*> G is passed as an argument in order to save its value between
|
*> G is passed as an argument in order to save its value between
|
||||||
*> calls to DLASQ4.
|
*> calls to DLASQ4.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -130,12 +130,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -151,10 +151,10 @@
|
||||||
SUBROUTINE DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN,
|
SUBROUTINE DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN,
|
||||||
$ DN1, DN2, TAU, TTYPE, G )
|
$ DN1, DN2, TAU, TTYPE, G )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER I0, N0, N0IN, PP, TTYPE
|
INTEGER I0, N0, N0IN, PP, TTYPE
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
TTYPE = -1
|
TTYPE = -1
|
||||||
RETURN
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
NN = 4*N0 + PP
|
NN = 4*N0 + PP
|
||||||
IF( N0IN.EQ.N0 ) THEN
|
IF( N0IN.EQ.N0 ) THEN
|
||||||
*
|
*
|
||||||
|
@ -240,7 +240,6 @@
|
||||||
NP = NN - 9
|
NP = NN - 9
|
||||||
ELSE
|
ELSE
|
||||||
NP = NN - 2*PP
|
NP = NN - 2*PP
|
||||||
B2 = Z( NP-2 )
|
|
||||||
GAM = DN1
|
GAM = DN1
|
||||||
IF( Z( NP-4 ) .GT. Z( NP-2 ) )
|
IF( Z( NP-4 ) .GT. Z( NP-2 ) )
|
||||||
$ RETURN
|
$ RETURN
|
||||||
|
@ -262,7 +261,7 @@
|
||||||
$ RETURN
|
$ RETURN
|
||||||
B2 = B2*( Z( I4 ) / Z( I4-2 ) )
|
B2 = B2*( Z( I4 ) / Z( I4-2 ) )
|
||||||
A2 = A2 + B2
|
A2 = A2 + B2
|
||||||
IF( HUNDRD*MAX( B2, B1 ).LT.A2 .OR. CNST1.LT.A2 )
|
IF( HUNDRD*MAX( B2, B1 ).LT.A2 .OR. CNST1.LT.A2 )
|
||||||
$ GO TO 20
|
$ GO TO 20
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
|
@ -303,7 +302,7 @@
|
||||||
$ RETURN
|
$ RETURN
|
||||||
B2 = B2*( Z( I4 ) / Z( I4-2 ) )
|
B2 = B2*( Z( I4 ) / Z( I4-2 ) )
|
||||||
A2 = A2 + B2
|
A2 = A2 + B2
|
||||||
IF( HUNDRD*MAX( B2, B1 ).LT.A2 .OR. CNST1.LT.A2 )
|
IF( HUNDRD*MAX( B2, B1 ).LT.A2 .OR. CNST1.LT.A2 )
|
||||||
$ GO TO 40
|
$ GO TO 40
|
||||||
30 CONTINUE
|
30 CONTINUE
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
|
@ -331,7 +330,7 @@
|
||||||
*
|
*
|
||||||
* One eigenvalue just deflated. Use DMIN1, DN1 for DMIN and DN.
|
* One eigenvalue just deflated. Use DMIN1, DN1 for DMIN and DN.
|
||||||
*
|
*
|
||||||
IF( DMIN1.EQ.DN1 .AND. DMIN2.EQ.DN2 ) THEN
|
IF( DMIN1.EQ.DN1 .AND. DMIN2.EQ.DN2 ) THEN
|
||||||
*
|
*
|
||||||
* Cases 7 and 8.
|
* Cases 7 and 8.
|
||||||
*
|
*
|
||||||
|
@ -349,7 +348,7 @@
|
||||||
$ RETURN
|
$ RETURN
|
||||||
B1 = B1*( Z( I4 ) / Z( I4-2 ) )
|
B1 = B1*( Z( I4 ) / Z( I4-2 ) )
|
||||||
B2 = B2 + B1
|
B2 = B2 + B1
|
||||||
IF( HUNDRD*MAX( B1, A2 ).LT.B2 )
|
IF( HUNDRD*MAX( B1, A2 ).LT.B2 )
|
||||||
$ GO TO 60
|
$ GO TO 60
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
|
@ -358,7 +357,7 @@
|
||||||
GAP2 = HALF*DMIN2 - A2
|
GAP2 = HALF*DMIN2 - A2
|
||||||
IF( GAP2.GT.ZERO .AND. GAP2.GT.B2*A2 ) THEN
|
IF( GAP2.GT.ZERO .AND. GAP2.GT.B2*A2 ) THEN
|
||||||
S = MAX( S, A2*( ONE-CNST2*A2*( B2 / GAP2 )*B2 ) )
|
S = MAX( S, A2*( ONE-CNST2*A2*( B2 / GAP2 )*B2 ) )
|
||||||
ELSE
|
ELSE
|
||||||
S = MAX( S, A2*( ONE-CNST2*B2 ) )
|
S = MAX( S, A2*( ONE-CNST2*B2 ) )
|
||||||
TTYPE = -8
|
TTYPE = -8
|
||||||
END IF
|
END IF
|
||||||
|
@ -378,7 +377,7 @@
|
||||||
*
|
*
|
||||||
* Cases 10 and 11.
|
* Cases 10 and 11.
|
||||||
*
|
*
|
||||||
IF( DMIN2.EQ.DN2 .AND. TWO*Z( NN-5 ).LT.Z( NN-7 ) ) THEN
|
IF( DMIN2.EQ.DN2 .AND. TWO*Z( NN-5 ).LT.Z( NN-7 ) ) THEN
|
||||||
TTYPE = -10
|
TTYPE = -10
|
||||||
S = THIRD*DMIN2
|
S = THIRD*DMIN2
|
||||||
IF( Z( NN-5 ).GT.Z( NN-7 ) )
|
IF( Z( NN-5 ).GT.Z( NN-7 ) )
|
||||||
|
@ -402,7 +401,7 @@
|
||||||
$ SQRT( Z( NN-11 ) )*SQRT( Z( NN-9 ) ) - A2
|
$ SQRT( Z( NN-11 ) )*SQRT( Z( NN-9 ) ) - A2
|
||||||
IF( GAP2.GT.ZERO .AND. GAP2.GT.B2*A2 ) THEN
|
IF( GAP2.GT.ZERO .AND. GAP2.GT.B2*A2 ) THEN
|
||||||
S = MAX( S, A2*( ONE-CNST2*A2*( B2 / GAP2 )*B2 ) )
|
S = MAX( S, A2*( ONE-CNST2*A2*( B2 / GAP2 )*B2 ) )
|
||||||
ELSE
|
ELSE
|
||||||
S = MAX( S, A2*( ONE-CNST2*B2 ) )
|
S = MAX( S, A2*( ONE-CNST2*B2 ) )
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -413,7 +412,7 @@
|
||||||
*
|
*
|
||||||
* Case 12, more than two eigenvalues deflated. No information.
|
* Case 12, more than two eigenvalues deflated. No information.
|
||||||
*
|
*
|
||||||
S = ZERO
|
S = ZERO
|
||||||
TTYPE = -12
|
TTYPE = -12
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASQ5 + dependencies
|
*> Download DLASQ5 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq5.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq5.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq5.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq5.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq5.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq5.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, DN,
|
* SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, DN,
|
||||||
* DNM1, DNM2, IEEE, EPS )
|
* DNM1, DNM2, IEEE, EPS )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* LOGICAL IEEE
|
* LOGICAL IEEE
|
||||||
* INTEGER I0, N0, PP
|
* INTEGER I0, N0, PP
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION Z( * )
|
* DOUBLE PRECISION Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
*> IEEE is LOGICAL
|
*> IEEE is LOGICAL
|
||||||
*> Flag for IEEE or non IEEE arithmetic.
|
*> Flag for IEEE or non IEEE arithmetic.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*>
|
||||||
*> \param[in] EPS
|
*> \param[in] EPS
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> EPS is DOUBLE PRECISION
|
*> EPS is DOUBLE PRECISION
|
||||||
|
@ -131,12 +131,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -144,10 +144,10 @@
|
||||||
SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2,
|
SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2,
|
||||||
$ DN, DNM1, DNM2, IEEE, EPS )
|
$ DN, DNM1, DNM2, IEEE, EPS )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
LOGICAL IEEE
|
LOGICAL IEEE
|
||||||
|
@ -181,7 +181,7 @@
|
||||||
IF( TAU.LT.DTHRESH*HALF ) TAU = ZERO
|
IF( TAU.LT.DTHRESH*HALF ) TAU = ZERO
|
||||||
IF( TAU.NE.ZERO ) THEN
|
IF( TAU.NE.ZERO ) THEN
|
||||||
J4 = 4*I0 + PP - 3
|
J4 = 4*I0 + PP - 3
|
||||||
EMIN = Z( J4+4 )
|
EMIN = Z( J4+4 )
|
||||||
D = Z( J4 ) - TAU
|
D = Z( J4 ) - TAU
|
||||||
DMIN = D
|
DMIN = D
|
||||||
DMIN1 = -Z( J4 )
|
DMIN1 = -Z( J4 )
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
*
|
*
|
||||||
IF( PP.EQ.0 ) THEN
|
IF( PP.EQ.0 ) THEN
|
||||||
DO 10 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 10 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-2 ) = D + Z( J4-1 )
|
Z( J4-2 ) = D + Z( J4-1 )
|
||||||
TEMP = Z( J4+1 ) / Z( J4-2 )
|
TEMP = Z( J4+1 ) / Z( J4-2 )
|
||||||
D = D*TEMP - TAU
|
D = D*TEMP - TAU
|
||||||
DMIN = MIN( DMIN, D )
|
DMIN = MIN( DMIN, D )
|
||||||
|
@ -201,7 +201,7 @@
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 20 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 20 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-3 ) = D + Z( J4 )
|
Z( J4-3 ) = D + Z( J4 )
|
||||||
TEMP = Z( J4+2 ) / Z( J4-3 )
|
TEMP = Z( J4+2 ) / Z( J4-3 )
|
||||||
D = D*TEMP - TAU
|
D = D*TEMP - TAU
|
||||||
DMIN = MIN( DMIN, D )
|
DMIN = MIN( DMIN, D )
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Unroll last two steps.
|
* Unroll last two steps.
|
||||||
*
|
*
|
||||||
DNM2 = D
|
DNM2 = D
|
||||||
DMIN2 = DMIN
|
DMIN2 = DMIN
|
||||||
|
@ -235,10 +235,10 @@
|
||||||
*
|
*
|
||||||
IF( PP.EQ.0 ) THEN
|
IF( PP.EQ.0 ) THEN
|
||||||
DO 30 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 30 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-2 ) = D + Z( J4-1 )
|
Z( J4-2 ) = D + Z( J4-1 )
|
||||||
IF( D.LT.ZERO ) THEN
|
IF( D.LT.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
ELSE
|
ELSE
|
||||||
Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
|
Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
|
||||||
D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU
|
D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU
|
||||||
END IF
|
END IF
|
||||||
|
@ -247,10 +247,10 @@
|
||||||
30 CONTINUE
|
30 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 40 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 40 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-3 ) = D + Z( J4 )
|
Z( J4-3 ) = D + Z( J4 )
|
||||||
IF( D.LT.ZERO ) THEN
|
IF( D.LT.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
ELSE
|
ELSE
|
||||||
Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
|
Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
|
||||||
D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU
|
D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU
|
||||||
END IF
|
END IF
|
||||||
|
@ -259,7 +259,7 @@
|
||||||
40 CONTINUE
|
40 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Unroll last two steps.
|
* Unroll last two steps.
|
||||||
*
|
*
|
||||||
DNM2 = D
|
DNM2 = D
|
||||||
DMIN2 = DMIN
|
DMIN2 = DMIN
|
||||||
|
@ -290,17 +290,17 @@
|
||||||
ELSE
|
ELSE
|
||||||
* This is the version that sets d's to zero if they are small enough
|
* This is the version that sets d's to zero if they are small enough
|
||||||
J4 = 4*I0 + PP - 3
|
J4 = 4*I0 + PP - 3
|
||||||
EMIN = Z( J4+4 )
|
EMIN = Z( J4+4 )
|
||||||
D = Z( J4 ) - TAU
|
D = Z( J4 ) - TAU
|
||||||
DMIN = D
|
DMIN = D
|
||||||
DMIN1 = -Z( J4 )
|
DMIN1 = -Z( J4 )
|
||||||
IF( IEEE ) THEN
|
IF( IEEE ) THEN
|
||||||
*
|
*
|
||||||
* Code for IEEE arithmetic.
|
* Code for IEEE arithmetic.
|
||||||
*
|
*
|
||||||
IF( PP.EQ.0 ) THEN
|
IF( PP.EQ.0 ) THEN
|
||||||
DO 50 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 50 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-2 ) = D + Z( J4-1 )
|
Z( J4-2 ) = D + Z( J4-1 )
|
||||||
TEMP = Z( J4+1 ) / Z( J4-2 )
|
TEMP = Z( J4+1 ) / Z( J4-2 )
|
||||||
D = D*TEMP - TAU
|
D = D*TEMP - TAU
|
||||||
IF( D.LT.DTHRESH ) D = ZERO
|
IF( D.LT.DTHRESH ) D = ZERO
|
||||||
|
@ -310,7 +310,7 @@
|
||||||
50 CONTINUE
|
50 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 60 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 60 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-3 ) = D + Z( J4 )
|
Z( J4-3 ) = D + Z( J4 )
|
||||||
TEMP = Z( J4+2 ) / Z( J4-3 )
|
TEMP = Z( J4+2 ) / Z( J4-3 )
|
||||||
D = D*TEMP - TAU
|
D = D*TEMP - TAU
|
||||||
IF( D.LT.DTHRESH ) D = ZERO
|
IF( D.LT.DTHRESH ) D = ZERO
|
||||||
|
@ -319,9 +319,9 @@
|
||||||
EMIN = MIN( Z( J4-1 ), EMIN )
|
EMIN = MIN( Z( J4-1 ), EMIN )
|
||||||
60 CONTINUE
|
60 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Unroll last two steps.
|
* Unroll last two steps.
|
||||||
*
|
*
|
||||||
DNM2 = D
|
DNM2 = D
|
||||||
DMIN2 = DMIN
|
DMIN2 = DMIN
|
||||||
J4 = 4*( N0-2 ) - PP
|
J4 = 4*( N0-2 ) - PP
|
||||||
|
@ -330,7 +330,7 @@
|
||||||
Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )
|
Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )
|
||||||
DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU
|
DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU
|
||||||
DMIN = MIN( DMIN, DNM1 )
|
DMIN = MIN( DMIN, DNM1 )
|
||||||
*
|
*
|
||||||
DMIN1 = DMIN
|
DMIN1 = DMIN
|
||||||
J4 = J4 + 4
|
J4 = J4 + 4
|
||||||
J4P2 = J4 + 2*PP - 1
|
J4P2 = J4 + 2*PP - 1
|
||||||
|
@ -338,17 +338,17 @@
|
||||||
Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )
|
Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )
|
||||||
DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU
|
DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU
|
||||||
DMIN = MIN( DMIN, DN )
|
DMIN = MIN( DMIN, DN )
|
||||||
*
|
*
|
||||||
ELSE
|
ELSE
|
||||||
*
|
*
|
||||||
* Code for non IEEE arithmetic.
|
* Code for non IEEE arithmetic.
|
||||||
*
|
*
|
||||||
IF( PP.EQ.0 ) THEN
|
IF( PP.EQ.0 ) THEN
|
||||||
DO 70 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 70 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-2 ) = D + Z( J4-1 )
|
Z( J4-2 ) = D + Z( J4-1 )
|
||||||
IF( D.LT.ZERO ) THEN
|
IF( D.LT.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
ELSE
|
ELSE
|
||||||
Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
|
Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
|
||||||
D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU
|
D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU
|
||||||
END IF
|
END IF
|
||||||
|
@ -358,10 +358,10 @@
|
||||||
70 CONTINUE
|
70 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 80 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 80 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-3 ) = D + Z( J4 )
|
Z( J4-3 ) = D + Z( J4 )
|
||||||
IF( D.LT.ZERO ) THEN
|
IF( D.LT.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
ELSE
|
ELSE
|
||||||
Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
|
Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
|
||||||
D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU
|
D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU
|
||||||
END IF
|
END IF
|
||||||
|
@ -370,9 +370,9 @@
|
||||||
EMIN = MIN( EMIN, Z( J4-1 ) )
|
EMIN = MIN( EMIN, Z( J4-1 ) )
|
||||||
80 CONTINUE
|
80 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Unroll last two steps.
|
* Unroll last two steps.
|
||||||
*
|
*
|
||||||
DNM2 = D
|
DNM2 = D
|
||||||
DMIN2 = DMIN
|
DMIN2 = DMIN
|
||||||
J4 = 4*( N0-2 ) - PP
|
J4 = 4*( N0-2 ) - PP
|
||||||
|
@ -385,7 +385,7 @@
|
||||||
DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU
|
DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU
|
||||||
END IF
|
END IF
|
||||||
DMIN = MIN( DMIN, DNM1 )
|
DMIN = MIN( DMIN, DNM1 )
|
||||||
*
|
*
|
||||||
DMIN1 = DMIN
|
DMIN1 = DMIN
|
||||||
J4 = J4 + 4
|
J4 = J4 + 4
|
||||||
J4P2 = J4 + 2*PP - 1
|
J4P2 = J4 + 2*PP - 1
|
||||||
|
@ -397,10 +397,10 @@
|
||||||
DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU
|
DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU
|
||||||
END IF
|
END IF
|
||||||
DMIN = MIN( DMIN, DN )
|
DMIN = MIN( DMIN, DN )
|
||||||
*
|
*
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
Z( J4+2 ) = DN
|
Z( J4+2 ) = DN
|
||||||
Z( 4*N0-PP ) = EMIN
|
Z( 4*N0-PP ) = EMIN
|
||||||
RETURN
|
RETURN
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASQ6 + dependencies
|
*> Download DLASQ6 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq6.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq6.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq6.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq6.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq6.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq6.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,
|
* SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,
|
||||||
* DNM1, DNM2 )
|
* DNM1, DNM2 )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER I0, N0, PP
|
* INTEGER I0, N0, PP
|
||||||
* DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DNM1, DNM2
|
* DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DNM1, DNM2
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION Z( * )
|
* DOUBLE PRECISION Z( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -106,12 +106,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -119,10 +119,10 @@
|
||||||
SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,
|
SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,
|
||||||
$ DNM1, DNM2 )
|
$ DNM1, DNM2 )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER I0, N0, PP
|
INTEGER I0, N0, PP
|
||||||
|
@ -156,13 +156,13 @@
|
||||||
*
|
*
|
||||||
SAFMIN = DLAMCH( 'Safe minimum' )
|
SAFMIN = DLAMCH( 'Safe minimum' )
|
||||||
J4 = 4*I0 + PP - 3
|
J4 = 4*I0 + PP - 3
|
||||||
EMIN = Z( J4+4 )
|
EMIN = Z( J4+4 )
|
||||||
D = Z( J4 )
|
D = Z( J4 )
|
||||||
DMIN = D
|
DMIN = D
|
||||||
*
|
*
|
||||||
IF( PP.EQ.0 ) THEN
|
IF( PP.EQ.0 ) THEN
|
||||||
DO 10 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 10 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-2 ) = D + Z( J4-1 )
|
Z( J4-2 ) = D + Z( J4-1 )
|
||||||
IF( Z( J4-2 ).EQ.ZERO ) THEN
|
IF( Z( J4-2 ).EQ.ZERO ) THEN
|
||||||
Z( J4 ) = ZERO
|
Z( J4 ) = ZERO
|
||||||
D = Z( J4+1 )
|
D = Z( J4+1 )
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
TEMP = Z( J4+1 ) / Z( J4-2 )
|
TEMP = Z( J4+1 ) / Z( J4-2 )
|
||||||
Z( J4 ) = Z( J4-1 )*TEMP
|
Z( J4 ) = Z( J4-1 )*TEMP
|
||||||
D = D*TEMP
|
D = D*TEMP
|
||||||
ELSE
|
ELSE
|
||||||
Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
|
Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
|
||||||
D = Z( J4+1 )*( D / Z( J4-2 ) )
|
D = Z( J4+1 )*( D / Z( J4-2 ) )
|
||||||
END IF
|
END IF
|
||||||
|
@ -182,7 +182,7 @@
|
||||||
10 CONTINUE
|
10 CONTINUE
|
||||||
ELSE
|
ELSE
|
||||||
DO 20 J4 = 4*I0, 4*( N0-3 ), 4
|
DO 20 J4 = 4*I0, 4*( N0-3 ), 4
|
||||||
Z( J4-3 ) = D + Z( J4 )
|
Z( J4-3 ) = D + Z( J4 )
|
||||||
IF( Z( J4-3 ).EQ.ZERO ) THEN
|
IF( Z( J4-3 ).EQ.ZERO ) THEN
|
||||||
Z( J4-1 ) = ZERO
|
Z( J4-1 ) = ZERO
|
||||||
D = Z( J4+2 )
|
D = Z( J4+2 )
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
TEMP = Z( J4+2 ) / Z( J4-3 )
|
TEMP = Z( J4+2 ) / Z( J4-3 )
|
||||||
Z( J4-1 ) = Z( J4 )*TEMP
|
Z( J4-1 ) = Z( J4 )*TEMP
|
||||||
D = D*TEMP
|
D = D*TEMP
|
||||||
ELSE
|
ELSE
|
||||||
Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
|
Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
|
||||||
D = Z( J4+2 )*( D / Z( J4-3 ) )
|
D = Z( J4+2 )*( D / Z( J4-3 ) )
|
||||||
END IF
|
END IF
|
||||||
|
@ -202,7 +202,7 @@
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
* Unroll last two steps.
|
* Unroll last two steps.
|
||||||
*
|
*
|
||||||
DNM2 = D
|
DNM2 = D
|
||||||
DMIN2 = DMIN
|
DMIN2 = DMIN
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASR + dependencies
|
*> Download DLASR + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasr.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasr.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasr.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA )
|
* SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER DIRECT, PIVOT, SIDE
|
* CHARACTER DIRECT, PIVOT, SIDE
|
||||||
* INTEGER LDA, M, N
|
* INTEGER LDA, M, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), C( * ), S( * )
|
* DOUBLE PRECISION A( LDA, * ), C( * ), S( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -36,35 +36,35 @@
|
||||||
*>
|
*>
|
||||||
*> DLASR applies a sequence of plane rotations to a real matrix A,
|
*> DLASR applies a sequence of plane rotations to a real matrix A,
|
||||||
*> from either the left or the right.
|
*> from either the left or the right.
|
||||||
*>
|
*>
|
||||||
*> When SIDE = 'L', the transformation takes the form
|
*> When SIDE = 'L', the transformation takes the form
|
||||||
*>
|
*>
|
||||||
*> A := P*A
|
*> A := P*A
|
||||||
*>
|
*>
|
||||||
*> and when SIDE = 'R', the transformation takes the form
|
*> and when SIDE = 'R', the transformation takes the form
|
||||||
*>
|
*>
|
||||||
*> A := A*P**T
|
*> A := A*P**T
|
||||||
*>
|
*>
|
||||||
*> where P is an orthogonal matrix consisting of a sequence of z plane
|
*> where P is an orthogonal matrix consisting of a sequence of z plane
|
||||||
*> rotations, with z = M when SIDE = 'L' and z = N when SIDE = 'R',
|
*> rotations, with z = M when SIDE = 'L' and z = N when SIDE = 'R',
|
||||||
*> and P**T is the transpose of P.
|
*> and P**T is the transpose of P.
|
||||||
*>
|
*>
|
||||||
*> When DIRECT = 'F' (Forward sequence), then
|
*> When DIRECT = 'F' (Forward sequence), then
|
||||||
*>
|
*>
|
||||||
*> P = P(z-1) * ... * P(2) * P(1)
|
*> P = P(z-1) * ... * P(2) * P(1)
|
||||||
*>
|
*>
|
||||||
*> and when DIRECT = 'B' (Backward sequence), then
|
*> and when DIRECT = 'B' (Backward sequence), then
|
||||||
*>
|
*>
|
||||||
*> P = P(1) * P(2) * ... * P(z-1)
|
*> P = P(1) * P(2) * ... * P(z-1)
|
||||||
*>
|
*>
|
||||||
*> where P(k) is a plane rotation matrix defined by the 2-by-2 rotation
|
*> where P(k) is a plane rotation matrix defined by the 2-by-2 rotation
|
||||||
*>
|
*>
|
||||||
*> R(k) = ( c(k) s(k) )
|
*> R(k) = ( c(k) s(k) )
|
||||||
*> = ( -s(k) c(k) ).
|
*> = ( -s(k) c(k) ).
|
||||||
*>
|
*>
|
||||||
*> When PIVOT = 'V' (Variable pivot), the rotation is performed
|
*> When PIVOT = 'V' (Variable pivot), the rotation is performed
|
||||||
*> for the plane (k,k+1), i.e., P(k) has the form
|
*> for the plane (k,k+1), i.e., P(k) has the form
|
||||||
*>
|
*>
|
||||||
*> P(k) = ( 1 )
|
*> P(k) = ( 1 )
|
||||||
*> ( ... )
|
*> ( ... )
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
|
@ -73,13 +73,13 @@
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
*> ( ... )
|
*> ( ... )
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
*>
|
*>
|
||||||
*> where R(k) appears as a rank-2 modification to the identity matrix in
|
*> where R(k) appears as a rank-2 modification to the identity matrix in
|
||||||
*> rows and columns k and k+1.
|
*> rows and columns k and k+1.
|
||||||
*>
|
*>
|
||||||
*> When PIVOT = 'T' (Top pivot), the rotation is performed for the
|
*> When PIVOT = 'T' (Top pivot), the rotation is performed for the
|
||||||
*> plane (1,k+1), so P(k) has the form
|
*> plane (1,k+1), so P(k) has the form
|
||||||
*>
|
*>
|
||||||
*> P(k) = ( c(k) s(k) )
|
*> P(k) = ( c(k) s(k) )
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
*> ( ... )
|
*> ( ... )
|
||||||
|
@ -88,12 +88,12 @@
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
*> ( ... )
|
*> ( ... )
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
*>
|
*>
|
||||||
*> where R(k) appears in rows and columns 1 and k+1.
|
*> where R(k) appears in rows and columns 1 and k+1.
|
||||||
*>
|
*>
|
||||||
*> Similarly, when PIVOT = 'B' (Bottom pivot), the rotation is
|
*> Similarly, when PIVOT = 'B' (Bottom pivot), the rotation is
|
||||||
*> performed for the plane (k,z), giving P(k) the form
|
*> performed for the plane (k,z), giving P(k) the form
|
||||||
*>
|
*>
|
||||||
*> P(k) = ( 1 )
|
*> P(k) = ( 1 )
|
||||||
*> ( ... )
|
*> ( ... )
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
*> ( ... )
|
*> ( ... )
|
||||||
*> ( 1 )
|
*> ( 1 )
|
||||||
*> ( -s(k) c(k) )
|
*> ( -s(k) c(k) )
|
||||||
*>
|
*>
|
||||||
*> where R(k) appears in rows and columns k and z. The rotations are
|
*> where R(k) appears in rows and columns k and z. The rotations are
|
||||||
*> performed without ever forming P(k) explicitly.
|
*> performed without ever forming P(k) explicitly.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -187,22 +187,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA )
|
SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER DIRECT, PIVOT, SIDE
|
CHARACTER DIRECT, PIVOT, SIDE
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASRT + dependencies
|
*> Download DLASRT + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasrt.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasrt.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasrt.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasrt.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasrt.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasrt.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASRT( ID, N, D, INFO )
|
* SUBROUTINE DLASRT( ID, N, D, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER ID
|
* CHARACTER ID
|
||||||
* INTEGER INFO, N
|
* INTEGER INFO, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION D( * )
|
* DOUBLE PRECISION D( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -76,22 +76,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERcomputational
|
*> \ingroup auxOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASRT( ID, N, D, INFO )
|
SUBROUTINE DLASRT( ID, N, D, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER ID
|
CHARACTER ID
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
* Test the input paramters.
|
* Test the input parameters.
|
||||||
*
|
*
|
||||||
INFO = 0
|
INFO = 0
|
||||||
DIR = -1
|
DIR = -1
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASSQ + dependencies
|
*> Download DLASSQ + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlassq.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlassq.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlassq.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlassq.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlassq.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlassq.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ )
|
* SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INCX, N
|
* INTEGER INCX, N
|
||||||
* DOUBLE PRECISION SCALE, SUMSQ
|
* DOUBLE PRECISION SCALE, SUMSQ
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION X( * )
|
* DOUBLE PRECISION X( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -91,22 +91,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ )
|
SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INCX, N
|
INTEGER INCX, N
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASV2 + dependencies
|
*> Download DLASV2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasv2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasv2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasv2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasv2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasv2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasv2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASV2( F, G, H, SSMIN, SSMAX, SNR, CSR, SNL, CSL )
|
* SUBROUTINE DLASV2( F, G, H, SSMIN, SSMAX, SNR, CSR, SNL, CSL )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* DOUBLE PRECISION CSL, CSR, F, G, H, SNL, SNR, SSMAX, SSMIN
|
* DOUBLE PRECISION CSL, CSR, F, G, H, SNL, SNR, SSMAX, SSMIN
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -102,14 +102,14 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup auxOTHERauxiliary
|
*> \ingroup OTHERauxiliary
|
||||||
*
|
*
|
||||||
*> \par Further Details:
|
*> \par Further Details:
|
||||||
* =====================
|
* =====================
|
||||||
|
@ -138,10 +138,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASV2( F, G, H, SSMIN, SSMAX, SNR, CSR, SNL, CSL )
|
SUBROUTINE DLASV2( F, G, H, SSMIN, SSMAX, SNR, CSR, SNL, CSL )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
DOUBLE PRECISION CSL, CSR, F, G, H, SNL, SNR, SSMAX, SSMIN
|
DOUBLE PRECISION CSL, CSR, F, G, H, SNL, SNR, SSMAX, SSMIN
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLASWP + dependencies
|
*> Download DLASWP + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaswp.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaswp.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaswp.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaswp.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaswp.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaswp.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLASWP( N, A, LDA, K1, K2, IPIV, INCX )
|
* SUBROUTINE DLASWP( N, A, LDA, K1, K2, IPIV, INCX )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INCX, K1, K2, LDA, N
|
* INTEGER INCX, K1, K2, LDA, N
|
||||||
* ..
|
* ..
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* INTEGER IPIV( * )
|
* INTEGER IPIV( * )
|
||||||
* DOUBLE PRECISION A( LDA, * )
|
* DOUBLE PRECISION A( LDA, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -71,34 +71,35 @@
|
||||||
*> \param[in] K2
|
*> \param[in] K2
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> K2 is INTEGER
|
*> K2 is INTEGER
|
||||||
*> The last element of IPIV for which a row interchange will
|
*> (K2-K1+1) is the number of elements of IPIV for which a row
|
||||||
*> be done.
|
*> interchange will be done.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] IPIV
|
*> \param[in] IPIV
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> IPIV is INTEGER array, dimension (K2*abs(INCX))
|
*> IPIV is INTEGER array, dimension (K1+(K2-K1)*abs(INCX))
|
||||||
*> The vector of pivot indices. Only the elements in positions
|
*> The vector of pivot indices. Only the elements in positions
|
||||||
*> K1 through K2 of IPIV are accessed.
|
*> K1 through K1+(K2-K1)*abs(INCX) of IPIV are accessed.
|
||||||
*> IPIV(K) = L implies rows K and L are to be interchanged.
|
*> IPIV(K1+(K-K1)*abs(INCX)) = L implies rows K and L are to be
|
||||||
|
*> interchanged.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*>
|
*>
|
||||||
*> \param[in] INCX
|
*> \param[in] INCX
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> INCX is INTEGER
|
*> INCX is INTEGER
|
||||||
*> The increment between successive values of IPIV. If IPIV
|
*> The increment between successive values of IPIV. If INCX
|
||||||
*> is negative, the pivots are applied in reverse order.
|
*> is negative, the pivots are applied in reverse order.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date June 2017
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
|
@ -114,10 +115,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLASWP( N, A, LDA, K1, K2, IPIV, INCX )
|
SUBROUTINE DLASWP( N, A, LDA, K1, K2, IPIV, INCX )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.1) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* June 2017
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INCX, K1, K2, LDA, N
|
INTEGER INCX, K1, K2, LDA, N
|
||||||
|
@ -135,7 +136,8 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
* Interchange row I with row IPIV(I) for each of rows K1 through K2.
|
* Interchange row I with row IPIV(K1+(I-K1)*abs(INCX)) for each of rows
|
||||||
|
* K1 through K2.
|
||||||
*
|
*
|
||||||
IF( INCX.GT.0 ) THEN
|
IF( INCX.GT.0 ) THEN
|
||||||
IX0 = K1
|
IX0 = K1
|
||||||
|
@ -143,7 +145,7 @@
|
||||||
I2 = K2
|
I2 = K2
|
||||||
INC = 1
|
INC = 1
|
||||||
ELSE IF( INCX.LT.0 ) THEN
|
ELSE IF( INCX.LT.0 ) THEN
|
||||||
IX0 = 1 + ( 1-K2 )*INCX
|
IX0 = K1 + ( K1-K2 )*INCX
|
||||||
I1 = K2
|
I1 = K2
|
||||||
I2 = K1
|
I2 = K1
|
||||||
INC = -1
|
INC = -1
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLATRD + dependencies
|
*> Download DLATRD + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlatrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlatrd.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlatrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlatrd.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrd.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrd.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
|
* SUBROUTINE DLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER UPLO
|
* CHARACTER UPLO
|
||||||
* INTEGER LDA, LDW, N, NB
|
* INTEGER LDA, LDW, N, NB
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), E( * ), TAU( * ), W( LDW, * )
|
* DOUBLE PRECISION A( LDA, * ), E( * ), TAU( * ), W( LDW, * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -134,12 +134,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
|
@ -198,10 +198,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
|
SUBROUTINE DLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER UPLO
|
CHARACTER UPLO
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DLATRS + dependencies
|
*> Download DLATRS + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlatrs.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlatrs.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlatrs.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlatrs.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrs.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrs.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,
|
* SUBROUTINE DLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,
|
||||||
* CNORM, INFO )
|
* CNORM, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER DIAG, NORMIN, TRANS, UPLO
|
* CHARACTER DIAG, NORMIN, TRANS, UPLO
|
||||||
* INTEGER INFO, LDA, N
|
* INTEGER INFO, LDA, N
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), CNORM( * ), X( * )
|
* DOUBLE PRECISION A( LDA, * ), CNORM( * ), X( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -153,12 +153,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERauxiliary
|
*> \ingroup doubleOTHERauxiliary
|
||||||
*
|
*
|
||||||
|
@ -238,10 +238,10 @@
|
||||||
SUBROUTINE DLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,
|
SUBROUTINE DLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,
|
||||||
$ CNORM, INFO )
|
$ CNORM, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK auxiliary routine (version 3.4.2) --
|
* -- LAPACK auxiliary routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER DIAG, NORMIN, TRANS, UPLO
|
CHARACTER DIAG, NORMIN, TRANS, UPLO
|
||||||
|
|
|
@ -2,21 +2,21 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
|
* DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INCX,N
|
* INTEGER INCX,N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION X(*)
|
* DOUBLE PRECISION X(*)
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -29,15 +29,35 @@
|
||||||
*> DNRM2 := sqrt( x'*x )
|
*> DNRM2 := sqrt( x'*x )
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
*> \param[in] N
|
||||||
|
*> \verbatim
|
||||||
|
*> N is INTEGER
|
||||||
|
*> number of elements in input vector(s)
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] X
|
||||||
|
*> \verbatim
|
||||||
|
*> X is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
|
||||||
|
*> \endverbatim
|
||||||
|
*>
|
||||||
|
*> \param[in] INCX
|
||||||
|
*> \verbatim
|
||||||
|
*> INCX is INTEGER
|
||||||
|
*> storage spacing between elements of DX
|
||||||
|
*> \endverbatim
|
||||||
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup double_blas_level1
|
*> \ingroup double_blas_level1
|
||||||
*
|
*
|
||||||
|
@ -54,10 +74,10 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
|
DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
|
||||||
*
|
*
|
||||||
* -- Reference BLAS level1 routine (version 3.4.0) --
|
* -- Reference BLAS level1 routine (version 3.7.0) --
|
||||||
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INCX,N
|
INTEGER INCX,N
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORG2L + dependencies
|
*> Download DORG2L + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorg2l.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorg2l.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorg2l.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorg2l.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2l.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2l.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORG2L( M, N, K, A, LDA, TAU, WORK, INFO )
|
* SUBROUTINE DORG2L( M, N, K, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDA, M, N
|
* INTEGER INFO, K, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -102,22 +102,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORG2L( M, N, K, A, LDA, TAU, WORK, INFO )
|
SUBROUTINE DORG2L( M, N, K, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDA, M, N
|
INTEGER INFO, K, LDA, M, N
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORG2R + dependencies
|
*> Download DORG2R + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorg2r.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorg2r.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorg2r.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorg2r.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2r.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2r.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO )
|
* SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDA, M, N
|
* INTEGER INFO, K, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -102,22 +102,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO )
|
SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDA, M, N
|
INTEGER INFO, K, LDA, M, N
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORGBR + dependencies
|
*> Download DORGBR + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgbr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgbr.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgbr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgbr.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgbr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgbr.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
* SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER VECT
|
* CHARACTER VECT
|
||||||
* INTEGER INFO, K, LDA, LWORK, M, N
|
* INTEGER INFO, K, LDA, LWORK, M, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -145,10 +145,10 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date April 2012
|
*> \date April 2012
|
||||||
*
|
*
|
||||||
|
@ -157,7 +157,7 @@
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.1) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* April 2012
|
* April 2012
|
||||||
|
@ -182,8 +182,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
INTEGER ILAENV
|
EXTERNAL LSAME
|
||||||
EXTERNAL LSAME, ILAENV
|
|
||||||
* ..
|
* ..
|
||||||
* .. External Subroutines ..
|
* .. External Subroutines ..
|
||||||
EXTERNAL DORGLQ, DORGQR, XERBLA
|
EXTERNAL DORGLQ, DORGQR, XERBLA
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORGL2 + dependencies
|
*> Download DORGL2 + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgl2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgl2.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgl2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgl2.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgl2.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgl2.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORGL2( M, N, K, A, LDA, TAU, WORK, INFO )
|
* SUBROUTINE DORGL2( M, N, K, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDA, M, N
|
* INTEGER INFO, K, LDA, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -101,22 +101,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORGL2( M, N, K, A, LDA, TAU, WORK, INFO )
|
SUBROUTINE DORGL2( M, N, K, A, LDA, TAU, WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDA, M, N
|
INTEGER INFO, K, LDA, M, N
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORGLQ + dependencies
|
*> Download DORGLQ + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorglq.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorglq.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorglq.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorglq.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorglq.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorglq.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORGLQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
* SUBROUTINE DORGLQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDA, LWORK, M, N
|
* INTEGER INFO, K, LDA, LWORK, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -115,22 +115,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORGLQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
SUBROUTINE DORGLQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDA, LWORK, M, N
|
INTEGER INFO, K, LDA, LWORK, M, N
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORGQL + dependencies
|
*> Download DORGQL + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgql.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgql.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgql.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgql.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgql.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgql.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORGQL( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
* SUBROUTINE DORGQL( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDA, LWORK, M, N
|
* INTEGER INFO, K, LDA, LWORK, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -116,22 +116,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORGQL( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
SUBROUTINE DORGQL( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDA, LWORK, M, N
|
INTEGER INFO, K, LDA, LWORK, M, N
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORGQR + dependencies
|
*> Download DORGQR + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgqr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgqr.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgqr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgqr.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgqr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgqr.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
* SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* INTEGER INFO, K, LDA, LWORK, M, N
|
* INTEGER INFO, K, LDA, LWORK, M, N
|
||||||
* ..
|
* ..
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -116,22 +116,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
INTEGER INFO, K, LDA, LWORK, M, N
|
INTEGER INFO, K, LDA, LWORK, M, N
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORGTR + dependencies
|
*> Download DORGTR + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgtr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgtr.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgtr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgtr.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgtr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgtr.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORGTR( UPLO, N, A, LDA, TAU, WORK, LWORK, INFO )
|
* SUBROUTINE DORGTR( UPLO, N, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER UPLO
|
* CHARACTER UPLO
|
||||||
* INTEGER INFO, LDA, LWORK, N
|
* INTEGER INFO, LDA, LWORK, N
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -111,22 +111,22 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DORGTR( UPLO, N, A, LDA, TAU, WORK, LWORK, INFO )
|
SUBROUTINE DORGTR( UPLO, N, A, LDA, TAU, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER UPLO
|
CHARACTER UPLO
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORM2L + dependencies
|
*> Download DORM2L + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorm2l.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorm2l.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorm2l.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorm2l.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2l.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2l.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
* SUBROUTINE DORM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
||||||
* WORK, INFO )
|
* WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER SIDE, TRANS
|
* CHARACTER SIDE, TRANS
|
||||||
* INTEGER INFO, K, LDA, LDC, M, N
|
* INTEGER INFO, K, LDA, LDC, M, N
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -146,12 +146,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -159,10 +159,10 @@
|
||||||
SUBROUTINE DORM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
SUBROUTINE DORM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
||||||
$ WORK, INFO )
|
$ WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER SIDE, TRANS
|
CHARACTER SIDE, TRANS
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORM2R + dependencies
|
*> Download DORM2R + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorm2r.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorm2r.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorm2r.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorm2r.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2r.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2r.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
* SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
||||||
* WORK, INFO )
|
* WORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER SIDE, TRANS
|
* CHARACTER SIDE, TRANS
|
||||||
* INTEGER INFO, K, LDA, LDC, M, N
|
* INTEGER INFO, K, LDA, LDC, M, N
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -146,12 +146,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date September 2012
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -159,10 +159,10 @@
|
||||||
SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
|
||||||
$ WORK, INFO )
|
$ WORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.2) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* September 2012
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER SIDE, TRANS
|
CHARACTER SIDE, TRANS
|
||||||
|
|
|
@ -2,25 +2,25 @@
|
||||||
*
|
*
|
||||||
* =========== DOCUMENTATION ===========
|
* =========== DOCUMENTATION ===========
|
||||||
*
|
*
|
||||||
* Online html documentation available at
|
* Online html documentation available at
|
||||||
* http://www.netlib.org/lapack/explore-html/
|
* http://www.netlib.org/lapack/explore-html/
|
||||||
*
|
*
|
||||||
*> \htmlonly
|
*> \htmlonly
|
||||||
*> Download DORMBR + dependencies
|
*> Download DORMBR + dependencies
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dormbr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dormbr.f">
|
||||||
*> [TGZ]</a>
|
*> [TGZ]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dormbr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dormbr.f">
|
||||||
*> [ZIP]</a>
|
*> [ZIP]</a>
|
||||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormbr.f">
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormbr.f">
|
||||||
*> [TXT]</a>
|
*> [TXT]</a>
|
||||||
*> \endhtmlonly
|
*> \endhtmlonly
|
||||||
*
|
*
|
||||||
* Definition:
|
* Definition:
|
||||||
* ===========
|
* ===========
|
||||||
*
|
*
|
||||||
* SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
|
* SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
|
||||||
* LDC, WORK, LWORK, INFO )
|
* LDC, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
* CHARACTER SIDE, TRANS, VECT
|
* CHARACTER SIDE, TRANS, VECT
|
||||||
* INTEGER INFO, K, LDA, LDC, LWORK, M, N
|
* INTEGER INFO, K, LDA, LDC, LWORK, M, N
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
* .. Array Arguments ..
|
* .. Array Arguments ..
|
||||||
* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
|
* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*> \par Purpose:
|
*> \par Purpose:
|
||||||
* =============
|
* =============
|
||||||
|
@ -182,12 +182,12 @@
|
||||||
* Authors:
|
* Authors:
|
||||||
* ========
|
* ========
|
||||||
*
|
*
|
||||||
*> \author Univ. of Tennessee
|
*> \author Univ. of Tennessee
|
||||||
*> \author Univ. of California Berkeley
|
*> \author Univ. of California Berkeley
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \date November 2011
|
*> \date December 2016
|
||||||
*
|
*
|
||||||
*> \ingroup doubleOTHERcomputational
|
*> \ingroup doubleOTHERcomputational
|
||||||
*
|
*
|
||||||
|
@ -195,10 +195,10 @@
|
||||||
SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
|
SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
|
||||||
$ LDC, WORK, LWORK, INFO )
|
$ LDC, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
* -- LAPACK computational routine (version 3.4.0) --
|
* -- LAPACK computational routine (version 3.7.0) --
|
||||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||||
* November 2011
|
* December 2016
|
||||||
*
|
*
|
||||||
* .. Scalar Arguments ..
|
* .. Scalar Arguments ..
|
||||||
CHARACTER SIDE, TRANS, VECT
|
CHARACTER SIDE, TRANS, VECT
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue