// LAPACK++ (V. 1.1) // (C) 1992-1996 All Rights Reserved. #ifdef HAVE_CONFIG_H # include #endif #include "arch.h" #include "lapack.h" #include "f2c.h" #include "lapackpp.h" #ifdef _LA_TRIDIAG_MAT_DOUBLE_H_ void LaGenerateMatDouble(LaTridiagMatDouble &A) { // the lapack dtimmg() routine assumes that the three // diagonals of A are stored contiguously. This is not // a typical requirement of tridiagonal matrices, so // we first create a tmp vector hold the contiguous values // to be initalized, and then copy this back into A. integer N = A.size(); LaVectorDouble tmp(3*N-2); integer iflag = -12, ku =0, kl= 0; integer m = 3*N-2, n=1; F77NAME(dtimmg)(&iflag, &m, &n, &tmp(0), &m, &kl, &ku); A.diag(-1) = tmp(LaIndex(0,N-2)); A.diag(0) = tmp(LaIndex(N-1, 2*N-2)); A.diag(1) = tmp(LaIndex(2*N-1, 3*N-3)); } #endif #ifdef _LA_SYMM_TRIDIAG_MAT_DOUBLE_H_ void LaGenerateMatDouble(LaSymmTridiagMatDouble &A) { // the lapack dtimmg() routine assumes that the // diagonals of A are stored contiguously. // We first create a tmp vector hold the contiguous values // to be initalized, and then copy this back into A. integer N = A.size(); LaVectorDouble tmp(2*N-1); integer iflag = -13, ku =0, kl= 0; integer m = 2*N-1, n=1; F77NAME(dtimmg)(&iflag, &m, &n, &tmp(0), &m, &kl, &ku); //std::cout << tmp << std::endl; //std::cout << tmp(LaIndex(0,N-2)) << std::endl; A.diag(-1) = tmp(LaIndex(0,N-2)); A.diag(0) = tmp(LaIndex(N-1, 2*N-2)); } #endif #ifdef _LA_GEN_MAT_DOUBLE_H_ void LaGenerateMatDouble(LaGenMatDouble &A) { integer m = A.size(0), n = A.size(1), lda = A.gdim(0); integer iflag = 0, ku = 0, kl = 0; F77NAME(dtimmg)(&iflag, &m, &n, &A(0,0), &lda, &ku, &kl); } #if !(defined(OS_WIN32) || LAPACK_OS_WIN32) extern "C" double drand48(void) throw (); #endif LaGenMatDouble& LaRandUniform(LaGenMatDouble &A, double low, double high) { int M = A.size(0), N = A.size(1); int i,j; double scale = high-low; for (j=0; j