Go to the documentation of this file.00001
00002
00003
00004
00005 inline long zgbmatrix::zgbsv(zgematrix& mat)
00006 {VERBOSE_REPORT;
00007 #ifdef CPPL_DEBUG
00008 if(m!=n || n!=mat.m){
00009 ERROR_REPORT;
00010 std::cerr << "These matrix and vector cannot be solved." << std::endl
00011 << "Your input was (" << m << "x" << n << ") and (" << mat.m << "x" << mat.n << ")." << std::endl;
00012 exit(1);
00013 }
00014 #endif//CPPL_DEBUG
00015
00016 zgbmatrix newmat(m,n,kl,ku+kl);
00017 for(long i=0; i<m; i++){ for(long j=std::max(long(0),i-kl); j<std::min(n,i+ku+1); j++){
00018 newmat(i,j) =operator()(i,j);
00019 }}
00020
00021 long NRHS(mat.n), LDAB(2*kl+ku+1),
00022 *IPIV(new long[n]), LDB(mat.m), INFO(1);
00023 zgbsv_(n, kl, ku, NRHS, newmat.array, LDAB, IPIV, mat.array, LDB, INFO);
00024 delete [] IPIV;
00025
00026 swap(*this,newmat);
00027
00028 if(INFO!=0){
00029 WARNING_REPORT;
00030 std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
00031 }
00032 return INFO;
00033 }
00034
00035
00036
00037
00038
00039 inline long zgbmatrix::zgbsv(zcovector& vec)
00040 {VERBOSE_REPORT;
00041 #ifdef CPPL_DEBUG
00042 if(m!=n || n!=vec.l){
00043 ERROR_REPORT;
00044 std::cerr << "These matrix and vector cannot be solved." << std::endl
00045 << "Your input was (" << m << "x" << n << ") and (" << vec.l << ")." << std::endl;
00046 exit(1);
00047 }
00048 #endif//CPPL_DEBUG
00049
00050 zgbmatrix newmat(m,n,kl,ku+kl);
00051 for(long i=0; i<m; i++){ for(long j=std::max(long(0),i-kl); j<std::min(n,i+ku+1); j++){
00052 newmat(i,j) =operator()(i,j);
00053 }}
00054
00055 long NRHS(1), LDAB(2*kl+ku+1),
00056 *IPIV(new long[n]), LDB(vec.l), INFO(1);
00057 zgbsv_(n, kl, ku, NRHS, newmat.array, LDAB, IPIV, vec.array, LDB, INFO);
00058 delete [] IPIV;
00059
00060 swap(*this,newmat);
00061
00062 if(INFO!=0){
00063 WARNING_REPORT;
00064 std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
00065 }
00066 return INFO;
00067 }