00001
00003 inline _zrovector operator*(const _zrovector& vec, const _zgbmatrix& mat)
00004 {
00005 #ifdef CPPL_VERBOSE
00006 std::cerr << "# [MARK] operator*(const _zrovector&, const _zgbmatrix&)"
00007 << std::endl;
00008 #endif//CPPL_VERBOSE
00009
00010 #ifdef CPPL_DEBUG
00011 if(vec.L!=mat.M){
00012 std::cerr << "[ERROR] operator*(const zrovector&, const _zgbmatrix&)"
00013 << std::endl
00014 << "These vector and matrix can not make a product."
00015 << std::endl
00016 << "Your input was (" << vec.L << ") * ("
00017 << mat.M << "x" << mat.N << ")." << std::endl;
00018 exit(1);
00019 }
00020 #endif//CPPL_DEBUG
00021
00022 zrovector newvec(mat.N);
00023 zgbmv_( 'T', mat.M, mat.N, mat.KL, mat.KU, std::complex<double>(1.0,0.0),
00024 mat.Array, mat.KL+mat.KU+1, vec.Array, 1, std::complex<double>(0.0,0.0), newvec.array, 1 );
00025
00026 vec.destroy();
00027 mat.destroy();
00028 return _(newvec);
00029 }