summaryrefslogtreecommitdiffhomepage
path: root/eigen/lapack
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2019-03-03 21:09:10 +0100
committerStanislaw Halik <sthalik@misaki.pl>2019-03-03 21:10:13 +0100
commitf0238cfb6997c4acfc2bd200de7295f3fa36968f (patch)
treeb215183760e4f615b9c1dabc1f116383b72a1b55 /eigen/lapack
parent543edd372a5193d04b3de9f23c176ab439e51b31 (diff)
don't index Eigen
Diffstat (limited to 'eigen/lapack')
-rw-r--r--eigen/lapack/CMakeLists.txt449
-rw-r--r--eigen/lapack/cholesky.cpp72
-rw-r--r--eigen/lapack/clacgv.f116
-rw-r--r--eigen/lapack/cladiv.f97
-rw-r--r--eigen/lapack/clarf.f232
-rw-r--r--eigen/lapack/clarfb.f771
-rw-r--r--eigen/lapack/clarfg.f203
-rw-r--r--eigen/lapack/clarft.f328
-rw-r--r--eigen/lapack/complex_double.cpp18
-rw-r--r--eigen/lapack/complex_single.cpp18
-rw-r--r--eigen/lapack/dladiv.f128
-rw-r--r--eigen/lapack/dlamch.f189
-rw-r--r--eigen/lapack/dlapy2.f104
-rw-r--r--eigen/lapack/dlapy3.f111
-rw-r--r--eigen/lapack/dlarf.f227
-rw-r--r--eigen/lapack/dlarfb.f762
-rw-r--r--eigen/lapack/dlarfg.f196
-rw-r--r--eigen/lapack/dlarft.f326
-rw-r--r--eigen/lapack/double.cpp18
-rw-r--r--eigen/lapack/dsecnd_NONE.f52
-rw-r--r--eigen/lapack/eigenvalues.cpp62
-rw-r--r--eigen/lapack/ilaclc.f118
-rw-r--r--eigen/lapack/ilaclr.f121
-rw-r--r--eigen/lapack/iladlc.f118
-rw-r--r--eigen/lapack/iladlr.f121
-rw-r--r--eigen/lapack/ilaslc.f118
-rw-r--r--eigen/lapack/ilaslr.f121
-rw-r--r--eigen/lapack/ilazlc.f118
-rw-r--r--eigen/lapack/ilazlr.f121
-rw-r--r--eigen/lapack/lapack_common.h29
-rw-r--r--eigen/lapack/lu.cpp89
-rw-r--r--eigen/lapack/second_NONE.f52
-rw-r--r--eigen/lapack/single.cpp18
-rw-r--r--eigen/lapack/sladiv.f128
-rw-r--r--eigen/lapack/slamch.f192
-rw-r--r--eigen/lapack/slapy2.f104
-rw-r--r--eigen/lapack/slapy3.f111
-rw-r--r--eigen/lapack/slarf.f227
-rw-r--r--eigen/lapack/slarfb.f763
-rw-r--r--eigen/lapack/slarfg.f196
-rw-r--r--eigen/lapack/slarft.f326
-rw-r--r--eigen/lapack/svd.cpp138
-rw-r--r--eigen/lapack/zlacgv.f116
-rw-r--r--eigen/lapack/zladiv.f97
-rw-r--r--eigen/lapack/zlarf.f232
-rw-r--r--eigen/lapack/zlarfb.f774
-rw-r--r--eigen/lapack/zlarfg.f203
-rw-r--r--eigen/lapack/zlarft.f327
48 files changed, 0 insertions, 9557 deletions
diff --git a/eigen/lapack/CMakeLists.txt b/eigen/lapack/CMakeLists.txt
deleted file mode 100644
index 6df1fa9..0000000
--- a/eigen/lapack/CMakeLists.txt
+++ /dev/null
@@ -1,449 +0,0 @@
-
-project(EigenLapack CXX)
-
-include("../cmake/language_support.cmake")
-
-workaround_9220(Fortran EIGEN_Fortran_COMPILER_WORKS)
-
-if(EIGEN_Fortran_COMPILER_WORKS)
- enable_language(Fortran OPTIONAL)
- if(NOT CMAKE_Fortran_COMPILER)
- set(EIGEN_Fortran_COMPILER_WORKS OFF)
- endif()
-endif()
-
-add_custom_target(lapack)
-include_directories(../blas)
-
-set(EigenLapack_SRCS
-single.cpp double.cpp complex_single.cpp complex_double.cpp ../blas/xerbla.cpp
-)
-
-if(EIGEN_Fortran_COMPILER_WORKS)
-
-set(EigenLapack_SRCS ${EigenLapack_SRCS}
- slarft.f dlarft.f clarft.f zlarft.f
- slarfb.f dlarfb.f clarfb.f zlarfb.f
- slarfg.f dlarfg.f clarfg.f zlarfg.f
- slarf.f dlarf.f clarf.f zlarf.f
- sladiv.f dladiv.f cladiv.f zladiv.f
- ilaslr.f iladlr.f ilaclr.f ilazlr.f
- ilaslc.f iladlc.f ilaclc.f ilazlc.f
- dlapy2.f dlapy3.f slapy2.f slapy3.f
- clacgv.f zlacgv.f
- slamch.f dlamch.f
- second_NONE.f dsecnd_NONE.f
-)
-
-option(EIGEN_ENABLE_LAPACK_TESTS OFF "Enbale the Lapack unit tests")
-
-if(EIGEN_ENABLE_LAPACK_TESTS)
-
- get_filename_component(eigen_full_path_to_reference_lapack "./reference/" ABSOLUTE)
- if(NOT EXISTS ${eigen_full_path_to_reference_lapack})
- # Download lapack and install sources and testing at the right place
- message(STATUS "Download lapack_addons_3.4.1.tgz...")
-
- file(DOWNLOAD "http://downloads.tuxfamily.org/eigen/lapack_addons_3.4.1.tgz"
- "${CMAKE_CURRENT_SOURCE_DIR}/lapack_addons_3.4.1.tgz"
- INACTIVITY_TIMEOUT 15
- TIMEOUT 240
- STATUS download_status
- EXPECTED_MD5 ab5742640617e3221a873aba44bbdc93
- SHOW_PROGRESS)
-
- message(STATUS ${download_status})
- list(GET download_status 0 download_status_num)
- set(download_status_num 0)
- if(download_status_num EQUAL 0)
- message(STATUS "Setup lapack reference and lapack unit tests")
- execute_process(COMMAND tar xzf "lapack_addons_3.4.1.tgz" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
- else()
- message(STATUS "Download of lapack_addons_3.4.1.tgz failed, LAPACK unit tests wont be enabled")
- set(EIGEN_ENABLE_LAPACK_TESTS false)
- endif()
-
- endif()
-
- get_filename_component(eigen_full_path_to_reference_lapack "./reference/" ABSOLUTE)
- if(EXISTS ${eigen_full_path_to_reference_lapack})
- set(EigenLapack_funcfilenames
- ssyev.f dsyev.f csyev.f zsyev.f
- spotrf.f dpotrf.f cpotrf.f zpotrf.f
- spotrs.f dpotrs.f cpotrs.f zpotrs.f
- sgetrf.f dgetrf.f cgetrf.f zgetrf.f
- sgetrs.f dgetrs.f cgetrs.f zgetrs.f)
-
- FILE(GLOB ReferenceLapack_SRCS0 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "reference/*.f")
- foreach(filename1 IN LISTS ReferenceLapack_SRCS0)
- string(REPLACE "reference/" "" filename ${filename1})
- list(FIND EigenLapack_SRCS ${filename} id1)
- list(FIND EigenLapack_funcfilenames ${filename} id2)
- if((id1 EQUAL -1) AND (id2 EQUAL -1))
- set(ReferenceLapack_SRCS ${ReferenceLapack_SRCS} reference/${filename})
- endif()
- endforeach()
- endif()
-
-
-endif(EIGEN_ENABLE_LAPACK_TESTS)
-
-endif(EIGEN_Fortran_COMPILER_WORKS)
-
-add_library(eigen_lapack_static ${EigenLapack_SRCS} ${ReferenceLapack_SRCS})
-add_library(eigen_lapack SHARED ${EigenLapack_SRCS})
-
-target_link_libraries(eigen_lapack eigen_blas)
-
-if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
- target_link_libraries(eigen_lapack_static ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO})
- target_link_libraries(eigen_lapack ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO})
-endif()
-
-add_dependencies(lapack eigen_lapack eigen_lapack_static)
-
-install(TARGETS eigen_lapack eigen_lapack_static
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
-
-
-
-get_filename_component(eigen_full_path_to_testing_lapack "./testing/" ABSOLUTE)
-if(EXISTS ${eigen_full_path_to_testing_lapack})
-
- # The following comes from lapack/TESTING/CMakeLists.txt
- # Get Python
- find_package(PythonInterp)
- message(STATUS "Looking for Python found - ${PYTHONINTERP_FOUND}")
- if (PYTHONINTERP_FOUND)
- message(STATUS "Using Python version ${PYTHON_VERSION_STRING}")
- endif()
-
- set(LAPACK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
- set(LAPACK_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
- set(BUILD_SINGLE true)
- set(BUILD_DOUBLE true)
- set(BUILD_COMPLEX true)
- set(BUILD_COMPLEX16E true)
-
- if(MSVC_VERSION)
-# string(REPLACE "/STACK:10000000" "/STACK:900000000000000000"
-# CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
- string(REGEX REPLACE "(.*)/STACK:(.*) (.*)" "\\1/STACK:900000000000000000 \\3"
- CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
- endif()
- add_subdirectory(testing/MATGEN)
- add_subdirectory(testing/LIN)
- add_subdirectory(testing/EIG)
- macro(add_lapack_test output input target)
- set(TEST_INPUT "${LAPACK_SOURCE_DIR}/testing/${input}")
- set(TEST_OUTPUT "${LAPACK_BINARY_DIR}/testing/${output}")
- get_target_property(TEST_LOC ${target} LOCATION)
- string(REPLACE "." "_" input_name ${input})
- set(testName "${target}_${input_name}")
- if(EXISTS "${TEST_INPUT}")
- add_test(LAPACK-${testName} "${CMAKE_COMMAND}"
- -DTEST=${TEST_LOC}
- -DINPUT=${TEST_INPUT}
- -DOUTPUT=${TEST_OUTPUT}
- -DINTDIR=${CMAKE_CFG_INTDIR}
- -P "${LAPACK_SOURCE_DIR}/testing/runtest.cmake")
- endif()
- endmacro(add_lapack_test)
-
- if (BUILD_SINGLE)
- add_lapack_test(stest.out stest.in xlintsts)
- #
- # ======== SINGLE RFP LIN TESTS ========================
- add_lapack_test(stest_rfp.out stest_rfp.in xlintstrfs)
- #
- #
- # ======== SINGLE EIG TESTS ===========================
- #
-
- add_lapack_test(snep.out nep.in xeigtsts)
-
-
- add_lapack_test(ssep.out sep.in xeigtsts)
-
-
- add_lapack_test(ssvd.out svd.in xeigtsts)
-
-
- add_lapack_test(sec.out sec.in xeigtsts)
-
-
- add_lapack_test(sed.out sed.in xeigtsts)
-
-
- add_lapack_test(sgg.out sgg.in xeigtsts)
-
-
- add_lapack_test(sgd.out sgd.in xeigtsts)
-
-
- add_lapack_test(ssb.out ssb.in xeigtsts)
-
-
- add_lapack_test(ssg.out ssg.in xeigtsts)
-
-
- add_lapack_test(sbal.out sbal.in xeigtsts)
-
-
- add_lapack_test(sbak.out sbak.in xeigtsts)
-
-
- add_lapack_test(sgbal.out sgbal.in xeigtsts)
-
-
- add_lapack_test(sgbak.out sgbak.in xeigtsts)
-
-
- add_lapack_test(sbb.out sbb.in xeigtsts)
-
-
- add_lapack_test(sglm.out glm.in xeigtsts)
-
-
- add_lapack_test(sgqr.out gqr.in xeigtsts)
-
-
- add_lapack_test(sgsv.out gsv.in xeigtsts)
-
-
- add_lapack_test(scsd.out csd.in xeigtsts)
-
-
- add_lapack_test(slse.out lse.in xeigtsts)
- endif()
-
- if (BUILD_DOUBLE)
- #
- # ======== DOUBLE LIN TESTS ===========================
- add_lapack_test(dtest.out dtest.in xlintstd)
- #
- # ======== DOUBLE RFP LIN TESTS ========================
- add_lapack_test(dtest_rfp.out dtest_rfp.in xlintstrfd)
- #
- # ======== DOUBLE EIG TESTS ===========================
-
- add_lapack_test(dnep.out nep.in xeigtstd)
-
-
- add_lapack_test(dsep.out sep.in xeigtstd)
-
-
- add_lapack_test(dsvd.out svd.in xeigtstd)
-
-
- add_lapack_test(dec.out dec.in xeigtstd)
-
-
- add_lapack_test(ded.out ded.in xeigtstd)
-
-
- add_lapack_test(dgg.out dgg.in xeigtstd)
-
-
- add_lapack_test(dgd.out dgd.in xeigtstd)
-
-
- add_lapack_test(dsb.out dsb.in xeigtstd)
-
-
- add_lapack_test(dsg.out dsg.in xeigtstd)
-
-
- add_lapack_test(dbal.out dbal.in xeigtstd)
-
-
- add_lapack_test(dbak.out dbak.in xeigtstd)
-
-
- add_lapack_test(dgbal.out dgbal.in xeigtstd)
-
-
- add_lapack_test(dgbak.out dgbak.in xeigtstd)
-
-
- add_lapack_test(dbb.out dbb.in xeigtstd)
-
-
- add_lapack_test(dglm.out glm.in xeigtstd)
-
-
- add_lapack_test(dgqr.out gqr.in xeigtstd)
-
-
- add_lapack_test(dgsv.out gsv.in xeigtstd)
-
-
- add_lapack_test(dcsd.out csd.in xeigtstd)
-
-
- add_lapack_test(dlse.out lse.in xeigtstd)
- endif()
-
- if (BUILD_COMPLEX)
- add_lapack_test(ctest.out ctest.in xlintstc)
- #
- # ======== COMPLEX RFP LIN TESTS ========================
- add_lapack_test(ctest_rfp.out ctest_rfp.in xlintstrfc)
- #
- # ======== COMPLEX EIG TESTS ===========================
-
- add_lapack_test(cnep.out nep.in xeigtstc)
-
-
- add_lapack_test(csep.out sep.in xeigtstc)
-
-
- add_lapack_test(csvd.out svd.in xeigtstc)
-
-
- add_lapack_test(cec.out cec.in xeigtstc)
-
-
- add_lapack_test(ced.out ced.in xeigtstc)
-
-
- add_lapack_test(cgg.out cgg.in xeigtstc)
-
-
- add_lapack_test(cgd.out cgd.in xeigtstc)
-
-
- add_lapack_test(csb.out csb.in xeigtstc)
-
-
- add_lapack_test(csg.out csg.in xeigtstc)
-
-
- add_lapack_test(cbal.out cbal.in xeigtstc)
-
-
- add_lapack_test(cbak.out cbak.in xeigtstc)
-
-
- add_lapack_test(cgbal.out cgbal.in xeigtstc)
-
-
- add_lapack_test(cgbak.out cgbak.in xeigtstc)
-
-
- add_lapack_test(cbb.out cbb.in xeigtstc)
-
-
- add_lapack_test(cglm.out glm.in xeigtstc)
-
-
- add_lapack_test(cgqr.out gqr.in xeigtstc)
-
-
- add_lapack_test(cgsv.out gsv.in xeigtstc)
-
-
- add_lapack_test(ccsd.out csd.in xeigtstc)
-
-
- add_lapack_test(clse.out lse.in xeigtstc)
- endif()
-
- if (BUILD_COMPLEX16)
- #
- # ======== COMPLEX16 LIN TESTS ========================
- add_lapack_test(ztest.out ztest.in xlintstz)
- #
- # ======== COMPLEX16 RFP LIN TESTS ========================
- add_lapack_test(ztest_rfp.out ztest_rfp.in xlintstrfz)
- #
- # ======== COMPLEX16 EIG TESTS ===========================
-
- add_lapack_test(znep.out nep.in xeigtstz)
-
-
- add_lapack_test(zsep.out sep.in xeigtstz)
-
-
- add_lapack_test(zsvd.out svd.in xeigtstz)
-
-
- add_lapack_test(zec.out zec.in xeigtstz)
-
-
- add_lapack_test(zed.out zed.in xeigtstz)
-
-
- add_lapack_test(zgg.out zgg.in xeigtstz)
-
-
- add_lapack_test(zgd.out zgd.in xeigtstz)
-
-
- add_lapack_test(zsb.out zsb.in xeigtstz)
-
-
- add_lapack_test(zsg.out zsg.in xeigtstz)
-
-
- add_lapack_test(zbal.out zbal.in xeigtstz)
-
-
- add_lapack_test(zbak.out zbak.in xeigtstz)
-
-
- add_lapack_test(zgbal.out zgbal.in xeigtstz)
-
-
- add_lapack_test(zgbak.out zgbak.in xeigtstz)
-
-
- add_lapack_test(zbb.out zbb.in xeigtstz)
-
-
- add_lapack_test(zglm.out glm.in xeigtstz)
-
-
- add_lapack_test(zgqr.out gqr.in xeigtstz)
-
-
- add_lapack_test(zgsv.out gsv.in xeigtstz)
-
-
- add_lapack_test(zcsd.out csd.in xeigtstz)
-
-
- add_lapack_test(zlse.out lse.in xeigtstz)
- endif()
-
-
- if (BUILD_SIMPLE)
- if (BUILD_DOUBLE)
- #
- # ======== SINGLE-DOUBLE PROTO LIN TESTS ==============
- add_lapack_test(dstest.out dstest.in xlintstds)
- endif()
- endif()
-
-
- if (BUILD_COMPLEX)
- if (BUILD_COMPLEX16)
- #
- # ======== COMPLEX-COMPLEX16 LIN TESTS ========================
- add_lapack_test(zctest.out zctest.in xlintstzc)
- endif()
- endif()
-
- # ==============================================================================
-
- execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${LAPACK_SOURCE_DIR}/testing/lapack_testing.py ${LAPACK_BINARY_DIR})
- add_test(
- NAME LAPACK_Test_Summary
- WORKING_DIRECTORY ${LAPACK_BINARY_DIR}
- COMMAND ${PYTHON_EXECUTABLE} "lapack_testing.py"
- )
-
-endif()
-
diff --git a/eigen/lapack/cholesky.cpp b/eigen/lapack/cholesky.cpp
deleted file mode 100644
index ea3bc12..0000000
--- a/eigen/lapack/cholesky.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2010-2011 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#include "lapack_common.h"
-#include <Eigen/Cholesky>
-
-// POTRF computes the Cholesky factorization of a real symmetric positive definite matrix A.
-EIGEN_LAPACK_FUNC(potrf,(char* uplo, int *n, RealScalar *pa, int *lda, int *info))
-{
- *info = 0;
- if(UPLO(*uplo)==INVALID) *info = -1;
- else if(*n<0) *info = -2;
- else if(*lda<std::max(1,*n)) *info = -4;
- if(*info!=0)
- {
- int e = -*info;
- return xerbla_(SCALAR_SUFFIX_UP"POTRF", &e, 6);
- }
-
- Scalar* a = reinterpret_cast<Scalar*>(pa);
- MatrixType A(a,*n,*n,*lda);
- int ret;
- if(UPLO(*uplo)==UP) ret = int(internal::llt_inplace<Scalar, Upper>::blocked(A));
- else ret = int(internal::llt_inplace<Scalar, Lower>::blocked(A));
-
- if(ret>=0)
- *info = ret+1;
-
- return 0;
-}
-
-// POTRS solves a system of linear equations A*X = B with a symmetric
-// positive definite matrix A using the Cholesky factorization
-// A = U**T*U or A = L*L**T computed by DPOTRF.
-EIGEN_LAPACK_FUNC(potrs,(char* uplo, int *n, int *nrhs, RealScalar *pa, int *lda, RealScalar *pb, int *ldb, int *info))
-{
- *info = 0;
- if(UPLO(*uplo)==INVALID) *info = -1;
- else if(*n<0) *info = -2;
- else if(*nrhs<0) *info = -3;
- else if(*lda<std::max(1,*n)) *info = -5;
- else if(*ldb<std::max(1,*n)) *info = -7;
- if(*info!=0)
- {
- int e = -*info;
- return xerbla_(SCALAR_SUFFIX_UP"POTRS", &e, 6);
- }
-
- Scalar* a = reinterpret_cast<Scalar*>(pa);
- Scalar* b = reinterpret_cast<Scalar*>(pb);
- MatrixType A(a,*n,*n,*lda);
- MatrixType B(b,*n,*nrhs,*ldb);
-
- if(UPLO(*uplo)==UP)
- {
- A.triangularView<Upper>().adjoint().solveInPlace(B);
- A.triangularView<Upper>().solveInPlace(B);
- }
- else
- {
- A.triangularView<Lower>().solveInPlace(B);
- A.triangularView<Lower>().adjoint().solveInPlace(B);
- }
-
- return 0;
-}
diff --git a/eigen/lapack/clacgv.f b/eigen/lapack/clacgv.f
deleted file mode 100644
index 359eb07..0000000
--- a/eigen/lapack/clacgv.f
+++ /dev/null
@@ -1,116 +0,0 @@
-*> \brief \b CLACGV
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download CLACGV + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clacgv.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clacgv.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacgv.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE CLACGV( N, X, INCX )
-*
-* .. Scalar Arguments ..
-* INTEGER INCX, N
-* ..
-* .. Array Arguments ..
-* COMPLEX X( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> CLACGV conjugates a complex vector of length N.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The length of the vector X. N >= 0.
-*> \endverbatim
-*>
-*> \param[in,out] X
-*> \verbatim
-*> X is COMPLEX array, dimension
-*> (1+(N-1)*abs(INCX))
-*> On entry, the vector of length N to be conjugated.
-*> On exit, X is overwritten with conjg(X).
-*> \endverbatim
-*>
-*> \param[in] INCX
-*> \verbatim
-*> INCX is INTEGER
-*> The spacing between successive elements of X.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE CLACGV( N, X, INCX )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER INCX, N
-* ..
-* .. Array Arguments ..
- COMPLEX X( * )
-* ..
-*
-* =====================================================================
-*
-* .. Local Scalars ..
- INTEGER I, IOFF
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC CONJG
-* ..
-* .. Executable Statements ..
-*
- IF( INCX.EQ.1 ) THEN
- DO 10 I = 1, N
- X( I ) = CONJG( X( I ) )
- 10 CONTINUE
- ELSE
- IOFF = 1
- IF( INCX.LT.0 )
- $ IOFF = 1 - ( N-1 )*INCX
- DO 20 I = 1, N
- X( IOFF ) = CONJG( X( IOFF ) )
- IOFF = IOFF + INCX
- 20 CONTINUE
- END IF
- RETURN
-*
-* End of CLACGV
-*
- END
diff --git a/eigen/lapack/cladiv.f b/eigen/lapack/cladiv.f
deleted file mode 100644
index 2807ac5..0000000
--- a/eigen/lapack/cladiv.f
+++ /dev/null
@@ -1,97 +0,0 @@
-*> \brief \b CLADIV
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download CLADIV + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/cladiv.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/cladiv.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cladiv.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* COMPLEX FUNCTION CLADIV( X, Y )
-*
-* .. Scalar Arguments ..
-* COMPLEX X, Y
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> CLADIV := X / Y, where X and Y are complex. The computation of X / Y
-*> will not overflow on an intermediary step unless the results
-*> overflows.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] X
-*> \verbatim
-*> X is COMPLEX
-*> \endverbatim
-*>
-*> \param[in] Y
-*> \verbatim
-*> Y is COMPLEX
-*> The complex scalars X and Y.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-* =====================================================================
- COMPLEX FUNCTION CLADIV( X, Y )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- COMPLEX X, Y
-* ..
-*
-* =====================================================================
-*
-* .. Local Scalars ..
- REAL ZI, ZR
-* ..
-* .. External Subroutines ..
- EXTERNAL SLADIV
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC AIMAG, CMPLX, REAL
-* ..
-* .. Executable Statements ..
-*
- CALL SLADIV( REAL( X ), AIMAG( X ), REAL( Y ), AIMAG( Y ), ZR,
- $ ZI )
- CLADIV = CMPLX( ZR, ZI )
-*
- RETURN
-*
-* End of CLADIV
-*
- END
diff --git a/eigen/lapack/clarf.f b/eigen/lapack/clarf.f
deleted file mode 100644
index ca0328f..0000000
--- a/eigen/lapack/clarf.f
+++ /dev/null
@@ -1,232 +0,0 @@
-*> \brief \b CLARF
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download CLARF + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clarf.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clarf.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarf.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE CLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER SIDE
-* INTEGER INCV, LDC, M, N
-* COMPLEX TAU
-* ..
-* .. Array Arguments ..
-* COMPLEX C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> CLARF applies a complex elementary reflector H to a complex M-by-N
-*> matrix C, from either the left or the right. H is represented in the
-*> form
-*>
-*> H = I - tau * v * v**H
-*>
-*> where tau is a complex scalar and v is a complex vector.
-*>
-*> If tau = 0, then H is taken to be the unit matrix.
-*>
-*> To apply H**H (the conjugate transpose of H), supply conjg(tau) instead
-*> tau.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': form H * C
-*> = 'R': form C * H
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is COMPLEX array, dimension
-*> (1 + (M-1)*abs(INCV)) if SIDE = 'L'
-*> or (1 + (N-1)*abs(INCV)) if SIDE = 'R'
-*> The vector v in the representation of H. V is not used if
-*> TAU = 0.
-*> \endverbatim
-*>
-*> \param[in] INCV
-*> \verbatim
-*> INCV is INTEGER
-*> The increment between elements of v. INCV <> 0.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is COMPLEX
-*> The value tau in the representation of H.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is COMPLEX array, dimension (LDC,N)
-*> On entry, the M-by-N matrix C.
-*> On exit, C is overwritten by the matrix H * C if SIDE = 'L',
-*> or C * H if SIDE = 'R'.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is COMPLEX array, dimension
-*> (N) if SIDE = 'L'
-*> or (M) if SIDE = 'R'
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE CLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER SIDE
- INTEGER INCV, LDC, M, N
- COMPLEX TAU
-* ..
-* .. Array Arguments ..
- COMPLEX C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX ONE, ZERO
- PARAMETER ( ONE = ( 1.0E+0, 0.0E+0 ),
- $ ZERO = ( 0.0E+0, 0.0E+0 ) )
-* ..
-* .. Local Scalars ..
- LOGICAL APPLYLEFT
- INTEGER I, LASTV, LASTC
-* ..
-* .. External Subroutines ..
- EXTERNAL CGEMV, CGERC
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILACLR, ILACLC
- EXTERNAL LSAME, ILACLR, ILACLC
-* ..
-* .. Executable Statements ..
-*
- APPLYLEFT = LSAME( SIDE, 'L' )
- LASTV = 0
- LASTC = 0
- IF( TAU.NE.ZERO ) THEN
-! Set up variables for scanning V. LASTV begins pointing to the end
-! of V.
- IF( APPLYLEFT ) THEN
- LASTV = M
- ELSE
- LASTV = N
- END IF
- IF( INCV.GT.0 ) THEN
- I = 1 + (LASTV-1) * INCV
- ELSE
- I = 1
- END IF
-! Look for the last non-zero row in V.
- DO WHILE( LASTV.GT.0 .AND. V( I ).EQ.ZERO )
- LASTV = LASTV - 1
- I = I - INCV
- END DO
- IF( APPLYLEFT ) THEN
-! Scan for the last non-zero column in C(1:lastv,:).
- LASTC = ILACLC(LASTV, N, C, LDC)
- ELSE
-! Scan for the last non-zero row in C(:,1:lastv).
- LASTC = ILACLR(M, LASTV, C, LDC)
- END IF
- END IF
-! Note that lastc.eq.0 renders the BLAS operations null; no special
-! case is needed at this level.
- IF( APPLYLEFT ) THEN
-*
-* Form H * C
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastv,1:lastc)**H * v(1:lastv,1)
-*
- CALL CGEMV( 'Conjugate transpose', LASTV, LASTC, ONE,
- $ C, LDC, V, INCV, ZERO, WORK, 1 )
-*
-* C(1:lastv,1:lastc) := C(...) - v(1:lastv,1) * w(1:lastc,1)**H
-*
- CALL CGERC( LASTV, LASTC, -TAU, V, INCV, WORK, 1, C, LDC )
- END IF
- ELSE
-*
-* Form C * H
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastc,1:lastv) * v(1:lastv,1)
-*
- CALL CGEMV( 'No transpose', LASTC, LASTV, ONE, C, LDC,
- $ V, INCV, ZERO, WORK, 1 )
-*
-* C(1:lastc,1:lastv) := C(...) - w(1:lastc,1) * v(1:lastv,1)**H
-*
- CALL CGERC( LASTC, LASTV, -TAU, WORK, 1, V, INCV, C, LDC )
- END IF
- END IF
- RETURN
-*
-* End of CLARF
-*
- END
diff --git a/eigen/lapack/clarfb.f b/eigen/lapack/clarfb.f
deleted file mode 100644
index 40bbdf4..0000000
--- a/eigen/lapack/clarfb.f
+++ /dev/null
@@ -1,771 +0,0 @@
-*> \brief \b CLARFB
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download CLARFB + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clarfb.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clarfb.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfb.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE CLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
-* T, LDT, C, LDC, WORK, LDWORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, SIDE, STOREV, TRANS
-* INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
-* COMPLEX C( LDC, * ), T( LDT, * ), V( LDV, * ),
-* $ WORK( LDWORK, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> CLARFB applies a complex block reflector H or its transpose H**H to a
-*> complex M-by-N matrix C, from either the left or the right.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': apply H or H**H from the Left
-*> = 'R': apply H or H**H from the Right
-*> \endverbatim
-*>
-*> \param[in] TRANS
-*> \verbatim
-*> TRANS is CHARACTER*1
-*> = 'N': apply H (No transpose)
-*> = 'C': apply H**H (Conjugate transpose)
-*> \endverbatim
-*>
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Indicates how H is formed from a product of elementary
-*> reflectors
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Indicates how the vectors which define the elementary
-*> reflectors are stored:
-*> = 'C': Columnwise
-*> = 'R': Rowwise
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the matrix T (= the number of elementary
-*> reflectors whose product defines the block reflector).
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is COMPLEX array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
-*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
-*> The matrix V. See Further Details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
-*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
-*> if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] T
-*> \verbatim
-*> T is COMPLEX array, dimension (LDT,K)
-*> The triangular K-by-K matrix T in the representation of the
-*> block reflector.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is COMPLEX array, dimension (LDC,N)
-*> On entry, the M-by-N matrix C.
-*> On exit, C is overwritten by H*C or H**H*C or C*H or C*H**H.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is COMPLEX array, dimension (LDWORK,K)
-*> \endverbatim
-*>
-*> \param[in] LDWORK
-*> \verbatim
-*> LDWORK is INTEGER
-*> The leading dimension of the array WORK.
-*> If SIDE = 'L', LDWORK >= max(1,N);
-*> if SIDE = 'R', LDWORK >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored; the corresponding
-*> array elements are modified but restored on exit. The rest of the
-*> array is not used.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE CLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
- $ T, LDT, C, LDC, WORK, LDWORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, SIDE, STOREV, TRANS
- INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
- COMPLEX C( LDC, * ), T( LDT, * ), V( LDV, * ),
- $ WORK( LDWORK, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX ONE
- PARAMETER ( ONE = ( 1.0E+0, 0.0E+0 ) )
-* ..
-* .. Local Scalars ..
- CHARACTER TRANST
- INTEGER I, J, LASTV, LASTC
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILACLR, ILACLC
- EXTERNAL LSAME, ILACLR, ILACLC
-* ..
-* .. External Subroutines ..
- EXTERNAL CCOPY, CGEMM, CLACGV, CTRMM
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC CONJG
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( M.LE.0 .OR. N.LE.0 )
- $ RETURN
-*
- IF( LSAME( TRANS, 'N' ) ) THEN
- TRANST = 'C'
- ELSE
- TRANST = 'N'
- END IF
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 ) (first K rows)
-* ( V2 )
-* where V1 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILACLR( M, K, V, LDV ) )
- LASTC = ILACLC( LASTV, N, C, LDC )
-*
-* W := C**H * V = (C1**H * V1 + C2**H * V2) (stored in WORK)
-*
-* W := C1**H
-*
- DO 10 J = 1, K
- CALL CCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- CALL CLACGV( LASTC, WORK( 1, J ), 1 )
- 10 CONTINUE
-*
-* W := W * V1
-*
- CALL CTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**H *V2
-*
- CALL CGEMM( 'Conjugate transpose', 'No transpose',
- $ LASTC, K, LASTV-K, ONE, C( K+1, 1 ), LDC,
- $ V( K+1, 1 ), LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL CTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**H
-*
- IF( M.GT.K ) THEN
-*
-* C2 := C2 - V2 * W**H
-*
- CALL CGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTV-K, LASTC, K, -ONE, V( K+1, 1 ), LDV,
- $ WORK, LDWORK, ONE, C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1**H
-*
- CALL CTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**H
-*
- DO 30 J = 1, K
- DO 20 I = 1, LASTC
- C( J, I ) = C( J, I ) - CONJG( WORK( I, J ) )
- 20 CONTINUE
- 30 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILACLR( N, K, V, LDV ) )
- LASTC = ILACLR( M, LASTV, C, LDC )
-*
-* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
-*
-* W := C1
-*
- DO 40 J = 1, K
- CALL CCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 40 CONTINUE
-*
-* W := W * V1
-*
- CALL CTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2
-*
- CALL CGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL CTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2**H
-*
- CALL CGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV,
- $ ONE, C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1**H
-*
- CALL CTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 60 J = 1, K
- DO 50 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 50 CONTINUE
- 60 CONTINUE
- END IF
-*
- ELSE
-*
-* Let V = ( V1 )
-* ( V2 ) (last K rows)
-* where V2 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILACLR( M, K, V, LDV ) )
- LASTC = ILACLC( LASTV, N, C, LDC )
-*
-* W := C**H * V = (C1**H * V1 + C2**H * V2) (stored in WORK)
-*
-* W := C2**H
-*
- DO 70 J = 1, K
- CALL CCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- CALL CLACGV( LASTC, WORK( 1, J ), 1 )
- 70 CONTINUE
-*
-* W := W * V2
-*
- CALL CTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**H*V1
-*
- CALL CGEMM( 'Conjugate transpose', 'No transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL CTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1 * W**H
-*
- CALL CGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**H
-*
- CALL CTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**H
-*
- DO 90 J = 1, K
- DO 80 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) -
- $ CONJG( WORK( I, J ) )
- 80 CONTINUE
- 90 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILACLR( N, K, V, LDV ) )
- LASTC = ILACLR( M, LASTV, C, LDC )
-*
-* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
-*
-* W := C2
-*
- DO 100 J = 1, K
- CALL CCOPY( LASTC, C( 1, LASTV-K+J ), 1,
- $ WORK( 1, J ), 1 )
- 100 CONTINUE
-*
-* W := W * V2
-*
- CALL CTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1
-*
- CALL CGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL CTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1**H
-*
- CALL CGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**H
-*
- CALL CTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W
-*
- DO 120 J = 1, K
- DO 110 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J )
- $ - WORK( I, J )
- 110 CONTINUE
- 120 CONTINUE
- END IF
- END IF
-*
- ELSE IF( LSAME( STOREV, 'R' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 V2 ) (V1: first K columns)
-* where V1 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILACLC( K, M, V, LDV ) )
- LASTC = ILACLC( LASTV, N, C, LDC )
-*
-* W := C**H * V**H = (C1**H * V1**H + C2**H * V2**H) (stored in WORK)
-*
-* W := C1**H
-*
- DO 130 J = 1, K
- CALL CCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- CALL CLACGV( LASTC, WORK( 1, J ), 1 )
- 130 CONTINUE
-*
-* W := W * V1**H
-*
- CALL CTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**H*V2**H
-*
- CALL CGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTC, K, LASTV-K,
- $ ONE, C( K+1, 1 ), LDC, V( 1, K+1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL CTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**H * W**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - V2**H * W**H
-*
- CALL CGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTV-K, LASTC, K,
- $ -ONE, V( 1, K+1 ), LDV, WORK, LDWORK,
- $ ONE, C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL CTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**H
-*
- DO 150 J = 1, K
- DO 140 I = 1, LASTC
- C( J, I ) = C( J, I ) - CONJG( WORK( I, J ) )
- 140 CONTINUE
- 150 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILACLC( K, N, V, LDV ) )
- LASTC = ILACLR( M, LASTV, C, LDC )
-*
-* W := C * V**H = (C1*V1**H + C2*V2**H) (stored in WORK)
-*
-* W := C1
-*
- DO 160 J = 1, K
- CALL CCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 160 CONTINUE
-*
-* W := W * V1**H
-*
- CALL CTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2**H
-*
- CALL CGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, K, LASTV-K, ONE, C( 1, K+1 ), LDC,
- $ V( 1, K+1 ), LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL CTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2
-*
- CALL CGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV,
- $ ONE, C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL CTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 180 J = 1, K
- DO 170 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 170 CONTINUE
- 180 CONTINUE
-*
- END IF
-*
- ELSE
-*
-* Let V = ( V1 V2 ) (V2: last K columns)
-* where V2 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILACLC( K, M, V, LDV ) )
- LASTC = ILACLC( LASTV, N, C, LDC )
-*
-* W := C**H * V**H = (C1**H * V1**H + C2**H * V2**H) (stored in WORK)
-*
-* W := C2**H
-*
- DO 190 J = 1, K
- CALL CCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- CALL CLACGV( LASTC, WORK( 1, J ), 1 )
- 190 CONTINUE
-*
-* W := W * V2**H
-*
- CALL CTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**H * V1**H
-*
- CALL CGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTC, K, LASTV-K,
- $ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL CTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**H * W**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1**H * W**H
-*
- CALL CGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTV-K, LASTC, K,
- $ -ONE, V, LDV, WORK, LDWORK, ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL CTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**H
-*
- DO 210 J = 1, K
- DO 200 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) -
- $ CONJG( WORK( I, J ) )
- 200 CONTINUE
- 210 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILACLC( K, N, V, LDV ) )
- LASTC = ILACLR( M, LASTV, C, LDC )
-*
-* W := C * V**H = (C1*V1**H + C2*V2**H) (stored in WORK)
-*
-* W := C2
-*
- DO 220 J = 1, K
- CALL CCOPY( LASTC, C( 1, LASTV-K+J ), 1,
- $ WORK( 1, J ), 1 )
- 220 CONTINUE
-*
-* W := W * V2**H
-*
- CALL CTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1**H
-*
- CALL CGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, ONE,
- $ WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL CTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1
-*
- CALL CGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL CTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 240 J = 1, K
- DO 230 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J )
- $ - WORK( I, J )
- 230 CONTINUE
- 240 CONTINUE
-*
- END IF
-*
- END IF
- END IF
-*
- RETURN
-*
-* End of CLARFB
-*
- END
diff --git a/eigen/lapack/clarfg.f b/eigen/lapack/clarfg.f
deleted file mode 100644
index d64f396..0000000
--- a/eigen/lapack/clarfg.f
+++ /dev/null
@@ -1,203 +0,0 @@
-*> \brief \b CLARFG
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download CLARFG + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clarfg.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clarfg.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfg.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE CLARFG( N, ALPHA, X, INCX, TAU )
-*
-* .. Scalar Arguments ..
-* INTEGER INCX, N
-* COMPLEX ALPHA, TAU
-* ..
-* .. Array Arguments ..
-* COMPLEX X( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> CLARFG generates a complex elementary reflector H of order n, such
-*> that
-*>
-*> H**H * ( alpha ) = ( beta ), H**H * H = I.
-*> ( x ) ( 0 )
-*>
-*> where alpha and beta are scalars, with beta real, and x is an
-*> (n-1)-element complex vector. H is represented in the form
-*>
-*> H = I - tau * ( 1 ) * ( 1 v**H ) ,
-*> ( v )
-*>
-*> where tau is a complex scalar and v is a complex (n-1)-element
-*> vector. Note that H is not hermitian.
-*>
-*> If the elements of x are all zero and alpha is real, then tau = 0
-*> and H is taken to be the unit matrix.
-*>
-*> Otherwise 1 <= real(tau) <= 2 and abs(tau-1) <= 1 .
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the elementary reflector.
-*> \endverbatim
-*>
-*> \param[in,out] ALPHA
-*> \verbatim
-*> ALPHA is COMPLEX
-*> On entry, the value alpha.
-*> On exit, it is overwritten with the value beta.
-*> \endverbatim
-*>
-*> \param[in,out] X
-*> \verbatim
-*> X is COMPLEX array, dimension
-*> (1+(N-2)*abs(INCX))
-*> On entry, the vector x.
-*> On exit, it is overwritten with the vector v.
-*> \endverbatim
-*>
-*> \param[in] INCX
-*> \verbatim
-*> INCX is INTEGER
-*> The increment between elements of X. INCX > 0.
-*> \endverbatim
-*>
-*> \param[out] TAU
-*> \verbatim
-*> TAU is COMPLEX
-*> The value tau.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE CLARFG( N, ALPHA, X, INCX, TAU )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER INCX, N
- COMPLEX ALPHA, TAU
-* ..
-* .. Array Arguments ..
- COMPLEX X( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ONE, ZERO
- PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
-* ..
-* .. Local Scalars ..
- INTEGER J, KNT
- REAL ALPHI, ALPHR, BETA, RSAFMN, SAFMIN, XNORM
-* ..
-* .. External Functions ..
- REAL SCNRM2, SLAMCH, SLAPY3
- COMPLEX CLADIV
- EXTERNAL SCNRM2, SLAMCH, SLAPY3, CLADIV
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, AIMAG, CMPLX, REAL, SIGN
-* ..
-* .. External Subroutines ..
- EXTERNAL CSCAL, CSSCAL
-* ..
-* .. Executable Statements ..
-*
- IF( N.LE.0 ) THEN
- TAU = ZERO
- RETURN
- END IF
-*
- XNORM = SCNRM2( N-1, X, INCX )
- ALPHR = REAL( ALPHA )
- ALPHI = AIMAG( ALPHA )
-*
- IF( XNORM.EQ.ZERO .AND. ALPHI.EQ.ZERO ) THEN
-*
-* H = I
-*
- TAU = ZERO
- ELSE
-*
-* general case
-*
- BETA = -SIGN( SLAPY3( ALPHR, ALPHI, XNORM ), ALPHR )
- SAFMIN = SLAMCH( 'S' ) / SLAMCH( 'E' )
- RSAFMN = ONE / SAFMIN
-*
- KNT = 0
- IF( ABS( BETA ).LT.SAFMIN ) THEN
-*
-* XNORM, BETA may be inaccurate; scale X and recompute them
-*
- 10 CONTINUE
- KNT = KNT + 1
- CALL CSSCAL( N-1, RSAFMN, X, INCX )
- BETA = BETA*RSAFMN
- ALPHI = ALPHI*RSAFMN
- ALPHR = ALPHR*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
- $ GO TO 10
-*
-* New BETA is at most 1, at least SAFMIN
-*
- XNORM = SCNRM2( N-1, X, INCX )
- ALPHA = CMPLX( ALPHR, ALPHI )
- BETA = -SIGN( SLAPY3( ALPHR, ALPHI, XNORM ), ALPHR )
- END IF
- TAU = CMPLX( ( BETA-ALPHR ) / BETA, -ALPHI / BETA )
- ALPHA = CLADIV( CMPLX( ONE ), ALPHA-BETA )
- CALL CSCAL( N-1, ALPHA, X, INCX )
-*
-* If ALPHA is subnormal, it may lose relative accuracy
-*
- DO 20 J = 1, KNT
- BETA = BETA*SAFMIN
- 20 CONTINUE
- ALPHA = BETA
- END IF
-*
- RETURN
-*
-* End of CLARFG
-*
- END
diff --git a/eigen/lapack/clarft.f b/eigen/lapack/clarft.f
deleted file mode 100644
index 981447f..0000000
--- a/eigen/lapack/clarft.f
+++ /dev/null
@@ -1,328 +0,0 @@
-*> \brief \b CLARFT
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download CLARFT + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clarft.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clarft.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarft.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE CLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, STOREV
-* INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
-* COMPLEX T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> CLARFT forms the triangular factor T of a complex block reflector H
-*> of order n, which is defined as a product of k elementary reflectors.
-*>
-*> If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular;
-*>
-*> If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular.
-*>
-*> If STOREV = 'C', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th column of the array V, and
-*>
-*> H = I - V * T * V**H
-*>
-*> If STOREV = 'R', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th row of the array V, and
-*>
-*> H = I - V**H * T * V
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Specifies the order in which the elementary reflectors are
-*> multiplied to form the block reflector:
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Specifies how the vectors which define the elementary
-*> reflectors are stored (see also Further Details):
-*> = 'C': columnwise
-*> = 'R': rowwise
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the block reflector H. N >= 0.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the triangular factor T (= the number of
-*> elementary reflectors). K >= 1.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is COMPLEX array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,N) if STOREV = 'R'
-*> The matrix V. See further details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is COMPLEX array, dimension (K)
-*> TAU(i) must contain the scalar factor of the elementary
-*> reflector H(i).
-*> \endverbatim
-*>
-*> \param[out] T
-*> \verbatim
-*> T is COMPLEX array, dimension (LDT,K)
-*> The k by k triangular factor T of the block reflector.
-*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
-*> lower triangular. The rest of the array is not used.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup complexOTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE CLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, STOREV
- INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
- COMPLEX T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX ONE, ZERO
- PARAMETER ( ONE = ( 1.0E+0, 0.0E+0 ),
- $ ZERO = ( 0.0E+0, 0.0E+0 ) )
-* ..
-* .. Local Scalars ..
- INTEGER I, J, PREVLASTV, LASTV
-* ..
-* .. External Subroutines ..
- EXTERNAL CGEMV, CLACGV, CTRMV
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- EXTERNAL LSAME
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( N.EQ.0 )
- $ RETURN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
- PREVLASTV = N
- DO I = 1, K
- PREVLASTV = MAX( PREVLASTV, I )
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = 1, I
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * CONJG( V( I , J ) )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)**H * V(i:j,i)
-*
- CALL CGEMV( 'Conjugate transpose', J-I, I-1,
- $ -TAU( I ), V( I+1, 1 ), LDV,
- $ V( I+1, I ), 1,
- $ ONE, T( 1, I ), 1 )
- ELSE
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * V( J , I )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**H
-*
- CALL CGEMM( 'N', 'C', I-1, 1, J-I, -TAU( I ),
- $ V( 1, I+1 ), LDV, V( I, I+1 ), LDV,
- $ ONE, T( 1, I ), LDT )
- END IF
-*
-* T(1:i-1,i) := T(1:i-1,1:i-1) * T(1:i-1,i)
-*
- CALL CTRMV( 'Upper', 'No transpose', 'Non-unit', I-1, T,
- $ LDT, T( 1, I ), 1 )
- T( I, I ) = TAU( I )
- IF( I.GT.1 ) THEN
- PREVLASTV = MAX( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- END DO
- ELSE
- PREVLASTV = 1
- DO I = K, 1, -1
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = I, K
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( I.LT.K ) THEN
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * CONJG( V( N-K+I , J ) )
- END DO
- J = MAX( LASTV, PREVLASTV )
-*
-* T(i+1:k,i) = -tau(i) * V(j:n-k+i,i+1:k)**H * V(j:n-k+i,i)
-*
- CALL CGEMV( 'Conjugate transpose', N-K+I-J, K-I,
- $ -TAU( I ), V( J, I+1 ), LDV, V( J, I ),
- $ 1, ONE, T( I+1, I ), 1 )
- ELSE
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * V( J, N-K+I )
- END DO
- 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)**H
-*
- CALL CGEMM( 'N', 'C', K-I, 1, N-K+I-J, -TAU( I ),
- $ V( I+1, J ), LDV, V( I, J ), LDV,
- $ ONE, T( I+1, I ), LDT )
- END IF
-*
-* T(i+1:k,i) := T(i+1:k,i+1:k) * T(i+1:k,i)
-*
- CALL CTRMV( 'Lower', 'No transpose', 'Non-unit', K-I,
- $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 )
- IF( I.GT.1 ) THEN
- PREVLASTV = MIN( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- T( I, I ) = TAU( I )
- END IF
- END DO
- END IF
- RETURN
-*
-* End of CLARFT
-*
- END
diff --git a/eigen/lapack/complex_double.cpp b/eigen/lapack/complex_double.cpp
deleted file mode 100644
index c9c5752..0000000
--- a/eigen/lapack/complex_double.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2009-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#define SCALAR std::complex<double>
-#define SCALAR_SUFFIX z
-#define SCALAR_SUFFIX_UP "Z"
-#define REAL_SCALAR_SUFFIX d
-#define ISCOMPLEX 1
-
-#include "cholesky.cpp"
-#include "lu.cpp"
-#include "svd.cpp"
diff --git a/eigen/lapack/complex_single.cpp b/eigen/lapack/complex_single.cpp
deleted file mode 100644
index 6d11b26..0000000
--- a/eigen/lapack/complex_single.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2009-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#define SCALAR std::complex<float>
-#define SCALAR_SUFFIX c
-#define SCALAR_SUFFIX_UP "C"
-#define REAL_SCALAR_SUFFIX s
-#define ISCOMPLEX 1
-
-#include "cholesky.cpp"
-#include "lu.cpp"
-#include "svd.cpp"
diff --git a/eigen/lapack/dladiv.f b/eigen/lapack/dladiv.f
deleted file mode 100644
index 090a906..0000000
--- a/eigen/lapack/dladiv.f
+++ /dev/null
@@ -1,128 +0,0 @@
-*> \brief \b DLADIV
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download DLADIV + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dladiv.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dladiv.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dladiv.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE DLADIV( A, B, C, D, P, Q )
-*
-* .. Scalar Arguments ..
-* DOUBLE PRECISION A, B, C, D, P, Q
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DLADIV performs complex division in real arithmetic
-*>
-*> a + i*b
-*> p + i*q = ---------
-*> c + i*d
-*>
-*> The algorithm is due to Robert L. Smith and can be found
-*> in D. Knuth, The art of Computer Programming, Vol.2, p.195
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] A
-*> \verbatim
-*> A is DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[in] B
-*> \verbatim
-*> B is DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[in] C
-*> \verbatim
-*> C is DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[in] D
-*> \verbatim
-*> D is DOUBLE PRECISION
-*> The scalars a, b, c, and d in the above expression.
-*> \endverbatim
-*>
-*> \param[out] P
-*> \verbatim
-*> P is DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[out] Q
-*> \verbatim
-*> Q is DOUBLE PRECISION
-*> The scalars p and q in the above expression.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE DLADIV( A, B, C, D, P, Q )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- DOUBLE PRECISION A, B, C, D, P, Q
-* ..
-*
-* =====================================================================
-*
-* .. Local Scalars ..
- DOUBLE PRECISION E, F
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS
-* ..
-* .. Executable Statements ..
-*
- IF( ABS( D ).LT.ABS( C ) ) THEN
- E = D / C
- F = C + D*E
- P = ( A+B*E ) / F
- Q = ( B-A*E ) / F
- ELSE
- E = C / D
- F = D + C*E
- P = ( B+A*E ) / F
- Q = ( -A+B*E ) / F
- END IF
-*
- RETURN
-*
-* End of DLADIV
-*
- END
diff --git a/eigen/lapack/dlamch.f b/eigen/lapack/dlamch.f
deleted file mode 100644
index eb307e5..0000000
--- a/eigen/lapack/dlamch.f
+++ /dev/null
@@ -1,189 +0,0 @@
-*> \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 November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER CMACH
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ONE, ZERO
- PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- EXTERNAL LSAME
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT,
- $ MINEXPONENT, RADIX, TINY
-* ..
-* .. Executable Statements ..
-*
-*
-* Assume rounding, not chopping. Always.
-*
- RND = ONE
-*
- IF( ONE.EQ.RND ) THEN
- EPS = EPSILON(ZERO) * 0.5
- ELSE
- EPS = EPSILON(ZERO)
- END IF
-*
- IF( LSAME( CMACH, 'E' ) ) THEN
- RMACH = EPS
- ELSE IF( LSAME( CMACH, 'S' ) ) THEN
- SFMIN = TINY(ZERO)
- SMALL = ONE / HUGE(ZERO)
- IF( SMALL.GE.SFMIN ) THEN
-*
-* Use SMALL plus a bit, to avoid the possibility of rounding
-* causing overflow when computing 1/sfmin.
-*
- SFMIN = SMALL*( ONE+EPS )
- END IF
- RMACH = SFMIN
- ELSE IF( LSAME( CMACH, 'B' ) ) THEN
- RMACH = RADIX(ZERO)
- ELSE IF( LSAME( CMACH, 'P' ) ) THEN
- RMACH = EPS * RADIX(ZERO)
- ELSE IF( LSAME( CMACH, 'N' ) ) THEN
- RMACH = DIGITS(ZERO)
- ELSE IF( LSAME( CMACH, 'R' ) ) THEN
- RMACH = RND
- ELSE IF( LSAME( CMACH, 'M' ) ) THEN
- RMACH = MINEXPONENT(ZERO)
- ELSE IF( LSAME( CMACH, 'U' ) ) THEN
- RMACH = tiny(zero)
- ELSE IF( LSAME( CMACH, 'L' ) ) THEN
- RMACH = MAXEXPONENT(ZERO)
- ELSE IF( LSAME( CMACH, 'O' ) ) THEN
- RMACH = HUGE(ZERO)
- ELSE
- RMACH = ZERO
- END IF
-*
- DLAMCH = RMACH
- RETURN
-*
-* End of DLAMCH
-*
- END
-************************************************************************
-*> \brief \b DLAMC3
-*> \details
-*> \b Purpose:
-*> \verbatim
-*> 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.
-*> \endverbatim
-*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..
-*> \date November 2011
-*> \ingroup auxOTHERauxiliary
-*>
-*> \param[in] A
-*> \verbatim
-*> A is a DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[in] B
-*> \verbatim
-*> B is a DOUBLE PRECISION
-*> The values A and B.
-*> \endverbatim
-*>
- DOUBLE PRECISION FUNCTION DLAMC3( A, B )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
-* November 2010
-*
-* .. Scalar Arguments ..
- DOUBLE PRECISION A, B
-* ..
-* =====================================================================
-*
-* .. Executable Statements ..
-*
- DLAMC3 = A + B
-*
- RETURN
-*
-* End of DLAMC3
-*
- END
-*
-************************************************************************
diff --git a/eigen/lapack/dlapy2.f b/eigen/lapack/dlapy2.f
deleted file mode 100644
index e6a62bf..0000000
--- a/eigen/lapack/dlapy2.f
+++ /dev/null
@@ -1,104 +0,0 @@
-*> \brief \b DLAPY2
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download DLAPY2 + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapy2.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapy2.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy2.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
-*
-* .. Scalar Arguments ..
-* DOUBLE PRECISION X, Y
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DLAPY2 returns sqrt(x**2+y**2), taking care not to cause unnecessary
-*> overflow.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] X
-*> \verbatim
-*> X is DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[in] Y
-*> \verbatim
-*> Y is DOUBLE PRECISION
-*> X and Y specify the values x and y.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- DOUBLE PRECISION X, Y
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ZERO
- PARAMETER ( ZERO = 0.0D0 )
- DOUBLE PRECISION ONE
- PARAMETER ( ONE = 1.0D0 )
-* ..
-* .. Local Scalars ..
- DOUBLE PRECISION W, XABS, YABS, Z
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, MAX, MIN, SQRT
-* ..
-* .. Executable Statements ..
-*
- XABS = ABS( X )
- 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
- RETURN
-*
-* End of DLAPY2
-*
- END
diff --git a/eigen/lapack/dlapy3.f b/eigen/lapack/dlapy3.f
deleted file mode 100644
index ae9844f..0000000
--- a/eigen/lapack/dlapy3.f
+++ /dev/null
@@ -1,111 +0,0 @@
-*> \brief \b DLAPY3
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download DLAPY3 + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapy3.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapy3.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy3.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
-*
-* .. Scalar Arguments ..
-* DOUBLE PRECISION X, Y, Z
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DLAPY3 returns sqrt(x**2+y**2+z**2), taking care not to cause
-*> unnecessary overflow.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] X
-*> \verbatim
-*> X is DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[in] Y
-*> \verbatim
-*> Y is DOUBLE PRECISION
-*> \endverbatim
-*>
-*> \param[in] Z
-*> \verbatim
-*> Z is DOUBLE PRECISION
-*> X, Y and Z specify the values x, y and z.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- DOUBLE PRECISION X, Y, Z
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ZERO
- PARAMETER ( ZERO = 0.0D0 )
-* ..
-* .. Local Scalars ..
- DOUBLE PRECISION W, XABS, YABS, ZABS
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, MAX, SQRT
-* ..
-* .. Executable Statements ..
-*
- XABS = ABS( X )
- YABS = ABS( Y )
- ZABS = ABS( Z )
- W = MAX( XABS, YABS, ZABS )
- IF( W.EQ.ZERO ) THEN
-* W can be zero for max(0,nan,0)
-* adding all three entries together will make sure
-* NaN will not disappear.
- DLAPY3 = XABS + YABS + ZABS
- ELSE
- DLAPY3 = W*SQRT( ( XABS / W )**2+( YABS / W )**2+
- $ ( ZABS / W )**2 )
- END IF
- RETURN
-*
-* End of DLAPY3
-*
- END
diff --git a/eigen/lapack/dlarf.f b/eigen/lapack/dlarf.f
deleted file mode 100644
index 2a82ff4..0000000
--- a/eigen/lapack/dlarf.f
+++ /dev/null
@@ -1,227 +0,0 @@
-*> \brief \b DLARF
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download DLARF + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarf.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarf.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarf.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER SIDE
-* INTEGER INCV, LDC, M, N
-* DOUBLE PRECISION TAU
-* ..
-* .. Array Arguments ..
-* DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DLARF applies a real elementary reflector H to a real m by n matrix
-*> C, from either the left or the right. H is represented in the form
-*>
-*> H = I - tau * v * v**T
-*>
-*> where tau is a real scalar and v is a real vector.
-*>
-*> If tau = 0, then H is taken to be the unit matrix.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': form H * C
-*> = 'R': form C * H
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is DOUBLE PRECISION array, dimension
-*> (1 + (M-1)*abs(INCV)) if SIDE = 'L'
-*> or (1 + (N-1)*abs(INCV)) if SIDE = 'R'
-*> The vector v in the representation of H. V is not used if
-*> TAU = 0.
-*> \endverbatim
-*>
-*> \param[in] INCV
-*> \verbatim
-*> INCV is INTEGER
-*> The increment between elements of v. INCV <> 0.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is DOUBLE PRECISION
-*> The value tau in the representation of H.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is DOUBLE PRECISION array, dimension (LDC,N)
-*> On entry, the m by n matrix C.
-*> On exit, C is overwritten by the matrix H * C if SIDE = 'L',
-*> or C * H if SIDE = 'R'.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is DOUBLE PRECISION array, dimension
-*> (N) if SIDE = 'L'
-*> or (M) if SIDE = 'R'
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER SIDE
- INTEGER INCV, LDC, M, N
- DOUBLE PRECISION TAU
-* ..
-* .. Array Arguments ..
- DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ONE, ZERO
- PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- LOGICAL APPLYLEFT
- INTEGER I, LASTV, LASTC
-* ..
-* .. External Subroutines ..
- EXTERNAL DGEMV, DGER
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILADLR, ILADLC
- EXTERNAL LSAME, ILADLR, ILADLC
-* ..
-* .. Executable Statements ..
-*
- APPLYLEFT = LSAME( SIDE, 'L' )
- LASTV = 0
- LASTC = 0
- IF( TAU.NE.ZERO ) THEN
-! Set up variables for scanning V. LASTV begins pointing to the end
-! of V.
- IF( APPLYLEFT ) THEN
- LASTV = M
- ELSE
- LASTV = N
- END IF
- IF( INCV.GT.0 ) THEN
- I = 1 + (LASTV-1) * INCV
- ELSE
- I = 1
- END IF
-! Look for the last non-zero row in V.
- DO WHILE( LASTV.GT.0 .AND. V( I ).EQ.ZERO )
- LASTV = LASTV - 1
- I = I - INCV
- END DO
- IF( APPLYLEFT ) THEN
-! Scan for the last non-zero column in C(1:lastv,:).
- LASTC = ILADLC(LASTV, N, C, LDC)
- ELSE
-! Scan for the last non-zero row in C(:,1:lastv).
- LASTC = ILADLR(M, LASTV, C, LDC)
- END IF
- END IF
-! Note that lastc.eq.0 renders the BLAS operations null; no special
-! case is needed at this level.
- IF( APPLYLEFT ) THEN
-*
-* Form H * C
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastv,1:lastc)**T * v(1:lastv,1)
-*
- CALL DGEMV( 'Transpose', LASTV, LASTC, ONE, C, LDC, V, INCV,
- $ ZERO, WORK, 1 )
-*
-* C(1:lastv,1:lastc) := C(...) - v(1:lastv,1) * w(1:lastc,1)**T
-*
- CALL DGER( LASTV, LASTC, -TAU, V, INCV, WORK, 1, C, LDC )
- END IF
- ELSE
-*
-* Form C * H
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastc,1:lastv) * v(1:lastv,1)
-*
- CALL DGEMV( 'No transpose', LASTC, LASTV, ONE, C, LDC,
- $ V, INCV, ZERO, WORK, 1 )
-*
-* C(1:lastc,1:lastv) := C(...) - w(1:lastc,1) * v(1:lastv,1)**T
-*
- CALL DGER( LASTC, LASTV, -TAU, WORK, 1, V, INCV, C, LDC )
- END IF
- END IF
- RETURN
-*
-* End of DLARF
-*
- END
diff --git a/eigen/lapack/dlarfb.f b/eigen/lapack/dlarfb.f
deleted file mode 100644
index 206d3b2..0000000
--- a/eigen/lapack/dlarfb.f
+++ /dev/null
@@ -1,762 +0,0 @@
-*> \brief \b DLARFB
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download DLARFB + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarfb.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarfb.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfb.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
-* T, LDT, C, LDC, WORK, LDWORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, SIDE, STOREV, TRANS
-* INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
-* DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ),
-* $ WORK( LDWORK, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DLARFB applies a real block reflector H or its transpose H**T to a
-*> real m by n matrix C, from either the left or the right.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': apply H or H**T from the Left
-*> = 'R': apply H or H**T from the Right
-*> \endverbatim
-*>
-*> \param[in] TRANS
-*> \verbatim
-*> TRANS is CHARACTER*1
-*> = 'N': apply H (No transpose)
-*> = 'T': apply H**T (Transpose)
-*> \endverbatim
-*>
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Indicates how H is formed from a product of elementary
-*> reflectors
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Indicates how the vectors which define the elementary
-*> reflectors are stored:
-*> = 'C': Columnwise
-*> = 'R': Rowwise
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the matrix T (= the number of elementary
-*> reflectors whose product defines the block reflector).
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is DOUBLE PRECISION array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
-*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
-*> The matrix V. See Further Details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
-*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
-*> if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] T
-*> \verbatim
-*> T is DOUBLE PRECISION array, dimension (LDT,K)
-*> The triangular k by k matrix T in the representation of the
-*> block reflector.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is DOUBLE PRECISION array, dimension (LDC,N)
-*> On entry, the m by n matrix C.
-*> On exit, C is overwritten by H*C or H**T*C or C*H or C*H**T.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is DOUBLE PRECISION array, dimension (LDWORK,K)
-*> \endverbatim
-*>
-*> \param[in] LDWORK
-*> \verbatim
-*> LDWORK is INTEGER
-*> The leading dimension of the array WORK.
-*> If SIDE = 'L', LDWORK >= max(1,N);
-*> if SIDE = 'R', LDWORK >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored; the corresponding
-*> array elements are modified but restored on exit. The rest of the
-*> array is not used.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
- $ T, LDT, C, LDC, WORK, LDWORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, SIDE, STOREV, TRANS
- INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
- DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ),
- $ WORK( LDWORK, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ONE
- PARAMETER ( ONE = 1.0D+0 )
-* ..
-* .. Local Scalars ..
- CHARACTER TRANST
- INTEGER I, J, LASTV, LASTC
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILADLR, ILADLC
- EXTERNAL LSAME, ILADLR, ILADLC
-* ..
-* .. External Subroutines ..
- EXTERNAL DCOPY, DGEMM, DTRMM
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( M.LE.0 .OR. N.LE.0 )
- $ RETURN
-*
- IF( LSAME( TRANS, 'N' ) ) THEN
- TRANST = 'T'
- ELSE
- TRANST = 'N'
- END IF
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 ) (first K rows)
-* ( V2 )
-* where V1 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( 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 := C1**T
-*
- DO 10 J = 1, K
- CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- 10 CONTINUE
-*
-* W := W * V1
-*
- CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**T *V2
-*
- CALL DGEMM( 'Transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( K+1, 1 ), LDC, V( K+1, 1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - V2 * W**T
-*
- CALL DGEMM( 'No transpose', 'Transpose',
- $ LASTV-K, LASTC, K,
- $ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK, ONE,
- $ C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1**T
-*
- CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**T
-*
- DO 30 J = 1, K
- DO 20 I = 1, LASTC
- C( J, I ) = C( J, I ) - WORK( I, J )
- 20 CONTINUE
- 30 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* 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 := C1
-*
- DO 40 J = 1, K
- CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 40 CONTINUE
-*
-* W := W * V1
-*
- CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2
-*
- CALL DGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2**T
-*
- CALL DGEMM( 'No transpose', 'Transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV, ONE,
- $ C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1**T
-*
- CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 60 J = 1, K
- DO 50 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 50 CONTINUE
- 60 CONTINUE
- END IF
-*
- ELSE
-*
-* Let V = ( V1 )
-* ( V2 ) (last K rows)
-* where V2 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( 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 := C2**T
-*
- DO 70 J = 1, K
- CALL DCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- 70 CONTINUE
-*
-* W := W * V2
-*
- CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**T*V1
-*
- CALL DGEMM( 'Transpose', 'No transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1 * W**T
-*
- CALL DGEMM( 'No transpose', 'Transpose',
- $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**T
-*
- CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**T
-*
- DO 90 J = 1, K
- DO 80 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J)
- 80 CONTINUE
- 90 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* 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 := C2
-*
- DO 100 J = 1, K
- CALL DCOPY( LASTC, C( 1, N-K+J ), 1, WORK( 1, J ), 1 )
- 100 CONTINUE
-*
-* W := W * V2
-*
- CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1
-*
- CALL DGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1**T
-*
- CALL DGEMM( 'No transpose', 'Transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**T
-*
- CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W
-*
- DO 120 J = 1, K
- DO 110 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J ) - WORK(I, J)
- 110 CONTINUE
- 120 CONTINUE
- END IF
- END IF
-*
- ELSE IF( LSAME( STOREV, 'R' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 V2 ) (V1: first K columns)
-* where V1 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( 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 := C1**T
-*
- DO 130 J = 1, K
- CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- 130 CONTINUE
-*
-* W := W * V1**T
-*
- CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**T*V2**T
-*
- CALL DGEMM( 'Transpose', 'Transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( K+1, 1 ), LDC, V( 1, K+1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**T * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - V2**T * W**T
-*
- CALL DGEMM( 'Transpose', 'Transpose',
- $ LASTV-K, LASTC, K,
- $ -ONE, V( 1, K+1 ), LDV, WORK, LDWORK,
- $ ONE, C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**T
-*
- DO 150 J = 1, K
- DO 140 I = 1, LASTC
- C( J, I ) = C( J, I ) - WORK( I, J )
- 140 CONTINUE
- 150 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* 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 := C1
-*
- DO 160 J = 1, K
- CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 160 CONTINUE
-*
-* W := W * V1**T
-*
- CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2**T
-*
- CALL DGEMM( 'No transpose', 'Transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( 1, K+1 ), LDC, V( 1, K+1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2
-*
- CALL DGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV,
- $ ONE, C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 180 J = 1, K
- DO 170 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 170 CONTINUE
- 180 CONTINUE
-*
- END IF
-*
- ELSE
-*
-* Let V = ( V1 V2 ) (V2: last K columns)
-* where V2 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( 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 := C2**T
-*
- DO 190 J = 1, K
- CALL DCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- 190 CONTINUE
-*
-* W := W * V2**T
-*
- CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**T * V1**T
-*
- CALL DGEMM( 'Transpose', 'Transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**T * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1**T * W**T
-*
- CALL DGEMM( 'Transpose', 'Transpose',
- $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**T
-*
- DO 210 J = 1, K
- DO 200 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J)
- 200 CONTINUE
- 210 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* 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 := C2
-*
- DO 220 J = 1, K
- CALL DCOPY( LASTC, C( 1, LASTV-K+J ), 1,
- $ WORK( 1, J ), 1 )
- 220 CONTINUE
-*
-* W := W * V2**T
-*
- CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1**T
-*
- CALL DGEMM( 'No transpose', 'Transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1
-*
- CALL DGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 240 J = 1, K
- DO 230 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J ) - WORK(I, J)
- 230 CONTINUE
- 240 CONTINUE
-*
- END IF
-*
- END IF
- END IF
-*
- RETURN
-*
-* End of DLARFB
-*
- END
diff --git a/eigen/lapack/dlarfg.f b/eigen/lapack/dlarfg.f
deleted file mode 100644
index 458ad2e..0000000
--- a/eigen/lapack/dlarfg.f
+++ /dev/null
@@ -1,196 +0,0 @@
-*> \brief \b DLARFG
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download DLARFG + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarfg.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarfg.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfg.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
-*
-* .. Scalar Arguments ..
-* INTEGER INCX, N
-* DOUBLE PRECISION ALPHA, TAU
-* ..
-* .. Array Arguments ..
-* DOUBLE PRECISION X( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DLARFG generates a real elementary reflector H of order n, such
-*> that
-*>
-*> H * ( alpha ) = ( beta ), H**T * H = I.
-*> ( x ) ( 0 )
-*>
-*> where alpha and beta are scalars, and x is an (n-1)-element real
-*> vector. H is represented in the form
-*>
-*> H = I - tau * ( 1 ) * ( 1 v**T ) ,
-*> ( v )
-*>
-*> where tau is a real scalar and v is a real (n-1)-element
-*> vector.
-*>
-*> If the elements of x are all zero, then tau = 0 and H is taken to be
-*> the unit matrix.
-*>
-*> Otherwise 1 <= tau <= 2.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the elementary reflector.
-*> \endverbatim
-*>
-*> \param[in,out] ALPHA
-*> \verbatim
-*> ALPHA is DOUBLE PRECISION
-*> On entry, the value alpha.
-*> On exit, it is overwritten with the value beta.
-*> \endverbatim
-*>
-*> \param[in,out] X
-*> \verbatim
-*> X is DOUBLE PRECISION array, dimension
-*> (1+(N-2)*abs(INCX))
-*> On entry, the vector x.
-*> On exit, it is overwritten with the vector v.
-*> \endverbatim
-*>
-*> \param[in] INCX
-*> \verbatim
-*> INCX is INTEGER
-*> The increment between elements of X. INCX > 0.
-*> \endverbatim
-*>
-*> \param[out] TAU
-*> \verbatim
-*> TAU is DOUBLE PRECISION
-*> The value tau.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup doubleOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER INCX, N
- DOUBLE PRECISION ALPHA, TAU
-* ..
-* .. Array Arguments ..
- DOUBLE PRECISION X( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ONE, ZERO
- PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- INTEGER J, KNT
- DOUBLE PRECISION BETA, RSAFMN, SAFMIN, XNORM
-* ..
-* .. External Functions ..
- DOUBLE PRECISION DLAMCH, DLAPY2, DNRM2
- EXTERNAL DLAMCH, DLAPY2, DNRM2
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, SIGN
-* ..
-* .. External Subroutines ..
- EXTERNAL DSCAL
-* ..
-* .. Executable Statements ..
-*
- IF( N.LE.1 ) THEN
- TAU = ZERO
- RETURN
- END IF
-*
- XNORM = DNRM2( N-1, X, INCX )
-*
- IF( XNORM.EQ.ZERO ) THEN
-*
-* H = I
-*
- TAU = ZERO
- ELSE
-*
-* general case
-*
- BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA )
- SAFMIN = DLAMCH( 'S' ) / DLAMCH( 'E' )
- KNT = 0
- IF( ABS( BETA ).LT.SAFMIN ) THEN
-*
-* XNORM, BETA may be inaccurate; scale X and recompute them
-*
- RSAFMN = ONE / SAFMIN
- 10 CONTINUE
- KNT = KNT + 1
- CALL DSCAL( N-1, RSAFMN, X, INCX )
- BETA = BETA*RSAFMN
- ALPHA = ALPHA*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
- $ GO TO 10
-*
-* New BETA is at most 1, at least SAFMIN
-*
- XNORM = DNRM2( N-1, X, INCX )
- BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA )
- END IF
- TAU = ( BETA-ALPHA ) / BETA
- CALL DSCAL( N-1, ONE / ( ALPHA-BETA ), X, INCX )
-*
-* If ALPHA is subnormal, it may lose relative accuracy
-*
- DO 20 J = 1, KNT
- BETA = BETA*SAFMIN
- 20 CONTINUE
- ALPHA = BETA
- END IF
-*
- RETURN
-*
-* End of DLARFG
-*
- END
diff --git a/eigen/lapack/dlarft.f b/eigen/lapack/dlarft.f
deleted file mode 100644
index 4b75504..0000000
--- a/eigen/lapack/dlarft.f
+++ /dev/null
@@ -1,326 +0,0 @@
-*> \brief \b DLARFT
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download DLARFT + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarft.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarft.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarft.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, STOREV
-* INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
-* DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DLARFT forms the triangular factor T of a real block reflector H
-*> of order n, which is defined as a product of k elementary reflectors.
-*>
-*> If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular;
-*>
-*> If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular.
-*>
-*> If STOREV = 'C', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th column of the array V, and
-*>
-*> H = I - V * T * V**T
-*>
-*> If STOREV = 'R', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th row of the array V, and
-*>
-*> H = I - V**T * T * V
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Specifies the order in which the elementary reflectors are
-*> multiplied to form the block reflector:
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Specifies how the vectors which define the elementary
-*> reflectors are stored (see also Further Details):
-*> = 'C': columnwise
-*> = 'R': rowwise
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the block reflector H. N >= 0.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the triangular factor T (= the number of
-*> elementary reflectors). K >= 1.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is DOUBLE PRECISION array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,N) if STOREV = 'R'
-*> The matrix V. See further details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is DOUBLE PRECISION array, dimension (K)
-*> TAU(i) must contain the scalar factor of the elementary
-*> reflector H(i).
-*> \endverbatim
-*>
-*> \param[out] T
-*> \verbatim
-*> T is DOUBLE PRECISION array, dimension (LDT,K)
-*> The k by k triangular factor T of the block reflector.
-*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
-*> lower triangular. The rest of the array is not used.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup doubleOTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, STOREV
- INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
- DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ONE, ZERO
- PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- INTEGER I, J, PREVLASTV, LASTV
-* ..
-* .. External Subroutines ..
- EXTERNAL DGEMV, DTRMV
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- EXTERNAL LSAME
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( N.EQ.0 )
- $ RETURN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
- PREVLASTV = N
- DO I = 1, K
- PREVLASTV = MAX( I, PREVLASTV )
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = 1, I
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * V( I , J )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* 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 ),
- $ V( I+1, 1 ), LDV, V( I+1, I ), 1, ONE,
- $ T( 1, I ), 1 )
- ELSE
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * V( J , I )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**T
-*
- CALL DGEMV( 'No transpose', I-1, J-I, -TAU( I ),
- $ V( 1, I+1 ), LDV, V( I, I+1 ), LDV, ONE,
- $ T( 1, I ), 1 )
- END IF
-*
-* T(1:i-1,i) := T(1:i-1,1:i-1) * T(1:i-1,i)
-*
- CALL DTRMV( 'Upper', 'No transpose', 'Non-unit', I-1, T,
- $ LDT, T( 1, I ), 1 )
- T( I, I ) = TAU( I )
- IF( I.GT.1 ) THEN
- PREVLASTV = MAX( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- END DO
- ELSE
- PREVLASTV = 1
- DO I = K, 1, -1
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = I, K
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( I.LT.K ) THEN
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * V( N-K+I , J )
- END DO
- 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)
-*
- CALL DGEMV( 'Transpose', N-K+I-J, K-I, -TAU( I ),
- $ V( J, I+1 ), LDV, V( J, I ), 1, ONE,
- $ T( I+1, I ), 1 )
- ELSE
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * V( J, N-K+I )
- END DO
- 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
-*
- CALL DGEMV( 'No transpose', K-I, N-K+I-J,
- $ -TAU( I ), V( I+1, J ), LDV, V( I, J ), LDV,
- $ ONE, T( I+1, I ), 1 )
- END IF
-*
-* T(i+1:k,i) := T(i+1:k,i+1:k) * T(i+1:k,i)
-*
- CALL DTRMV( 'Lower', 'No transpose', 'Non-unit', K-I,
- $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 )
- IF( I.GT.1 ) THEN
- PREVLASTV = MIN( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- T( I, I ) = TAU( I )
- END IF
- END DO
- END IF
- RETURN
-*
-* End of DLARFT
-*
- END
diff --git a/eigen/lapack/double.cpp b/eigen/lapack/double.cpp
deleted file mode 100644
index ea78bb6..0000000
--- a/eigen/lapack/double.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2009-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#define SCALAR double
-#define SCALAR_SUFFIX d
-#define SCALAR_SUFFIX_UP "D"
-#define ISCOMPLEX 0
-
-#include "cholesky.cpp"
-#include "lu.cpp"
-#include "eigenvalues.cpp"
-#include "svd.cpp"
diff --git a/eigen/lapack/dsecnd_NONE.f b/eigen/lapack/dsecnd_NONE.f
deleted file mode 100644
index 61a8dff..0000000
--- a/eigen/lapack/dsecnd_NONE.f
+++ /dev/null
@@ -1,52 +0,0 @@
-*> \brief \b DSECND returns nothing
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-* Definition:
-* ===========
-*
-* DOUBLE PRECISION FUNCTION DSECND( )
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> DSECND returns nothing instead of returning the user time for a process in seconds.
-*> If you are using that routine, it means that neither EXTERNAL ETIME,
-*> EXTERNAL ETIME_, INTERNAL ETIME, INTERNAL CPU_TIME is available on
-*> your machine.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- DOUBLE PRECISION FUNCTION DSECND( )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* =====================================================================
-*
- DSECND = 0.0D+0
- RETURN
-*
-* End of DSECND
-*
- END
diff --git a/eigen/lapack/eigenvalues.cpp b/eigen/lapack/eigenvalues.cpp
deleted file mode 100644
index 921c515..0000000
--- a/eigen/lapack/eigenvalues.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2011 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#include "lapack_common.h"
-#include <Eigen/Eigenvalues>
-
-// computes eigen values and vectors of a general N-by-N matrix A
-EIGEN_LAPACK_FUNC(syev,(char *jobz, char *uplo, int* n, Scalar* a, int *lda, Scalar* w, Scalar* /*work*/, int* lwork, int *info))
-{
- // TODO exploit the work buffer
- bool query_size = *lwork==-1;
-
- *info = 0;
- if(*jobz!='N' && *jobz!='V') *info = -1;
- else if(UPLO(*uplo)==INVALID) *info = -2;
- else if(*n<0) *info = -3;
- else if(*lda<std::max(1,*n)) *info = -5;
- else if((!query_size) && *lwork<std::max(1,3**n-1)) *info = -8;
-
- if(*info!=0)
- {
- int e = -*info;
- return xerbla_(SCALAR_SUFFIX_UP"SYEV ", &e, 6);
- }
-
- if(query_size)
- {
- *lwork = 0;
- return 0;
- }
-
- if(*n==0)
- return 0;
-
- PlainMatrixType mat(*n,*n);
- if(UPLO(*uplo)==UP) mat = matrix(a,*n,*n,*lda).adjoint();
- else mat = matrix(a,*n,*n,*lda);
-
- bool computeVectors = *jobz=='V' || *jobz=='v';
- SelfAdjointEigenSolver<PlainMatrixType> eig(mat,computeVectors?ComputeEigenvectors:EigenvaluesOnly);
-
- if(eig.info()==NoConvergence)
- {
- make_vector(w,*n).setZero();
- if(computeVectors)
- matrix(a,*n,*n,*lda).setIdentity();
- //*info = 1;
- return 0;
- }
-
- make_vector(w,*n) = eig.eigenvalues();
- if(computeVectors)
- matrix(a,*n,*n,*lda) = eig.eigenvectors();
-
- return 0;
-}
diff --git a/eigen/lapack/ilaclc.f b/eigen/lapack/ilaclc.f
deleted file mode 100644
index 4ceb61c..0000000
--- a/eigen/lapack/ilaclc.f
+++ /dev/null
@@ -1,118 +0,0 @@
-*> \brief \b ILACLC
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILACLC + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaclc.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaclc.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaclc.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILACLC( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* COMPLEX A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILACLC scans A for its last non-zero column.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is COMPLEX array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complexOTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILACLC( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- COMPLEX A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX ZERO
- PARAMETER ( ZERO = (0.0E+0, 0.0E+0) )
-* ..
-* .. Local Scalars ..
- INTEGER I
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( N.EQ.0 ) THEN
- ILACLC = N
- ELSE IF( A(1, N).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILACLC = N
- ELSE
-* Now scan each column from the end, returning with the first non-zero.
- DO ILACLC = N, 1, -1
- DO I = 1, M
- IF( A(I, ILACLC).NE.ZERO ) RETURN
- END DO
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/ilaclr.f b/eigen/lapack/ilaclr.f
deleted file mode 100644
index d8ab09c..0000000
--- a/eigen/lapack/ilaclr.f
+++ /dev/null
@@ -1,121 +0,0 @@
-*> \brief \b ILACLR
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILACLR + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaclr.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaclr.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaclr.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILACLR( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* COMPLEX A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILACLR scans A for its last non-zero row.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup complexOTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILACLR( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- COMPLEX A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX ZERO
- PARAMETER ( ZERO = (0.0E+0, 0.0E+0) )
-* ..
-* .. Local Scalars ..
- INTEGER I, J
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( M.EQ.0 ) THEN
- ILACLR = M
- ELSE IF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILACLR = M
- ELSE
-* Scan up each column tracking the last zero row seen.
- ILACLR = 0
- DO J = 1, N
- I=M
- DO WHILE((A(MAX(I,1),J).EQ.ZERO).AND.(I.GE.1))
- I=I-1
- ENDDO
- ILACLR = MAX( ILACLR, I )
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/iladlc.f b/eigen/lapack/iladlc.f
deleted file mode 100644
index f84bd83..0000000
--- a/eigen/lapack/iladlc.f
+++ /dev/null
@@ -1,118 +0,0 @@
-*> \brief \b ILADLC
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILADLC + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/iladlc.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/iladlc.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladlc.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILADLC( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* DOUBLE PRECISION A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILADLC scans A for its last non-zero column.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is DOUBLE PRECISION array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILADLC( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- DOUBLE PRECISION A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ZERO
- PARAMETER ( ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- INTEGER I
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( N.EQ.0 ) THEN
- ILADLC = N
- ELSE IF( A(1, N).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILADLC = N
- ELSE
-* Now scan each column from the end, returning with the first non-zero.
- DO ILADLC = N, 1, -1
- DO I = 1, M
- IF( A(I, ILADLC).NE.ZERO ) RETURN
- END DO
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/iladlr.f b/eigen/lapack/iladlr.f
deleted file mode 100644
index 2114c61..0000000
--- a/eigen/lapack/iladlr.f
+++ /dev/null
@@ -1,121 +0,0 @@
-*> \brief \b ILADLR
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILADLR + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/iladlr.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/iladlr.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladlr.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILADLR( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* DOUBLE PRECISION A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILADLR scans A for its last non-zero row.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is DOUBLE PRECISION array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILADLR( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- DOUBLE PRECISION A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ZERO
- PARAMETER ( ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- INTEGER I, J
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( M.EQ.0 ) THEN
- ILADLR = M
- ELSE IF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILADLR = M
- ELSE
-* Scan up each column tracking the last zero row seen.
- ILADLR = 0
- DO J = 1, N
- I=M
- DO WHILE((A(MAX(I,1),J).EQ.ZERO).AND.(I.GE.1))
- I=I-1
- ENDDO
- ILADLR = MAX( ILADLR, I )
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/ilaslc.f b/eigen/lapack/ilaslc.f
deleted file mode 100644
index e3db0f4..0000000
--- a/eigen/lapack/ilaslc.f
+++ /dev/null
@@ -1,118 +0,0 @@
-*> \brief \b ILASLC
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILASLC + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaslc.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaslc.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaslc.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILASLC( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* REAL A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILASLC scans A for its last non-zero column.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is REAL array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILASLC( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- REAL A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ZERO
- PARAMETER ( ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- INTEGER I
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( N.EQ.0 ) THEN
- ILASLC = N
- ELSE IF( A(1, N).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILASLC = N
- ELSE
-* Now scan each column from the end, returning with the first non-zero.
- DO ILASLC = N, 1, -1
- DO I = 1, M
- IF( A(I, ILASLC).NE.ZERO ) RETURN
- END DO
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/ilaslr.f b/eigen/lapack/ilaslr.f
deleted file mode 100644
index 48b73f4..0000000
--- a/eigen/lapack/ilaslr.f
+++ /dev/null
@@ -1,121 +0,0 @@
-*> \brief \b ILASLR
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILASLR + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaslr.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaslr.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaslr.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILASLR( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* REAL A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILASLR scans A for its last non-zero row.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is REAL array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup realOTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILASLR( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- REAL A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ZERO
- PARAMETER ( ZERO = 0.0E+0 )
-* ..
-* .. Local Scalars ..
- INTEGER I, J
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( M.EQ.0 ) THEN
- ILASLR = M
- ELSEIF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILASLR = M
- ELSE
-* Scan up each column tracking the last zero row seen.
- ILASLR = 0
- DO J = 1, N
- I=M
- DO WHILE((A(MAX(I,1),J).EQ.ZERO).AND.(I.GE.1))
- I=I-1
- ENDDO
- ILASLR = MAX( ILASLR, I )
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/ilazlc.f b/eigen/lapack/ilazlc.f
deleted file mode 100644
index 15b1490..0000000
--- a/eigen/lapack/ilazlc.f
+++ /dev/null
@@ -1,118 +0,0 @@
-*> \brief \b ILAZLC
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILAZLC + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilazlc.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilazlc.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilazlc.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILAZLC( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* COMPLEX*16 A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILAZLC scans A for its last non-zero column.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is COMPLEX*16 array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILAZLC( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- COMPLEX*16 A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX*16 ZERO
- PARAMETER ( ZERO = (0.0D+0, 0.0D+0) )
-* ..
-* .. Local Scalars ..
- INTEGER I
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( N.EQ.0 ) THEN
- ILAZLC = N
- ELSE IF( A(1, N).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILAZLC = N
- ELSE
-* Now scan each column from the end, returning with the first non-zero.
- DO ILAZLC = N, 1, -1
- DO I = 1, M
- IF( A(I, ILAZLC).NE.ZERO ) RETURN
- END DO
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/ilazlr.f b/eigen/lapack/ilazlr.f
deleted file mode 100644
index b2ab943..0000000
--- a/eigen/lapack/ilazlr.f
+++ /dev/null
@@ -1,121 +0,0 @@
-*> \brief \b ILAZLR
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ILAZLR + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilazlr.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilazlr.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilazlr.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* INTEGER FUNCTION ILAZLR( M, N, A, LDA )
-*
-* .. Scalar Arguments ..
-* INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
-* COMPLEX*16 A( LDA, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ILAZLR scans A for its last non-zero row.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix A.
-*> \endverbatim
-*>
-*> \param[in] A
-*> \verbatim
-*> A is COMPLEX*16 array, dimension (LDA,N)
-*> The m by n matrix A.
-*> \endverbatim
-*>
-*> \param[in] LDA
-*> \verbatim
-*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup complex16OTHERauxiliary
-*
-* =====================================================================
- INTEGER FUNCTION ILAZLR( M, N, A, LDA )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- INTEGER M, N, LDA
-* ..
-* .. Array Arguments ..
- COMPLEX*16 A( LDA, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX*16 ZERO
- PARAMETER ( ZERO = (0.0D+0, 0.0D+0) )
-* ..
-* .. Local Scalars ..
- INTEGER I, J
-* ..
-* .. Executable Statements ..
-*
-* Quick test for the common case where one corner is non-zero.
- IF( M.EQ.0 ) THEN
- ILAZLR = M
- ELSE IF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
- ILAZLR = M
- ELSE
-* Scan up each column tracking the last zero row seen.
- ILAZLR = 0
- DO J = 1, N
- I=M
- DO WHILE((A(MAX(I,1),J).EQ.ZERO).AND.(I.GE.1))
- I=I-1
- ENDDO
- ILAZLR = MAX( ILAZLR, I )
- END DO
- END IF
- RETURN
- END
diff --git a/eigen/lapack/lapack_common.h b/eigen/lapack/lapack_common.h
deleted file mode 100644
index c872a81..0000000
--- a/eigen/lapack/lapack_common.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2010-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#ifndef EIGEN_LAPACK_COMMON_H
-#define EIGEN_LAPACK_COMMON_H
-
-#include "../blas/common.h"
-#include "../Eigen/src/misc/lapack.h"
-
-#define EIGEN_LAPACK_FUNC(FUNC,ARGLIST) \
- extern "C" { int EIGEN_BLAS_FUNC(FUNC) ARGLIST; } \
- int EIGEN_BLAS_FUNC(FUNC) ARGLIST
-
-typedef Eigen::Map<Eigen::Transpositions<Eigen::Dynamic,Eigen::Dynamic,int> > PivotsType;
-
-#if ISCOMPLEX
-#define EIGEN_LAPACK_ARG_IF_COMPLEX(X) X,
-#else
-#define EIGEN_LAPACK_ARG_IF_COMPLEX(X)
-#endif
-
-
-#endif // EIGEN_LAPACK_COMMON_H
diff --git a/eigen/lapack/lu.cpp b/eigen/lapack/lu.cpp
deleted file mode 100644
index 90cebe0..0000000
--- a/eigen/lapack/lu.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2010-2011 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#include "common.h"
-#include <Eigen/LU>
-
-// computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges
-EIGEN_LAPACK_FUNC(getrf,(int *m, int *n, RealScalar *pa, int *lda, int *ipiv, int *info))
-{
- *info = 0;
- if(*m<0) *info = -1;
- else if(*n<0) *info = -2;
- else if(*lda<std::max(1,*m)) *info = -4;
- if(*info!=0)
- {
- int e = -*info;
- return xerbla_(SCALAR_SUFFIX_UP"GETRF", &e, 6);
- }
-
- if(*m==0 || *n==0)
- return 0;
-
- Scalar* a = reinterpret_cast<Scalar*>(pa);
- int nb_transpositions;
- int ret = int(Eigen::internal::partial_lu_impl<Scalar,ColMajor,int>
- ::blocked_lu(*m, *n, a, *lda, ipiv, nb_transpositions));
-
- for(int i=0; i<std::min(*m,*n); ++i)
- ipiv[i]++;
-
- if(ret>=0)
- *info = ret+1;
-
- return 0;
-}
-
-//GETRS solves a system of linear equations
-// A * X = B or A' * X = B
-// with a general N-by-N matrix A using the LU factorization computed by GETRF
-EIGEN_LAPACK_FUNC(getrs,(char *trans, int *n, int *nrhs, RealScalar *pa, int *lda, int *ipiv, RealScalar *pb, int *ldb, int *info))
-{
- *info = 0;
- if(OP(*trans)==INVALID) *info = -1;
- else if(*n<0) *info = -2;
- else if(*nrhs<0) *info = -3;
- else if(*lda<std::max(1,*n)) *info = -5;
- else if(*ldb<std::max(1,*n)) *info = -8;
- if(*info!=0)
- {
- int e = -*info;
- return xerbla_(SCALAR_SUFFIX_UP"GETRS", &e, 6);
- }
-
- Scalar* a = reinterpret_cast<Scalar*>(pa);
- Scalar* b = reinterpret_cast<Scalar*>(pb);
- MatrixType lu(a,*n,*n,*lda);
- MatrixType B(b,*n,*nrhs,*ldb);
-
- for(int i=0; i<*n; ++i)
- ipiv[i]--;
- if(OP(*trans)==NOTR)
- {
- B = PivotsType(ipiv,*n) * B;
- lu.triangularView<UnitLower>().solveInPlace(B);
- lu.triangularView<Upper>().solveInPlace(B);
- }
- else if(OP(*trans)==TR)
- {
- lu.triangularView<Upper>().transpose().solveInPlace(B);
- lu.triangularView<UnitLower>().transpose().solveInPlace(B);
- B = PivotsType(ipiv,*n).transpose() * B;
- }
- else if(OP(*trans)==ADJ)
- {
- lu.triangularView<Upper>().adjoint().solveInPlace(B);
- lu.triangularView<UnitLower>().adjoint().solveInPlace(B);
- B = PivotsType(ipiv,*n).transpose() * B;
- }
- for(int i=0; i<*n; ++i)
- ipiv[i]++;
-
- return 0;
-}
diff --git a/eigen/lapack/second_NONE.f b/eigen/lapack/second_NONE.f
deleted file mode 100644
index d3e6d33..0000000
--- a/eigen/lapack/second_NONE.f
+++ /dev/null
@@ -1,52 +0,0 @@
-*> \brief \b SECOND returns nothing
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-* Definition:
-* ===========
-*
-* REAL FUNCTION SECOND( )
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SECOND returns nothing instead of returning the user time for a process in seconds.
-*> If you are using that routine, it means that neither EXTERNAL ETIME,
-*> EXTERNAL ETIME_, INTERNAL ETIME, INTERNAL CPU_TIME is available on
-*> your machine.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- REAL FUNCTION SECOND( )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* =====================================================================
-*
- SECOND = 0.0E+0
- RETURN
-*
-* End of SECOND
-*
- END
diff --git a/eigen/lapack/single.cpp b/eigen/lapack/single.cpp
deleted file mode 100644
index c7da3ef..0000000
--- a/eigen/lapack/single.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2009-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#define SCALAR float
-#define SCALAR_SUFFIX s
-#define SCALAR_SUFFIX_UP "S"
-#define ISCOMPLEX 0
-
-#include "cholesky.cpp"
-#include "lu.cpp"
-#include "eigenvalues.cpp"
-#include "svd.cpp"
diff --git a/eigen/lapack/sladiv.f b/eigen/lapack/sladiv.f
deleted file mode 100644
index da3afa3..0000000
--- a/eigen/lapack/sladiv.f
+++ /dev/null
@@ -1,128 +0,0 @@
-*> \brief \b SLADIV
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download SLADIV + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/sladiv.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/sladiv.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sladiv.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE SLADIV( A, B, C, D, P, Q )
-*
-* .. Scalar Arguments ..
-* REAL A, B, C, D, P, Q
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLADIV performs complex division in real arithmetic
-*>
-*> a + i*b
-*> p + i*q = ---------
-*> c + i*d
-*>
-*> The algorithm is due to Robert L. Smith and can be found
-*> in D. Knuth, The art of Computer Programming, Vol.2, p.195
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] A
-*> \verbatim
-*> A is REAL
-*> \endverbatim
-*>
-*> \param[in] B
-*> \verbatim
-*> B is REAL
-*> \endverbatim
-*>
-*> \param[in] C
-*> \verbatim
-*> C is REAL
-*> \endverbatim
-*>
-*> \param[in] D
-*> \verbatim
-*> D is REAL
-*> The scalars a, b, c, and d in the above expression.
-*> \endverbatim
-*>
-*> \param[out] P
-*> \verbatim
-*> P is REAL
-*> \endverbatim
-*>
-*> \param[out] Q
-*> \verbatim
-*> Q is REAL
-*> The scalars p and q in the above expression.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE SLADIV( A, B, C, D, P, Q )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- REAL A, B, C, D, P, Q
-* ..
-*
-* =====================================================================
-*
-* .. Local Scalars ..
- REAL E, F
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS
-* ..
-* .. Executable Statements ..
-*
- IF( ABS( D ).LT.ABS( C ) ) THEN
- E = D / C
- F = C + D*E
- P = ( A+B*E ) / F
- Q = ( B-A*E ) / F
- ELSE
- E = C / D
- F = D + C*E
- P = ( B+A*E ) / F
- Q = ( -A+B*E ) / F
- END IF
-*
- RETURN
-*
-* End of SLADIV
-*
- END
diff --git a/eigen/lapack/slamch.f b/eigen/lapack/slamch.f
deleted file mode 100644
index 4bffad0..0000000
--- a/eigen/lapack/slamch.f
+++ /dev/null
@@ -1,192 +0,0 @@
-*> \brief \b SLAMCH
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-* Definition:
-* ===========
-*
-* REAL FUNCTION SLAMCH( CMACH )
-*
-* .. Scalar Arguments ..
-* CHARACTER CMACH
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLAMCH determines single precision machine parameters.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] CMACH
-*> \verbatim
-*> Specifies the value to be returned by SLAMCH:
-*> = 'E' or 'e', SLAMCH := eps
-*> = 'S' or 's , SLAMCH := sfmin
-*> = 'B' or 'b', SLAMCH := base
-*> = 'P' or 'p', SLAMCH := eps*base
-*> = 'N' or 'n', SLAMCH := t
-*> = 'R' or 'r', SLAMCH := rnd
-*> = 'M' or 'm', SLAMCH := emin
-*> = 'U' or 'u', SLAMCH := rmin
-*> = 'L' or 'l', SLAMCH := emax
-*> = 'O' or 'o', SLAMCH := 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 November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- REAL FUNCTION SLAMCH( CMACH )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER CMACH
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ONE, ZERO
- PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
-* ..
-* .. Local Scalars ..
- REAL RND, EPS, SFMIN, SMALL, RMACH
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- EXTERNAL LSAME
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT,
- $ MINEXPONENT, RADIX, TINY
-* ..
-* .. Executable Statements ..
-*
-*
-* Assume rounding, not chopping. Always.
-*
- RND = ONE
-*
- IF( ONE.EQ.RND ) THEN
- EPS = EPSILON(ZERO) * 0.5
- ELSE
- EPS = EPSILON(ZERO)
- END IF
-*
- IF( LSAME( CMACH, 'E' ) ) THEN
- RMACH = EPS
- ELSE IF( LSAME( CMACH, 'S' ) ) THEN
- SFMIN = TINY(ZERO)
- SMALL = ONE / HUGE(ZERO)
- IF( SMALL.GE.SFMIN ) THEN
-*
-* Use SMALL plus a bit, to avoid the possibility of rounding
-* causing overflow when computing 1/sfmin.
-*
- SFMIN = SMALL*( ONE+EPS )
- END IF
- RMACH = SFMIN
- ELSE IF( LSAME( CMACH, 'B' ) ) THEN
- RMACH = RADIX(ZERO)
- ELSE IF( LSAME( CMACH, 'P' ) ) THEN
- RMACH = EPS * RADIX(ZERO)
- ELSE IF( LSAME( CMACH, 'N' ) ) THEN
- RMACH = DIGITS(ZERO)
- ELSE IF( LSAME( CMACH, 'R' ) ) THEN
- RMACH = RND
- ELSE IF( LSAME( CMACH, 'M' ) ) THEN
- RMACH = MINEXPONENT(ZERO)
- ELSE IF( LSAME( CMACH, 'U' ) ) THEN
- RMACH = tiny(zero)
- ELSE IF( LSAME( CMACH, 'L' ) ) THEN
- RMACH = MAXEXPONENT(ZERO)
- ELSE IF( LSAME( CMACH, 'O' ) ) THEN
- RMACH = HUGE(ZERO)
- ELSE
- RMACH = ZERO
- END IF
-*
- SLAMCH = RMACH
- RETURN
-*
-* End of SLAMCH
-*
- END
-************************************************************************
-*> \brief \b SLAMC3
-*> \details
-*> \b Purpose:
-*> \verbatim
-*> SLAMC3 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.
-*> \endverbatim
-*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..
-*> \date November 2011
-*> \ingroup auxOTHERauxiliary
-*>
-*> \param[in] A
-*> \verbatim
-*> \endverbatim
-*>
-*> \param[in] B
-*> \verbatim
-*> The values A and B.
-*> \endverbatim
-*>
-*
- REAL FUNCTION SLAMC3( A, B )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
-* November 2010
-*
-* .. Scalar Arguments ..
- REAL A, B
-* ..
-* =====================================================================
-*
-* .. Executable Statements ..
-*
- SLAMC3 = A + B
-*
- RETURN
-*
-* End of SLAMC3
-*
- END
-*
-************************************************************************
diff --git a/eigen/lapack/slapy2.f b/eigen/lapack/slapy2.f
deleted file mode 100644
index 1f6b1ca..0000000
--- a/eigen/lapack/slapy2.f
+++ /dev/null
@@ -1,104 +0,0 @@
-*> \brief \b SLAPY2
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download SLAPY2 + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slapy2.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slapy2.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapy2.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* REAL FUNCTION SLAPY2( X, Y )
-*
-* .. Scalar Arguments ..
-* REAL X, Y
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLAPY2 returns sqrt(x**2+y**2), taking care not to cause unnecessary
-*> overflow.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] X
-*> \verbatim
-*> X is REAL
-*> \endverbatim
-*>
-*> \param[in] Y
-*> \verbatim
-*> Y is REAL
-*> X and Y specify the values x and y.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- REAL FUNCTION SLAPY2( X, Y )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- REAL X, Y
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ZERO
- PARAMETER ( ZERO = 0.0E0 )
- REAL ONE
- PARAMETER ( ONE = 1.0E0 )
-* ..
-* .. Local Scalars ..
- REAL W, XABS, YABS, Z
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, MAX, MIN, SQRT
-* ..
-* .. Executable Statements ..
-*
- XABS = ABS( X )
- YABS = ABS( Y )
- W = MAX( XABS, YABS )
- Z = MIN( XABS, YABS )
- IF( Z.EQ.ZERO ) THEN
- SLAPY2 = W
- ELSE
- SLAPY2 = W*SQRT( ONE+( Z / W )**2 )
- END IF
- RETURN
-*
-* End of SLAPY2
-*
- END
diff --git a/eigen/lapack/slapy3.f b/eigen/lapack/slapy3.f
deleted file mode 100644
index aa2f5bf..0000000
--- a/eigen/lapack/slapy3.f
+++ /dev/null
@@ -1,111 +0,0 @@
-*> \brief \b SLAPY3
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download SLAPY3 + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slapy3.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slapy3.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapy3.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* REAL FUNCTION SLAPY3( X, Y, Z )
-*
-* .. Scalar Arguments ..
-* REAL X, Y, Z
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLAPY3 returns sqrt(x**2+y**2+z**2), taking care not to cause
-*> unnecessary overflow.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] X
-*> \verbatim
-*> X is REAL
-*> \endverbatim
-*>
-*> \param[in] Y
-*> \verbatim
-*> Y is REAL
-*> \endverbatim
-*>
-*> \param[in] Z
-*> \verbatim
-*> Z is REAL
-*> X, Y and Z specify the values x, y and z.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup auxOTHERauxiliary
-*
-* =====================================================================
- REAL FUNCTION SLAPY3( X, Y, Z )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- REAL X, Y, Z
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ZERO
- PARAMETER ( ZERO = 0.0E0 )
-* ..
-* .. Local Scalars ..
- REAL W, XABS, YABS, ZABS
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, MAX, SQRT
-* ..
-* .. Executable Statements ..
-*
- XABS = ABS( X )
- YABS = ABS( Y )
- ZABS = ABS( Z )
- W = MAX( XABS, YABS, ZABS )
- IF( W.EQ.ZERO ) THEN
-* W can be zero for max(0,nan,0)
-* adding all three entries together will make sure
-* NaN will not disappear.
- SLAPY3 = XABS + YABS + ZABS
- ELSE
- SLAPY3 = W*SQRT( ( XABS / W )**2+( YABS / W )**2+
- $ ( ZABS / W )**2 )
- END IF
- RETURN
-*
-* End of SLAPY3
-*
- END
diff --git a/eigen/lapack/slarf.f b/eigen/lapack/slarf.f
deleted file mode 100644
index 8a8ff30..0000000
--- a/eigen/lapack/slarf.f
+++ /dev/null
@@ -1,227 +0,0 @@
-*> \brief \b SLARF
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download SLARF + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slarf.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slarf.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarf.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE SLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER SIDE
-* INTEGER INCV, LDC, M, N
-* REAL TAU
-* ..
-* .. Array Arguments ..
-* REAL C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLARF applies a real elementary reflector H to a real m by n matrix
-*> C, from either the left or the right. H is represented in the form
-*>
-*> H = I - tau * v * v**T
-*>
-*> where tau is a real scalar and v is a real vector.
-*>
-*> If tau = 0, then H is taken to be the unit matrix.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': form H * C
-*> = 'R': form C * H
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is REAL array, dimension
-*> (1 + (M-1)*abs(INCV)) if SIDE = 'L'
-*> or (1 + (N-1)*abs(INCV)) if SIDE = 'R'
-*> The vector v in the representation of H. V is not used if
-*> TAU = 0.
-*> \endverbatim
-*>
-*> \param[in] INCV
-*> \verbatim
-*> INCV is INTEGER
-*> The increment between elements of v. INCV <> 0.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is REAL
-*> The value tau in the representation of H.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is REAL array, dimension (LDC,N)
-*> On entry, the m by n matrix C.
-*> On exit, C is overwritten by the matrix H * C if SIDE = 'L',
-*> or C * H if SIDE = 'R'.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is REAL array, dimension
-*> (N) if SIDE = 'L'
-*> or (M) if SIDE = 'R'
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE SLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER SIDE
- INTEGER INCV, LDC, M, N
- REAL TAU
-* ..
-* .. Array Arguments ..
- REAL C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ONE, ZERO
- PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
-* ..
-* .. Local Scalars ..
- LOGICAL APPLYLEFT
- INTEGER I, LASTV, LASTC
-* ..
-* .. External Subroutines ..
- EXTERNAL SGEMV, SGER
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILASLR, ILASLC
- EXTERNAL LSAME, ILASLR, ILASLC
-* ..
-* .. Executable Statements ..
-*
- APPLYLEFT = LSAME( SIDE, 'L' )
- LASTV = 0
- LASTC = 0
- IF( TAU.NE.ZERO ) THEN
-! Set up variables for scanning V. LASTV begins pointing to the end
-! of V.
- IF( APPLYLEFT ) THEN
- LASTV = M
- ELSE
- LASTV = N
- END IF
- IF( INCV.GT.0 ) THEN
- I = 1 + (LASTV-1) * INCV
- ELSE
- I = 1
- END IF
-! Look for the last non-zero row in V.
- DO WHILE( LASTV.GT.0 .AND. V( I ).EQ.ZERO )
- LASTV = LASTV - 1
- I = I - INCV
- END DO
- IF( APPLYLEFT ) THEN
-! Scan for the last non-zero column in C(1:lastv,:).
- LASTC = ILASLC(LASTV, N, C, LDC)
- ELSE
-! Scan for the last non-zero row in C(:,1:lastv).
- LASTC = ILASLR(M, LASTV, C, LDC)
- END IF
- END IF
-! Note that lastc.eq.0 renders the BLAS operations null; no special
-! case is needed at this level.
- IF( APPLYLEFT ) THEN
-*
-* Form H * C
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastv,1:lastc)**T * v(1:lastv,1)
-*
- CALL SGEMV( 'Transpose', LASTV, LASTC, ONE, C, LDC, V, INCV,
- $ ZERO, WORK, 1 )
-*
-* C(1:lastv,1:lastc) := C(...) - v(1:lastv,1) * w(1:lastc,1)**T
-*
- CALL SGER( LASTV, LASTC, -TAU, V, INCV, WORK, 1, C, LDC )
- END IF
- ELSE
-*
-* Form C * H
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastc,1:lastv) * v(1:lastv,1)
-*
- CALL SGEMV( 'No transpose', LASTC, LASTV, ONE, C, LDC,
- $ V, INCV, ZERO, WORK, 1 )
-*
-* C(1:lastc,1:lastv) := C(...) - w(1:lastc,1) * v(1:lastv,1)**T
-*
- CALL SGER( LASTC, LASTV, -TAU, WORK, 1, V, INCV, C, LDC )
- END IF
- END IF
- RETURN
-*
-* End of SLARF
-*
- END
diff --git a/eigen/lapack/slarfb.f b/eigen/lapack/slarfb.f
deleted file mode 100644
index eb95990..0000000
--- a/eigen/lapack/slarfb.f
+++ /dev/null
@@ -1,763 +0,0 @@
-*> \brief \b SLARFB
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download SLARFB + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slarfb.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slarfb.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfb.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE SLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
-* T, LDT, C, LDC, WORK, LDWORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, SIDE, STOREV, TRANS
-* INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
-* REAL C( LDC, * ), T( LDT, * ), V( LDV, * ),
-* $ WORK( LDWORK, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLARFB applies a real block reflector H or its transpose H**T to a
-*> real m by n matrix C, from either the left or the right.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': apply H or H**T from the Left
-*> = 'R': apply H or H**T from the Right
-*> \endverbatim
-*>
-*> \param[in] TRANS
-*> \verbatim
-*> TRANS is CHARACTER*1
-*> = 'N': apply H (No transpose)
-*> = 'T': apply H**T (Transpose)
-*> \endverbatim
-*>
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Indicates how H is formed from a product of elementary
-*> reflectors
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Indicates how the vectors which define the elementary
-*> reflectors are stored:
-*> = 'C': Columnwise
-*> = 'R': Rowwise
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the matrix T (= the number of elementary
-*> reflectors whose product defines the block reflector).
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is REAL array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
-*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
-*> The matrix V. See Further Details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
-*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
-*> if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] T
-*> \verbatim
-*> T is REAL array, dimension (LDT,K)
-*> The triangular k by k matrix T in the representation of the
-*> block reflector.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is REAL array, dimension (LDC,N)
-*> On entry, the m by n matrix C.
-*> On exit, C is overwritten by H*C or H**T*C or C*H or C*H**T.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is REAL array, dimension (LDWORK,K)
-*> \endverbatim
-*>
-*> \param[in] LDWORK
-*> \verbatim
-*> LDWORK is INTEGER
-*> The leading dimension of the array WORK.
-*> If SIDE = 'L', LDWORK >= max(1,N);
-*> if SIDE = 'R', LDWORK >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored; the corresponding
-*> array elements are modified but restored on exit. The rest of the
-*> array is not used.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE SLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
- $ T, LDT, C, LDC, WORK, LDWORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, SIDE, STOREV, TRANS
- INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
- REAL C( LDC, * ), T( LDT, * ), V( LDV, * ),
- $ WORK( LDWORK, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ONE
- PARAMETER ( ONE = 1.0E+0 )
-* ..
-* .. Local Scalars ..
- CHARACTER TRANST
- INTEGER I, J, LASTV, LASTC
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILASLR, ILASLC
- EXTERNAL LSAME, ILASLR, ILASLC
-* ..
-* .. External Subroutines ..
- EXTERNAL SCOPY, SGEMM, STRMM
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( M.LE.0 .OR. N.LE.0 )
- $ RETURN
-*
- IF( LSAME( TRANS, 'N' ) ) THEN
- TRANST = 'T'
- ELSE
- TRANST = 'N'
- END IF
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 ) (first K rows)
-* ( V2 )
-* where V1 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILASLR( M, K, V, LDV ) )
- LASTC = ILASLC( LASTV, N, C, LDC )
-*
-* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK)
-*
-* W := C1**T
-*
- DO 10 J = 1, K
- CALL SCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- 10 CONTINUE
-*
-* W := W * V1
-*
- CALL STRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**T *V2
-*
- CALL SGEMM( 'Transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( K+1, 1 ), LDC, V( K+1, 1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL STRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - V2 * W**T
-*
- CALL SGEMM( 'No transpose', 'Transpose',
- $ LASTV-K, LASTC, K,
- $ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK, ONE,
- $ C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1**T
-*
- CALL STRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**T
-*
- DO 30 J = 1, K
- DO 20 I = 1, LASTC
- C( J, I ) = C( J, I ) - WORK( I, J )
- 20 CONTINUE
- 30 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**T where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILASLR( N, K, V, LDV ) )
- LASTC = ILASLR( M, LASTV, C, LDC )
-*
-* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
-*
-* W := C1
-*
- DO 40 J = 1, K
- CALL SCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 40 CONTINUE
-*
-* W := W * V1
-*
- CALL STRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2
-*
- CALL SGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL STRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2**T
-*
- CALL SGEMM( 'No transpose', 'Transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV, ONE,
- $ C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1**T
-*
- CALL STRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 60 J = 1, K
- DO 50 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 50 CONTINUE
- 60 CONTINUE
- END IF
-*
- ELSE
-*
-* Let V = ( V1 )
-* ( V2 ) (last K rows)
-* where V2 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILASLR( M, K, V, LDV ) )
- LASTC = ILASLC( LASTV, N, C, LDC )
-*
-* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK)
-*
-* W := C2**T
-*
- DO 70 J = 1, K
- CALL SCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- 70 CONTINUE
-*
-* W := W * V2
-*
- CALL STRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**T*V1
-*
- CALL SGEMM( 'Transpose', 'No transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL STRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1 * W**T
-*
- CALL SGEMM( 'No transpose', 'Transpose',
- $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**T
-*
- CALL STRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**T
-*
- DO 90 J = 1, K
- DO 80 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J)
- 80 CONTINUE
- 90 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**T where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILASLR( N, K, V, LDV ) )
- LASTC = ILASLR( M, LASTV, C, LDC )
-*
-* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
-*
-* W := C2
-*
- DO 100 J = 1, K
- CALL SCOPY( LASTC, C( 1, N-K+J ), 1, WORK( 1, J ), 1 )
- 100 CONTINUE
-*
-* W := W * V2
-*
- CALL STRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1
-*
- CALL SGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL STRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1**T
-*
- CALL SGEMM( 'No transpose', 'Transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**T
-*
- CALL STRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W
-*
- DO 120 J = 1, K
- DO 110 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J ) - WORK(I, J)
- 110 CONTINUE
- 120 CONTINUE
- END IF
- END IF
-*
- ELSE IF( LSAME( STOREV, 'R' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 V2 ) (V1: first K columns)
-* where V1 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILASLC( K, M, V, LDV ) )
- LASTC = ILASLC( LASTV, N, C, LDC )
-*
-* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK)
-*
-* W := C1**T
-*
- DO 130 J = 1, K
- CALL SCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- 130 CONTINUE
-*
-* W := W * V1**T
-*
- CALL STRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**T*V2**T
-*
- CALL SGEMM( 'Transpose', 'Transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( K+1, 1 ), LDC, V( 1, K+1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL STRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**T * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - V2**T * W**T
-*
- CALL SGEMM( 'Transpose', 'Transpose',
- $ LASTV-K, LASTC, K,
- $ -ONE, V( 1, K+1 ), LDV, WORK, LDWORK,
- $ ONE, C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL STRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**T
-*
- DO 150 J = 1, K
- DO 140 I = 1, LASTC
- C( J, I ) = C( J, I ) - WORK( I, J )
- 140 CONTINUE
- 150 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**T where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILASLC( K, N, V, LDV ) )
- LASTC = ILASLR( M, LASTV, C, LDC )
-*
-* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK)
-*
-* W := C1
-*
- DO 160 J = 1, K
- CALL SCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 160 CONTINUE
-*
-* W := W * V1**T
-*
- CALL STRMM( 'Right', 'Upper', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2**T
-*
- CALL SGEMM( 'No transpose', 'Transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( 1, K+1 ), LDC, V( 1, K+1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL STRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2
-*
- CALL SGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV,
- $ ONE, C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL STRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 180 J = 1, K
- DO 170 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 170 CONTINUE
- 180 CONTINUE
-*
- END IF
-*
- ELSE
-*
-* Let V = ( V1 V2 ) (V2: last K columns)
-* where V2 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**T * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILASLC( K, M, V, LDV ) )
- LASTC = ILASLC( LASTV, N, C, LDC )
-*
-* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK)
-*
-* W := C2**T
-*
- DO 190 J = 1, K
- CALL SCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- 190 CONTINUE
-*
-* W := W * V2**T
-*
- CALL STRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**T * V1**T
-*
- CALL SGEMM( 'Transpose', 'Transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**T or W * T
-*
- CALL STRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**T * W**T
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1**T * W**T
-*
- CALL SGEMM( 'Transpose', 'Transpose',
- $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL STRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**T
-*
- DO 210 J = 1, K
- DO 200 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J)
- 200 CONTINUE
- 210 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**T where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILASLC( K, N, V, LDV ) )
- LASTC = ILASLR( M, LASTV, C, LDC )
-*
-* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK)
-*
-* W := C2
-*
- DO 220 J = 1, K
- CALL SCOPY( LASTC, C( 1, LASTV-K+J ), 1,
- $ WORK( 1, J ), 1 )
- 220 CONTINUE
-*
-* W := W * V2**T
-*
- CALL STRMM( 'Right', 'Lower', 'Transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1**T
-*
- CALL SGEMM( 'No transpose', 'Transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**T
-*
- CALL STRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1
-*
- CALL SGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL STRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 240 J = 1, K
- DO 230 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J )
- $ - WORK( I, J )
- 230 CONTINUE
- 240 CONTINUE
-*
- END IF
-*
- END IF
- END IF
-*
- RETURN
-*
-* End of SLARFB
-*
- END
diff --git a/eigen/lapack/slarfg.f b/eigen/lapack/slarfg.f
deleted file mode 100644
index 4f10ffc..0000000
--- a/eigen/lapack/slarfg.f
+++ /dev/null
@@ -1,196 +0,0 @@
-*> \brief \b SLARFG
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download SLARFG + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slarfg.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slarfg.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfg.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE SLARFG( N, ALPHA, X, INCX, TAU )
-*
-* .. Scalar Arguments ..
-* INTEGER INCX, N
-* REAL ALPHA, TAU
-* ..
-* .. Array Arguments ..
-* REAL X( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLARFG generates a real elementary reflector H of order n, such
-*> that
-*>
-*> H * ( alpha ) = ( beta ), H**T * H = I.
-*> ( x ) ( 0 )
-*>
-*> where alpha and beta are scalars, and x is an (n-1)-element real
-*> vector. H is represented in the form
-*>
-*> H = I - tau * ( 1 ) * ( 1 v**T ) ,
-*> ( v )
-*>
-*> where tau is a real scalar and v is a real (n-1)-element
-*> vector.
-*>
-*> If the elements of x are all zero, then tau = 0 and H is taken to be
-*> the unit matrix.
-*>
-*> Otherwise 1 <= tau <= 2.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the elementary reflector.
-*> \endverbatim
-*>
-*> \param[in,out] ALPHA
-*> \verbatim
-*> ALPHA is REAL
-*> On entry, the value alpha.
-*> On exit, it is overwritten with the value beta.
-*> \endverbatim
-*>
-*> \param[in,out] X
-*> \verbatim
-*> X is REAL array, dimension
-*> (1+(N-2)*abs(INCX))
-*> On entry, the vector x.
-*> On exit, it is overwritten with the vector v.
-*> \endverbatim
-*>
-*> \param[in] INCX
-*> \verbatim
-*> INCX is INTEGER
-*> The increment between elements of X. INCX > 0.
-*> \endverbatim
-*>
-*> \param[out] TAU
-*> \verbatim
-*> TAU is REAL
-*> The value tau.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup realOTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE SLARFG( N, ALPHA, X, INCX, TAU )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER INCX, N
- REAL ALPHA, TAU
-* ..
-* .. Array Arguments ..
- REAL X( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ONE, ZERO
- PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
-* ..
-* .. Local Scalars ..
- INTEGER J, KNT
- REAL BETA, RSAFMN, SAFMIN, XNORM
-* ..
-* .. External Functions ..
- REAL SLAMCH, SLAPY2, SNRM2
- EXTERNAL SLAMCH, SLAPY2, SNRM2
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, SIGN
-* ..
-* .. External Subroutines ..
- EXTERNAL SSCAL
-* ..
-* .. Executable Statements ..
-*
- IF( N.LE.1 ) THEN
- TAU = ZERO
- RETURN
- END IF
-*
- XNORM = SNRM2( N-1, X, INCX )
-*
- IF( XNORM.EQ.ZERO ) THEN
-*
-* H = I
-*
- TAU = ZERO
- ELSE
-*
-* general case
-*
- BETA = -SIGN( SLAPY2( ALPHA, XNORM ), ALPHA )
- SAFMIN = SLAMCH( 'S' ) / SLAMCH( 'E' )
- KNT = 0
- IF( ABS( BETA ).LT.SAFMIN ) THEN
-*
-* XNORM, BETA may be inaccurate; scale X and recompute them
-*
- RSAFMN = ONE / SAFMIN
- 10 CONTINUE
- KNT = KNT + 1
- CALL SSCAL( N-1, RSAFMN, X, INCX )
- BETA = BETA*RSAFMN
- ALPHA = ALPHA*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
- $ GO TO 10
-*
-* New BETA is at most 1, at least SAFMIN
-*
- XNORM = SNRM2( N-1, X, INCX )
- BETA = -SIGN( SLAPY2( ALPHA, XNORM ), ALPHA )
- END IF
- TAU = ( BETA-ALPHA ) / BETA
- CALL SSCAL( N-1, ONE / ( ALPHA-BETA ), X, INCX )
-*
-* If ALPHA is subnormal, it may lose relative accuracy
-*
- DO 20 J = 1, KNT
- BETA = BETA*SAFMIN
- 20 CONTINUE
- ALPHA = BETA
- END IF
-*
- RETURN
-*
-* End of SLARFG
-*
- END
diff --git a/eigen/lapack/slarft.f b/eigen/lapack/slarft.f
deleted file mode 100644
index 30b0668..0000000
--- a/eigen/lapack/slarft.f
+++ /dev/null
@@ -1,326 +0,0 @@
-*> \brief \b SLARFT
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download SLARFT + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slarft.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slarft.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarft.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE SLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, STOREV
-* INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
-* REAL T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> SLARFT forms the triangular factor T of a real block reflector H
-*> of order n, which is defined as a product of k elementary reflectors.
-*>
-*> If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular;
-*>
-*> If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular.
-*>
-*> If STOREV = 'C', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th column of the array V, and
-*>
-*> H = I - V * T * V**T
-*>
-*> If STOREV = 'R', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th row of the array V, and
-*>
-*> H = I - V**T * T * V
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Specifies the order in which the elementary reflectors are
-*> multiplied to form the block reflector:
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Specifies how the vectors which define the elementary
-*> reflectors are stored (see also Further Details):
-*> = 'C': columnwise
-*> = 'R': rowwise
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the block reflector H. N >= 0.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the triangular factor T (= the number of
-*> elementary reflectors). K >= 1.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is REAL array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,N) if STOREV = 'R'
-*> The matrix V. See further details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is REAL array, dimension (K)
-*> TAU(i) must contain the scalar factor of the elementary
-*> reflector H(i).
-*> \endverbatim
-*>
-*> \param[out] T
-*> \verbatim
-*> T is REAL array, dimension (LDT,K)
-*> The k by k triangular factor T of the block reflector.
-*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
-*> lower triangular. The rest of the array is not used.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup realOTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE SLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, STOREV
- INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
- REAL T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- REAL ONE, ZERO
- PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
-* ..
-* .. Local Scalars ..
- INTEGER I, J, PREVLASTV, LASTV
-* ..
-* .. External Subroutines ..
- EXTERNAL SGEMV, STRMV
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- EXTERNAL LSAME
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( N.EQ.0 )
- $ RETURN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
- PREVLASTV = N
- DO I = 1, K
- PREVLASTV = MAX( I, PREVLASTV )
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = 1, I
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * V( I , J )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)**T * V(i:j,i)
-*
- CALL SGEMV( 'Transpose', J-I, I-1, -TAU( I ),
- $ V( I+1, 1 ), LDV, V( I+1, I ), 1, ONE,
- $ T( 1, I ), 1 )
- ELSE
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * V( J , I )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**T
-*
- CALL SGEMV( 'No transpose', I-1, J-I, -TAU( I ),
- $ V( 1, I+1 ), LDV, V( I, I+1 ), LDV,
- $ ONE, T( 1, I ), 1 )
- END IF
-*
-* T(1:i-1,i) := T(1:i-1,1:i-1) * T(1:i-1,i)
-*
- CALL STRMV( 'Upper', 'No transpose', 'Non-unit', I-1, T,
- $ LDT, T( 1, I ), 1 )
- T( I, I ) = TAU( I )
- IF( I.GT.1 ) THEN
- PREVLASTV = MAX( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- END DO
- ELSE
- PREVLASTV = 1
- DO I = K, 1, -1
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = I, K
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( I.LT.K ) THEN
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * V( N-K+I , J )
- END DO
- 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)
-*
- CALL SGEMV( 'Transpose', N-K+I-J, K-I, -TAU( I ),
- $ V( J, I+1 ), LDV, V( J, I ), 1, ONE,
- $ T( I+1, I ), 1 )
- ELSE
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * V( J, N-K+I )
- END DO
- 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
-*
- CALL SGEMV( 'No transpose', K-I, N-K+I-J,
- $ -TAU( I ), V( I+1, J ), LDV, V( I, J ), LDV,
- $ ONE, T( I+1, I ), 1 )
- END IF
-*
-* T(i+1:k,i) := T(i+1:k,i+1:k) * T(i+1:k,i)
-*
- CALL STRMV( 'Lower', 'No transpose', 'Non-unit', K-I,
- $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 )
- IF( I.GT.1 ) THEN
- PREVLASTV = MIN( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- T( I, I ) = TAU( I )
- END IF
- END DO
- END IF
- RETURN
-*
-* End of SLARFT
-*
- END
diff --git a/eigen/lapack/svd.cpp b/eigen/lapack/svd.cpp
deleted file mode 100644
index 77b302b..0000000
--- a/eigen/lapack/svd.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-// This file is part of Eigen, a lightweight C++ template library
-// for linear algebra.
-//
-// Copyright (C) 2014 Gael Guennebaud <gael.guennebaud@inria.fr>
-//
-// This Source Code Form is subject to the terms of the Mozilla
-// Public License v. 2.0. If a copy of the MPL was not distributed
-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#include "lapack_common.h"
-#include <Eigen/SVD>
-
-// computes the singular values/vectors a general M-by-N matrix A using divide-and-conquer
-EIGEN_LAPACK_FUNC(gesdd,(char *jobz, int *m, int* n, Scalar* a, int *lda, RealScalar *s, Scalar *u, int *ldu, Scalar *vt, int *ldvt, Scalar* /*work*/, int* lwork,
- EIGEN_LAPACK_ARG_IF_COMPLEX(RealScalar */*rwork*/) int * /*iwork*/, int *info))
-{
- // TODO exploit the work buffer
- bool query_size = *lwork==-1;
- int diag_size = (std::min)(*m,*n);
-
- *info = 0;
- if(*jobz!='A' && *jobz!='S' && *jobz!='O' && *jobz!='N') *info = -1;
- else if(*m<0) *info = -2;
- else if(*n<0) *info = -3;
- else if(*lda<std::max(1,*m)) *info = -5;
- else if(*lda<std::max(1,*m)) *info = -8;
- else if(*ldu <1 || (*jobz=='A' && *ldu <*m)
- || (*jobz=='O' && *m<*n && *ldu<*m)) *info = -8;
- else if(*ldvt<1 || (*jobz=='A' && *ldvt<*n)
- || (*jobz=='S' && *ldvt<diag_size)
- || (*jobz=='O' && *m>=*n && *ldvt<*n)) *info = -10;
-
- if(*info!=0)
- {
- int e = -*info;
- return xerbla_(SCALAR_SUFFIX_UP"GESDD ", &e, 6);
- }
-
- if(query_size)
- {
- *lwork = 0;
- return 0;
- }
-
- if(*n==0 || *m==0)
- return 0;
-
- PlainMatrixType mat(*m,*n);
- mat = matrix(a,*m,*n,*lda);
-
- int option = *jobz=='A' ? ComputeFullU|ComputeFullV
- : *jobz=='S' ? ComputeThinU|ComputeThinV
- : *jobz=='O' ? ComputeThinU|ComputeThinV
- : 0;
-
- BDCSVD<PlainMatrixType> svd(mat,option);
-
- make_vector(s,diag_size) = svd.singularValues().head(diag_size);
-
- if(*jobz=='A')
- {
- matrix(u,*m,*m,*ldu) = svd.matrixU();
- matrix(vt,*n,*n,*ldvt) = svd.matrixV().adjoint();
- }
- else if(*jobz=='S')
- {
- matrix(u,*m,diag_size,*ldu) = svd.matrixU();
- matrix(vt,diag_size,*n,*ldvt) = svd.matrixV().adjoint();
- }
- else if(*jobz=='O' && *m>=*n)
- {
- matrix(a,*m,*n,*lda) = svd.matrixU();
- matrix(vt,*n,*n,*ldvt) = svd.matrixV().adjoint();
- }
- else if(*jobz=='O')
- {
- matrix(u,*m,*m,*ldu) = svd.matrixU();
- matrix(a,diag_size,*n,*lda) = svd.matrixV().adjoint();
- }
-
- return 0;
-}
-
-// computes the singular values/vectors a general M-by-N matrix A using two sided jacobi algorithm
-EIGEN_LAPACK_FUNC(gesvd,(char *jobu, char *jobv, int *m, int* n, Scalar* a, int *lda, RealScalar *s, Scalar *u, int *ldu, Scalar *vt, int *ldvt, Scalar* /*work*/, int* lwork,
- EIGEN_LAPACK_ARG_IF_COMPLEX(RealScalar */*rwork*/) int *info))
-{
- // TODO exploit the work buffer
- bool query_size = *lwork==-1;
- int diag_size = (std::min)(*m,*n);
-
- *info = 0;
- if( *jobu!='A' && *jobu!='S' && *jobu!='O' && *jobu!='N') *info = -1;
- else if((*jobv!='A' && *jobv!='S' && *jobv!='O' && *jobv!='N')
- || (*jobu=='O' && *jobv=='O')) *info = -2;
- else if(*m<0) *info = -3;
- else if(*n<0) *info = -4;
- else if(*lda<std::max(1,*m)) *info = -6;
- else if(*ldu <1 || ((*jobu=='A' || *jobu=='S') && *ldu<*m)) *info = -9;
- else if(*ldvt<1 || (*jobv=='A' && *ldvt<*n)
- || (*jobv=='S' && *ldvt<diag_size)) *info = -11;
-
- if(*info!=0)
- {
- int e = -*info;
- return xerbla_(SCALAR_SUFFIX_UP"GESVD ", &e, 6);
- }
-
- if(query_size)
- {
- *lwork = 0;
- return 0;
- }
-
- if(*n==0 || *m==0)
- return 0;
-
- PlainMatrixType mat(*m,*n);
- mat = matrix(a,*m,*n,*lda);
-
- int option = (*jobu=='A' ? ComputeFullU : *jobu=='S' || *jobu=='O' ? ComputeThinU : 0)
- | (*jobv=='A' ? ComputeFullV : *jobv=='S' || *jobv=='O' ? ComputeThinV : 0);
-
- JacobiSVD<PlainMatrixType> svd(mat,option);
-
- make_vector(s,diag_size) = svd.singularValues().head(diag_size);
- {
- if(*jobu=='A') matrix(u,*m,*m,*ldu) = svd.matrixU();
- else if(*jobu=='S') matrix(u,*m,diag_size,*ldu) = svd.matrixU();
- else if(*jobu=='O') matrix(a,*m,diag_size,*lda) = svd.matrixU();
- }
- {
- if(*jobv=='A') matrix(vt,*n,*n,*ldvt) = svd.matrixV().adjoint();
- else if(*jobv=='S') matrix(vt,diag_size,*n,*ldvt) = svd.matrixV().adjoint();
- else if(*jobv=='O') matrix(a,diag_size,*n,*lda) = svd.matrixV().adjoint();
- }
- return 0;
-}
diff --git a/eigen/lapack/zlacgv.f b/eigen/lapack/zlacgv.f
deleted file mode 100644
index 16c2e2e..0000000
--- a/eigen/lapack/zlacgv.f
+++ /dev/null
@@ -1,116 +0,0 @@
-*> \brief \b ZLACGV
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ZLACGV + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlacgv.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlacgv.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacgv.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE ZLACGV( N, X, INCX )
-*
-* .. Scalar Arguments ..
-* INTEGER INCX, N
-* ..
-* .. Array Arguments ..
-* COMPLEX*16 X( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ZLACGV conjugates a complex vector of length N.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The length of the vector X. N >= 0.
-*> \endverbatim
-*>
-*> \param[in,out] X
-*> \verbatim
-*> X is COMPLEX*16 array, dimension
-*> (1+(N-1)*abs(INCX))
-*> On entry, the vector of length N to be conjugated.
-*> On exit, X is overwritten with conjg(X).
-*> \endverbatim
-*>
-*> \param[in] INCX
-*> \verbatim
-*> INCX is INTEGER
-*> The spacing between successive elements of X.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE ZLACGV( N, X, INCX )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER INCX, N
-* ..
-* .. Array Arguments ..
- COMPLEX*16 X( * )
-* ..
-*
-* =====================================================================
-*
-* .. Local Scalars ..
- INTEGER I, IOFF
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC DCONJG
-* ..
-* .. Executable Statements ..
-*
- IF( INCX.EQ.1 ) THEN
- DO 10 I = 1, N
- X( I ) = DCONJG( X( I ) )
- 10 CONTINUE
- ELSE
- IOFF = 1
- IF( INCX.LT.0 )
- $ IOFF = 1 - ( N-1 )*INCX
- DO 20 I = 1, N
- X( IOFF ) = DCONJG( X( IOFF ) )
- IOFF = IOFF + INCX
- 20 CONTINUE
- END IF
- RETURN
-*
-* End of ZLACGV
-*
- END
diff --git a/eigen/lapack/zladiv.f b/eigen/lapack/zladiv.f
deleted file mode 100644
index aa71db1..0000000
--- a/eigen/lapack/zladiv.f
+++ /dev/null
@@ -1,97 +0,0 @@
-*> \brief \b ZLADIV
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ZLADIV + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zladiv.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zladiv.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zladiv.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* COMPLEX*16 FUNCTION ZLADIV( X, Y )
-*
-* .. Scalar Arguments ..
-* COMPLEX*16 X, Y
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ZLADIV := X / Y, where X and Y are complex. The computation of X / Y
-*> will not overflow on an intermediary step unless the results
-*> overflows.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] X
-*> \verbatim
-*> X is COMPLEX*16
-*> \endverbatim
-*>
-*> \param[in] Y
-*> \verbatim
-*> Y is COMPLEX*16
-*> The complex scalars X and Y.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-* =====================================================================
- COMPLEX*16 FUNCTION ZLADIV( X, Y )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- COMPLEX*16 X, Y
-* ..
-*
-* =====================================================================
-*
-* .. Local Scalars ..
- DOUBLE PRECISION ZI, ZR
-* ..
-* .. External Subroutines ..
- EXTERNAL DLADIV
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC DBLE, DCMPLX, DIMAG
-* ..
-* .. Executable Statements ..
-*
- CALL DLADIV( DBLE( X ), DIMAG( X ), DBLE( Y ), DIMAG( Y ), ZR,
- $ ZI )
- ZLADIV = DCMPLX( ZR, ZI )
-*
- RETURN
-*
-* End of ZLADIV
-*
- END
diff --git a/eigen/lapack/zlarf.f b/eigen/lapack/zlarf.f
deleted file mode 100644
index 53f314d..0000000
--- a/eigen/lapack/zlarf.f
+++ /dev/null
@@ -1,232 +0,0 @@
-*> \brief \b ZLARF
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ZLARF + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlarf.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlarf.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarf.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE ZLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER SIDE
-* INTEGER INCV, LDC, M, N
-* COMPLEX*16 TAU
-* ..
-* .. Array Arguments ..
-* COMPLEX*16 C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ZLARF applies a complex elementary reflector H to a complex M-by-N
-*> matrix C, from either the left or the right. H is represented in the
-*> form
-*>
-*> H = I - tau * v * v**H
-*>
-*> where tau is a complex scalar and v is a complex vector.
-*>
-*> If tau = 0, then H is taken to be the unit matrix.
-*>
-*> To apply H**H, supply conjg(tau) instead
-*> tau.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': form H * C
-*> = 'R': form C * H
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is COMPLEX*16 array, dimension
-*> (1 + (M-1)*abs(INCV)) if SIDE = 'L'
-*> or (1 + (N-1)*abs(INCV)) if SIDE = 'R'
-*> The vector v in the representation of H. V is not used if
-*> TAU = 0.
-*> \endverbatim
-*>
-*> \param[in] INCV
-*> \verbatim
-*> INCV is INTEGER
-*> The increment between elements of v. INCV <> 0.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is COMPLEX*16
-*> The value tau in the representation of H.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is COMPLEX*16 array, dimension (LDC,N)
-*> On entry, the M-by-N matrix C.
-*> On exit, C is overwritten by the matrix H * C if SIDE = 'L',
-*> or C * H if SIDE = 'R'.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is COMPLEX*16 array, dimension
-*> (N) if SIDE = 'L'
-*> or (M) if SIDE = 'R'
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE ZLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER SIDE
- INTEGER INCV, LDC, M, N
- COMPLEX*16 TAU
-* ..
-* .. Array Arguments ..
- COMPLEX*16 C( LDC, * ), V( * ), WORK( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX*16 ONE, ZERO
- PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ),
- $ ZERO = ( 0.0D+0, 0.0D+0 ) )
-* ..
-* .. Local Scalars ..
- LOGICAL APPLYLEFT
- INTEGER I, LASTV, LASTC
-* ..
-* .. External Subroutines ..
- EXTERNAL ZGEMV, ZGERC
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILAZLR, ILAZLC
- EXTERNAL LSAME, ILAZLR, ILAZLC
-* ..
-* .. Executable Statements ..
-*
- APPLYLEFT = LSAME( SIDE, 'L' )
- LASTV = 0
- LASTC = 0
- IF( TAU.NE.ZERO ) THEN
-* Set up variables for scanning V. LASTV begins pointing to the end
-* of V.
- IF( APPLYLEFT ) THEN
- LASTV = M
- ELSE
- LASTV = N
- END IF
- IF( INCV.GT.0 ) THEN
- I = 1 + (LASTV-1) * INCV
- ELSE
- I = 1
- END IF
-* Look for the last non-zero row in V.
- DO WHILE( LASTV.GT.0 .AND. V( I ).EQ.ZERO )
- LASTV = LASTV - 1
- I = I - INCV
- END DO
- IF( APPLYLEFT ) THEN
-* Scan for the last non-zero column in C(1:lastv,:).
- LASTC = ILAZLC(LASTV, N, C, LDC)
- ELSE
-* Scan for the last non-zero row in C(:,1:lastv).
- LASTC = ILAZLR(M, LASTV, C, LDC)
- END IF
- END IF
-* Note that lastc.eq.0 renders the BLAS operations null; no special
-* case is needed at this level.
- IF( APPLYLEFT ) THEN
-*
-* Form H * C
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastv,1:lastc)**H * v(1:lastv,1)
-*
- CALL ZGEMV( 'Conjugate transpose', LASTV, LASTC, ONE,
- $ C, LDC, V, INCV, ZERO, WORK, 1 )
-*
-* C(1:lastv,1:lastc) := C(...) - v(1:lastv,1) * w(1:lastc,1)**H
-*
- CALL ZGERC( LASTV, LASTC, -TAU, V, INCV, WORK, 1, C, LDC )
- END IF
- ELSE
-*
-* Form C * H
-*
- IF( LASTV.GT.0 ) THEN
-*
-* w(1:lastc,1) := C(1:lastc,1:lastv) * v(1:lastv,1)
-*
- CALL ZGEMV( 'No transpose', LASTC, LASTV, ONE, C, LDC,
- $ V, INCV, ZERO, WORK, 1 )
-*
-* C(1:lastc,1:lastv) := C(...) - w(1:lastc,1) * v(1:lastv,1)**H
-*
- CALL ZGERC( LASTC, LASTV, -TAU, WORK, 1, V, INCV, C, LDC )
- END IF
- END IF
- RETURN
-*
-* End of ZLARF
-*
- END
diff --git a/eigen/lapack/zlarfb.f b/eigen/lapack/zlarfb.f
deleted file mode 100644
index 30fc4b9..0000000
--- a/eigen/lapack/zlarfb.f
+++ /dev/null
@@ -1,774 +0,0 @@
-*> \brief \b ZLARFB
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ZLARFB + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlarfb.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlarfb.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfb.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE ZLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
-* T, LDT, C, LDC, WORK, LDWORK )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, SIDE, STOREV, TRANS
-* INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
-* COMPLEX*16 C( LDC, * ), T( LDT, * ), V( LDV, * ),
-* $ WORK( LDWORK, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ZLARFB applies a complex block reflector H or its transpose H**H to a
-*> complex M-by-N matrix C, from either the left or the right.
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] SIDE
-*> \verbatim
-*> SIDE is CHARACTER*1
-*> = 'L': apply H or H**H from the Left
-*> = 'R': apply H or H**H from the Right
-*> \endverbatim
-*>
-*> \param[in] TRANS
-*> \verbatim
-*> TRANS is CHARACTER*1
-*> = 'N': apply H (No transpose)
-*> = 'C': apply H**H (Conjugate transpose)
-*> \endverbatim
-*>
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Indicates how H is formed from a product of elementary
-*> reflectors
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Indicates how the vectors which define the elementary
-*> reflectors are stored:
-*> = 'C': Columnwise
-*> = 'R': Rowwise
-*> \endverbatim
-*>
-*> \param[in] M
-*> \verbatim
-*> M is INTEGER
-*> The number of rows of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The number of columns of the matrix C.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the matrix T (= the number of elementary
-*> reflectors whose product defines the block reflector).
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is COMPLEX*16 array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,M) if STOREV = 'R' and SIDE = 'L'
-*> (LDV,N) if STOREV = 'R' and SIDE = 'R'
-*> See Further Details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
-*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
-*> if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] T
-*> \verbatim
-*> T is COMPLEX*16 array, dimension (LDT,K)
-*> The triangular K-by-K matrix T in the representation of the
-*> block reflector.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*>
-*> \param[in,out] C
-*> \verbatim
-*> C is COMPLEX*16 array, dimension (LDC,N)
-*> On entry, the M-by-N matrix C.
-*> On exit, C is overwritten by H*C or H**H*C or C*H or C*H**H.
-*> \endverbatim
-*>
-*> \param[in] LDC
-*> \verbatim
-*> LDC is INTEGER
-*> The leading dimension of the array C. LDC >= max(1,M).
-*> \endverbatim
-*>
-*> \param[out] WORK
-*> \verbatim
-*> WORK is COMPLEX*16 array, dimension (LDWORK,K)
-*> \endverbatim
-*>
-*> \param[in] LDWORK
-*> \verbatim
-*> LDWORK is INTEGER
-*> The leading dimension of the array WORK.
-*> If SIDE = 'L', LDWORK >= max(1,N);
-*> if SIDE = 'R', LDWORK >= max(1,M).
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored; the corresponding
-*> array elements are modified but restored on exit. The rest of the
-*> array is not used.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE ZLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
- $ T, LDT, C, LDC, WORK, LDWORK )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, SIDE, STOREV, TRANS
- INTEGER K, LDC, LDT, LDV, LDWORK, M, N
-* ..
-* .. Array Arguments ..
- COMPLEX*16 C( LDC, * ), T( LDT, * ), V( LDV, * ),
- $ WORK( LDWORK, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX*16 ONE
- PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ) )
-* ..
-* .. Local Scalars ..
- CHARACTER TRANST
- INTEGER I, J, LASTV, LASTC
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- INTEGER ILAZLR, ILAZLC
- EXTERNAL LSAME, ILAZLR, ILAZLC
-* ..
-* .. External Subroutines ..
- EXTERNAL ZCOPY, ZGEMM, ZLACGV, ZTRMM
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC DCONJG
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( M.LE.0 .OR. N.LE.0 )
- $ RETURN
-*
- IF( LSAME( TRANS, 'N' ) ) THEN
- TRANST = 'C'
- ELSE
- TRANST = 'N'
- END IF
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 ) (first K rows)
-* ( V2 )
-* where V1 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILAZLR( M, K, V, LDV ) )
- LASTC = ILAZLC( LASTV, N, C, LDC )
-*
-* W := C**H * V = (C1**H * V1 + C2**H * V2) (stored in WORK)
-*
-* W := C1**H
-*
- DO 10 J = 1, K
- CALL ZCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- CALL ZLACGV( LASTC, WORK( 1, J ), 1 )
- 10 CONTINUE
-*
-* W := W * V1
-*
- CALL ZTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**H *V2
-*
- CALL ZGEMM( 'Conjugate transpose', 'No transpose',
- $ LASTC, K, LASTV-K, ONE, C( K+1, 1 ), LDC,
- $ V( K+1, 1 ), LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL ZTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**H
-*
- IF( M.GT.K ) THEN
-*
-* C2 := C2 - V2 * W**H
-*
- CALL ZGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTV-K, LASTC, K,
- $ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK,
- $ ONE, C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1**H
-*
- CALL ZTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**H
-*
- DO 30 J = 1, K
- DO 20 I = 1, LASTC
- C( J, I ) = C( J, I ) - DCONJG( WORK( I, J ) )
- 20 CONTINUE
- 30 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILAZLR( N, K, V, LDV ) )
- LASTC = ILAZLR( M, LASTV, C, LDC )
-*
-* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
-*
-* W := C1
-*
- DO 40 J = 1, K
- CALL ZCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 40 CONTINUE
-*
-* W := W * V1
-*
- CALL ZTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2
-*
- CALL ZGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL ZTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2**H
-*
- CALL ZGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV,
- $ ONE, C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1**H
-*
- CALL ZTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 60 J = 1, K
- DO 50 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 50 CONTINUE
- 60 CONTINUE
- END IF
-*
- ELSE
-*
-* Let V = ( V1 )
-* ( V2 ) (last K rows)
-* where V2 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILAZLR( M, K, V, LDV ) )
- LASTC = ILAZLC( LASTV, N, C, LDC )
-*
-* W := C**H * V = (C1**H * V1 + C2**H * V2) (stored in WORK)
-*
-* W := C2**H
-*
- DO 70 J = 1, K
- CALL ZCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- CALL ZLACGV( LASTC, WORK( 1, J ), 1 )
- 70 CONTINUE
-*
-* W := W * V2
-*
- CALL ZTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**H*V1
-*
- CALL ZGEMM( 'Conjugate transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C, LDC, V, LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL ZTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V * W**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1 * W**H
-*
- CALL ZGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTV-K, LASTC, K,
- $ -ONE, V, LDV, WORK, LDWORK,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**H
-*
- CALL ZTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**H
-*
- DO 90 J = 1, K
- DO 80 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) -
- $ DCONJG( WORK( I, J ) )
- 80 CONTINUE
- 90 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILAZLR( N, K, V, LDV ) )
- LASTC = ILAZLR( M, LASTV, C, LDC )
-*
-* W := C * V = (C1*V1 + C2*V2) (stored in WORK)
-*
-* W := C2
-*
- DO 100 J = 1, K
- CALL ZCOPY( LASTC, C( 1, LASTV-K+J ), 1,
- $ WORK( 1, J ), 1 )
- 100 CONTINUE
-*
-* W := W * V2
-*
- CALL ZTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1
-*
- CALL ZGEMM( 'No transpose', 'No transpose',
- $ LASTC, K, LASTV-K,
- $ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL ZTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1**H
-*
- CALL ZGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2**H
-*
- CALL ZTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W
-*
- DO 120 J = 1, K
- DO 110 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J )
- $ - WORK( I, J )
- 110 CONTINUE
- 120 CONTINUE
- END IF
- END IF
-*
- ELSE IF( LSAME( STOREV, 'R' ) ) THEN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
-*
-* Let V = ( V1 V2 ) (V1: first K columns)
-* where V1 is unit upper triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILAZLC( K, M, V, LDV ) )
- LASTC = ILAZLC( LASTV, N, C, LDC )
-*
-* W := C**H * V**H = (C1**H * V1**H + C2**H * V2**H) (stored in WORK)
-*
-* W := C1**H
-*
- DO 130 J = 1, K
- CALL ZCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 )
- CALL ZLACGV( LASTC, WORK( 1, J ), 1 )
- 130 CONTINUE
-*
-* W := W * V1**H
-*
- CALL ZTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2**H*V2**H
-*
- CALL ZGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTC, K, LASTV-K,
- $ ONE, C( K+1, 1 ), LDC, V( 1, K+1 ), LDV,
- $ ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL ZTRMM( 'Right', 'Upper', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**H * W**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - V2**H * W**H
-*
- CALL ZGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTV-K, LASTC, K,
- $ -ONE, V( 1, K+1 ), LDV, WORK, LDWORK,
- $ ONE, C( K+1, 1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL ZTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W**H
-*
- DO 150 J = 1, K
- DO 140 I = 1, LASTC
- C( J, I ) = C( J, I ) - DCONJG( WORK( I, J ) )
- 140 CONTINUE
- 150 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILAZLC( K, N, V, LDV ) )
- LASTC = ILAZLR( M, LASTV, C, LDC )
-*
-* W := C * V**H = (C1*V1**H + C2*V2**H) (stored in WORK)
-*
-* W := C1
-*
- DO 160 J = 1, K
- CALL ZCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 )
- 160 CONTINUE
-*
-* W := W * V1**H
-*
- CALL ZTRMM( 'Right', 'Upper', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V, LDV, WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C2 * V2**H
-*
- CALL ZGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, K, LASTV-K, ONE, C( 1, K+1 ), LDC,
- $ V( 1, K+1 ), LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL ZTRMM( 'Right', 'Upper', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C2 := C2 - W * V2
-*
- CALL ZGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K,
- $ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV,
- $ ONE, C( 1, K+1 ), LDC )
- END IF
-*
-* W := W * V1
-*
- CALL ZTRMM( 'Right', 'Upper', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V, LDV, WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 180 J = 1, K
- DO 170 I = 1, LASTC
- C( I, J ) = C( I, J ) - WORK( I, J )
- 170 CONTINUE
- 180 CONTINUE
-*
- END IF
-*
- ELSE
-*
-* Let V = ( V1 V2 ) (V2: last K columns)
-* where V2 is unit lower triangular.
-*
- IF( LSAME( SIDE, 'L' ) ) THEN
-*
-* Form H * C or H**H * C where C = ( C1 )
-* ( C2 )
-*
- LASTV = MAX( K, ILAZLC( K, M, V, LDV ) )
- LASTC = ILAZLC( LASTV, N, C, LDC )
-*
-* W := C**H * V**H = (C1**H * V1**H + C2**H * V2**H) (stored in WORK)
-*
-* W := C2**H
-*
- DO 190 J = 1, K
- CALL ZCOPY( LASTC, C( LASTV-K+J, 1 ), LDC,
- $ WORK( 1, J ), 1 )
- CALL ZLACGV( LASTC, WORK( 1, J ), 1 )
- 190 CONTINUE
-*
-* W := W * V2**H
-*
- CALL ZTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1**H * V1**H
-*
- CALL ZGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTC, K, LASTV-K,
- $ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK )
- END IF
-*
-* W := W * T**H or W * T
-*
- CALL ZTRMM( 'Right', 'Lower', TRANST, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - V**H * W**H
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - V1**H * W**H
-*
- CALL ZGEMM( 'Conjugate transpose',
- $ 'Conjugate transpose', LASTV-K, LASTC, K,
- $ -ONE, V, LDV, WORK, LDWORK, ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL ZTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C2 := C2 - W**H
-*
- DO 210 J = 1, K
- DO 200 I = 1, LASTC
- C( LASTV-K+J, I ) = C( LASTV-K+J, I ) -
- $ DCONJG( WORK( I, J ) )
- 200 CONTINUE
- 210 CONTINUE
-*
- ELSE IF( LSAME( SIDE, 'R' ) ) THEN
-*
-* Form C * H or C * H**H where C = ( C1 C2 )
-*
- LASTV = MAX( K, ILAZLC( K, N, V, LDV ) )
- LASTC = ILAZLR( M, LASTV, C, LDC )
-*
-* W := C * V**H = (C1*V1**H + C2*V2**H) (stored in WORK)
-*
-* W := C2
-*
- DO 220 J = 1, K
- CALL ZCOPY( LASTC, C( 1, LASTV-K+J ), 1,
- $ WORK( 1, J ), 1 )
- 220 CONTINUE
-*
-* W := W * V2**H
-*
- CALL ZTRMM( 'Right', 'Lower', 'Conjugate transpose',
- $ 'Unit', LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
- IF( LASTV.GT.K ) THEN
-*
-* W := W + C1 * V1**H
-*
- CALL ZGEMM( 'No transpose', 'Conjugate transpose',
- $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, ONE,
- $ WORK, LDWORK )
- END IF
-*
-* W := W * T or W * T**H
-*
- CALL ZTRMM( 'Right', 'Lower', TRANS, 'Non-unit',
- $ LASTC, K, ONE, T, LDT, WORK, LDWORK )
-*
-* C := C - W * V
-*
- IF( LASTV.GT.K ) THEN
-*
-* C1 := C1 - W * V1
-*
- CALL ZGEMM( 'No transpose', 'No transpose',
- $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV,
- $ ONE, C, LDC )
- END IF
-*
-* W := W * V2
-*
- CALL ZTRMM( 'Right', 'Lower', 'No transpose', 'Unit',
- $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV,
- $ WORK, LDWORK )
-*
-* C1 := C1 - W
-*
- DO 240 J = 1, K
- DO 230 I = 1, LASTC
- C( I, LASTV-K+J ) = C( I, LASTV-K+J )
- $ - WORK( I, J )
- 230 CONTINUE
- 240 CONTINUE
-*
- END IF
-*
- END IF
- END IF
-*
- RETURN
-*
-* End of ZLARFB
-*
- END
diff --git a/eigen/lapack/zlarfg.f b/eigen/lapack/zlarfg.f
deleted file mode 100644
index a90ae9f..0000000
--- a/eigen/lapack/zlarfg.f
+++ /dev/null
@@ -1,203 +0,0 @@
-*> \brief \b ZLARFG
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ZLARFG + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlarfg.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlarfg.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfg.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE ZLARFG( N, ALPHA, X, INCX, TAU )
-*
-* .. Scalar Arguments ..
-* INTEGER INCX, N
-* COMPLEX*16 ALPHA, TAU
-* ..
-* .. Array Arguments ..
-* COMPLEX*16 X( * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ZLARFG generates a complex elementary reflector H of order n, such
-*> that
-*>
-*> H**H * ( alpha ) = ( beta ), H**H * H = I.
-*> ( x ) ( 0 )
-*>
-*> where alpha and beta are scalars, with beta real, and x is an
-*> (n-1)-element complex vector. H is represented in the form
-*>
-*> H = I - tau * ( 1 ) * ( 1 v**H ) ,
-*> ( v )
-*>
-*> where tau is a complex scalar and v is a complex (n-1)-element
-*> vector. Note that H is not hermitian.
-*>
-*> If the elements of x are all zero and alpha is real, then tau = 0
-*> and H is taken to be the unit matrix.
-*>
-*> Otherwise 1 <= real(tau) <= 2 and abs(tau-1) <= 1 .
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the elementary reflector.
-*> \endverbatim
-*>
-*> \param[in,out] ALPHA
-*> \verbatim
-*> ALPHA is COMPLEX*16
-*> On entry, the value alpha.
-*> On exit, it is overwritten with the value beta.
-*> \endverbatim
-*>
-*> \param[in,out] X
-*> \verbatim
-*> X is COMPLEX*16 array, dimension
-*> (1+(N-2)*abs(INCX))
-*> On entry, the vector x.
-*> On exit, it is overwritten with the vector v.
-*> \endverbatim
-*>
-*> \param[in] INCX
-*> \verbatim
-*> INCX is INTEGER
-*> The increment between elements of X. INCX > 0.
-*> \endverbatim
-*>
-*> \param[out] TAU
-*> \verbatim
-*> TAU is COMPLEX*16
-*> The value tau.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
-*
-*> \ingroup complex16OTHERauxiliary
-*
-* =====================================================================
- SUBROUTINE ZLARFG( N, ALPHA, X, INCX, TAU )
-*
-* -- LAPACK auxiliary routine (version 3.4.0) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
-*
-* .. Scalar Arguments ..
- INTEGER INCX, N
- COMPLEX*16 ALPHA, TAU
-* ..
-* .. Array Arguments ..
- COMPLEX*16 X( * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ONE, ZERO
- PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
-* ..
-* .. Local Scalars ..
- INTEGER J, KNT
- DOUBLE PRECISION ALPHI, ALPHR, BETA, RSAFMN, SAFMIN, XNORM
-* ..
-* .. External Functions ..
- DOUBLE PRECISION DLAMCH, DLAPY3, DZNRM2
- COMPLEX*16 ZLADIV
- EXTERNAL DLAMCH, DLAPY3, DZNRM2, ZLADIV
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, DBLE, DCMPLX, DIMAG, SIGN
-* ..
-* .. External Subroutines ..
- EXTERNAL ZDSCAL, ZSCAL
-* ..
-* .. Executable Statements ..
-*
- IF( N.LE.0 ) THEN
- TAU = ZERO
- RETURN
- END IF
-*
- XNORM = DZNRM2( N-1, X, INCX )
- ALPHR = DBLE( ALPHA )
- ALPHI = DIMAG( ALPHA )
-*
- IF( XNORM.EQ.ZERO .AND. ALPHI.EQ.ZERO ) THEN
-*
-* H = I
-*
- TAU = ZERO
- ELSE
-*
-* general case
-*
- BETA = -SIGN( DLAPY3( ALPHR, ALPHI, XNORM ), ALPHR )
- SAFMIN = DLAMCH( 'S' ) / DLAMCH( 'E' )
- RSAFMN = ONE / SAFMIN
-*
- KNT = 0
- IF( ABS( BETA ).LT.SAFMIN ) THEN
-*
-* XNORM, BETA may be inaccurate; scale X and recompute them
-*
- 10 CONTINUE
- KNT = KNT + 1
- CALL ZDSCAL( N-1, RSAFMN, X, INCX )
- BETA = BETA*RSAFMN
- ALPHI = ALPHI*RSAFMN
- ALPHR = ALPHR*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
- $ GO TO 10
-*
-* New BETA is at most 1, at least SAFMIN
-*
- XNORM = DZNRM2( N-1, X, INCX )
- ALPHA = DCMPLX( ALPHR, ALPHI )
- BETA = -SIGN( DLAPY3( ALPHR, ALPHI, XNORM ), ALPHR )
- END IF
- TAU = DCMPLX( ( BETA-ALPHR ) / BETA, -ALPHI / BETA )
- ALPHA = ZLADIV( DCMPLX( ONE ), ALPHA-BETA )
- CALL ZSCAL( N-1, ALPHA, X, INCX )
-*
-* If ALPHA is subnormal, it may lose relative accuracy
-*
- DO 20 J = 1, KNT
- BETA = BETA*SAFMIN
- 20 CONTINUE
- ALPHA = BETA
- END IF
-*
- RETURN
-*
-* End of ZLARFG
-*
- END
diff --git a/eigen/lapack/zlarft.f b/eigen/lapack/zlarft.f
deleted file mode 100644
index 6a6151f..0000000
--- a/eigen/lapack/zlarft.f
+++ /dev/null
@@ -1,327 +0,0 @@
-*> \brief \b ZLARFT
-*
-* =========== DOCUMENTATION ===========
-*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
-*
-*> \htmlonly
-*> Download ZLARFT + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlarft.f">
-*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlarft.f">
-*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarft.f">
-*> [TXT]</a>
-*> \endhtmlonly
-*
-* Definition:
-* ===========
-*
-* SUBROUTINE ZLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* .. Scalar Arguments ..
-* CHARACTER DIRECT, STOREV
-* INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
-* COMPLEX*16 T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-*
-*> \par Purpose:
-* =============
-*>
-*> \verbatim
-*>
-*> ZLARFT forms the triangular factor T of a complex block reflector H
-*> of order n, which is defined as a product of k elementary reflectors.
-*>
-*> If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular;
-*>
-*> If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular.
-*>
-*> If STOREV = 'C', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th column of the array V, and
-*>
-*> H = I - V * T * V**H
-*>
-*> If STOREV = 'R', the vector which defines the elementary reflector
-*> H(i) is stored in the i-th row of the array V, and
-*>
-*> H = I - V**H * T * V
-*> \endverbatim
-*
-* Arguments:
-* ==========
-*
-*> \param[in] DIRECT
-*> \verbatim
-*> DIRECT is CHARACTER*1
-*> Specifies the order in which the elementary reflectors are
-*> multiplied to form the block reflector:
-*> = 'F': H = H(1) H(2) . . . H(k) (Forward)
-*> = 'B': H = H(k) . . . H(2) H(1) (Backward)
-*> \endverbatim
-*>
-*> \param[in] STOREV
-*> \verbatim
-*> STOREV is CHARACTER*1
-*> Specifies how the vectors which define the elementary
-*> reflectors are stored (see also Further Details):
-*> = 'C': columnwise
-*> = 'R': rowwise
-*> \endverbatim
-*>
-*> \param[in] N
-*> \verbatim
-*> N is INTEGER
-*> The order of the block reflector H. N >= 0.
-*> \endverbatim
-*>
-*> \param[in] K
-*> \verbatim
-*> K is INTEGER
-*> The order of the triangular factor T (= the number of
-*> elementary reflectors). K >= 1.
-*> \endverbatim
-*>
-*> \param[in] V
-*> \verbatim
-*> V is COMPLEX*16 array, dimension
-*> (LDV,K) if STOREV = 'C'
-*> (LDV,N) if STOREV = 'R'
-*> The matrix V. See further details.
-*> \endverbatim
-*>
-*> \param[in] LDV
-*> \verbatim
-*> LDV is INTEGER
-*> The leading dimension of the array V.
-*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
-*> \endverbatim
-*>
-*> \param[in] TAU
-*> \verbatim
-*> TAU is COMPLEX*16 array, dimension (K)
-*> TAU(i) must contain the scalar factor of the elementary
-*> reflector H(i).
-*> \endverbatim
-*>
-*> \param[out] T
-*> \verbatim
-*> T is COMPLEX*16 array, dimension (LDT,K)
-*> The k by k triangular factor T of the block reflector.
-*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
-*> lower triangular. The rest of the array is not used.
-*> \endverbatim
-*>
-*> \param[in] LDT
-*> \verbatim
-*> LDT is INTEGER
-*> The leading dimension of the array T. LDT >= K.
-*> \endverbatim
-*
-* Authors:
-* ========
-*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date April 2012
-*
-*> \ingroup complex16OTHERauxiliary
-*
-*> \par Further Details:
-* =====================
-*>
-*> \verbatim
-*>
-*> The shape of the matrix V and the storage of the vectors which define
-*> the H(i) is best illustrated by the following example with n = 5 and
-*> k = 3. The elements equal to 1 are not stored.
-*>
-*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R':
-*>
-*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 )
-*> ( v1 1 ) ( 1 v2 v2 v2 )
-*> ( v1 v2 1 ) ( 1 v3 v3 )
-*> ( v1 v2 v3 )
-*> ( v1 v2 v3 )
-*>
-*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R':
-*>
-*> V = ( v1 v2 v3 ) V = ( v1 v1 1 )
-*> ( v1 v2 v3 ) ( v2 v2 v2 1 )
-*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 )
-*> ( 1 v3 )
-*> ( 1 )
-*> \endverbatim
-*>
-* =====================================================================
- SUBROUTINE ZLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
-*
-* -- LAPACK auxiliary routine (version 3.4.1) --
-* -- LAPACK is a software package provided by Univ. of Tennessee, --
-* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* April 2012
-*
-* .. Scalar Arguments ..
- CHARACTER DIRECT, STOREV
- INTEGER K, LDT, LDV, N
-* ..
-* .. Array Arguments ..
- COMPLEX*16 T( LDT, * ), TAU( * ), V( LDV, * )
-* ..
-*
-* =====================================================================
-*
-* .. Parameters ..
- COMPLEX*16 ONE, ZERO
- PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ),
- $ ZERO = ( 0.0D+0, 0.0D+0 ) )
-* ..
-* .. Local Scalars ..
- INTEGER I, J, PREVLASTV, LASTV
-* ..
-* .. External Subroutines ..
- EXTERNAL ZGEMV, ZLACGV, ZTRMV
-* ..
-* .. External Functions ..
- LOGICAL LSAME
- EXTERNAL LSAME
-* ..
-* .. Executable Statements ..
-*
-* Quick return if possible
-*
- IF( N.EQ.0 )
- $ RETURN
-*
- IF( LSAME( DIRECT, 'F' ) ) THEN
- PREVLASTV = N
- DO I = 1, K
- PREVLASTV = MAX( PREVLASTV, I )
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = 1, I
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * CONJG( V( I , J ) )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)**H * V(i:j,i)
-*
- CALL ZGEMV( 'Conjugate transpose', J-I, I-1,
- $ -TAU( I ), V( I+1, 1 ), LDV,
- $ V( I+1, I ), 1, ONE, T( 1, I ), 1 )
- ELSE
-* Skip any trailing zeros.
- DO LASTV = N, I+1, -1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = 1, I-1
- T( J, I ) = -TAU( I ) * V( J , I )
- END DO
- J = MIN( LASTV, PREVLASTV )
-*
-* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**H
-*
- CALL ZGEMM( 'N', 'C', I-1, 1, J-I, -TAU( I ),
- $ V( 1, I+1 ), LDV, V( I, I+1 ), LDV,
- $ ONE, T( 1, I ), LDT )
- END IF
-*
-* T(1:i-1,i) := T(1:i-1,1:i-1) * T(1:i-1,i)
-*
- CALL ZTRMV( 'Upper', 'No transpose', 'Non-unit', I-1, T,
- $ LDT, T( 1, I ), 1 )
- T( I, I ) = TAU( I )
- IF( I.GT.1 ) THEN
- PREVLASTV = MAX( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- END DO
- ELSE
- PREVLASTV = 1
- DO I = K, 1, -1
- IF( TAU( I ).EQ.ZERO ) THEN
-*
-* H(i) = I
-*
- DO J = I, K
- T( J, I ) = ZERO
- END DO
- ELSE
-*
-* general case
-*
- IF( I.LT.K ) THEN
- IF( LSAME( STOREV, 'C' ) ) THEN
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( LASTV, I ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * CONJG( V( N-K+I , J ) )
- END DO
- J = MAX( LASTV, PREVLASTV )
-*
-* T(i+1:k,i) = -tau(i) * V(j:n-k+i,i+1:k)**H * V(j:n-k+i,i)
-*
- CALL ZGEMV( 'Conjugate transpose', N-K+I-J, K-I,
- $ -TAU( I ), V( J, I+1 ), LDV, V( J, I ),
- $ 1, ONE, T( I+1, I ), 1 )
- ELSE
-* Skip any leading zeros.
- DO LASTV = 1, I-1
- IF( V( I, LASTV ).NE.ZERO ) EXIT
- END DO
- DO J = I+1, K
- T( J, I ) = -TAU( I ) * V( J, N-K+I )
- END DO
- 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)**H
-*
- CALL ZGEMM( 'N', 'C', K-I, 1, N-K+I-J, -TAU( I ),
- $ V( I+1, J ), LDV, V( I, J ), LDV,
- $ ONE, T( I+1, I ), LDT )
- END IF
-*
-* T(i+1:k,i) := T(i+1:k,i+1:k) * T(i+1:k,i)
-*
- CALL ZTRMV( 'Lower', 'No transpose', 'Non-unit', K-I,
- $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 )
- IF( I.GT.1 ) THEN
- PREVLASTV = MIN( PREVLASTV, LASTV )
- ELSE
- PREVLASTV = LASTV
- END IF
- END IF
- T( I, I ) = TAU( I )
- END IF
- END DO
- END IF
- RETURN
-*
-* End of ZLARFT
-*
- END