# HG changeset patch # User michelemartone # Date 1413638710 0 # Node ID 17251eaea9e5a0f12ff8183e8bab412a83f907be # Parent 1c5a3153ba3aa08271e7d78eb9c3d4f57f6416c3 rsboi_spsm seems to work on nrhs=1. octave --eval "A=sparse([1,2,3],[1,2,3],[2,2,2])*i ; C=complex(A); x=[10,100;20,200;30,300]; A,C,x,(sparse(C)\x),(sparsersb(C)\x), sparse(C)'\x,sparsersb(C)'\x" octave --eval "A=sparse([1,2,3],[1,2,3],[2,2,2])*1 ; C=real(A); x=[10,100;20,200;30,300]; A,C,x,(sparse(C)\x),(sparsersb(C)\x), sparse(C)'\x,sparsersb(C)'\x" diff -r 1c5a3153ba3a -r 17251eaea9e5 main/sparsersb/src/sparsersb.cc --- a/main/sparsersb/src/sparsersb.cc Sat Oct 18 13:14:46 2014 +0000 +++ b/main/sparsersb/src/sparsersb.cc Sat Oct 18 13:25:10 2014 +0000 @@ -55,8 +55,7 @@ * update to symmetric be forbidden or rather trigger a conversion ? * after file read, return various structural info * norm computation - * format spacings for readability - * TODO: rsboi_spsm against complex is missing + * reformat code for readability * Note: although librsb has been optimized for performance, sparsersb is not. * Developer notes: @@ -1339,15 +1338,14 @@ RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); if(v1.is_complex_type()) { - /* FIXME: useless case. */ ComplexMatrix retval= v2.complex_matrix_value(); octave_idx_type b_nc = retval.cols (); octave_idx_type b_nr = retval.rows (); - octave_idx_type ldb=b_nr; - octave_idx_type ldc=v1.rows(); - octave_idx_type nrhs=b_nc; - octave_idx_type nels=retval.rows()*retval.cols(); - errval=rsb_spsm(transA,&rsboi_pone,v1.mtxAp,nrhs,RSB_OI_DMTXORDER,&rsboi_zero,(const RSBOI_T*)retval.data(),ldb,(RSBOI_T*)retval.data(),ldc); + octave_idx_type ldb = b_nr; + octave_idx_type ldc = v1.rows(); + octave_idx_type nrhs = b_nc; + octave_idx_type nels = retval.rows()*retval.cols(); + errval = rsb_spsm(transA,&rsboi_pone,v1.mtxAp,nrhs,RSB_OI_DMTXORDER,&rsboi_zero,(const RSBOI_T*)retval.data(),ldb,(RSBOI_T*)retval.data(),ldc); if(RSBOI_SOME_ERROR(errval)) { if(errval==RSB_ERR_INVALID_NUMERICAL_DATA) @@ -1365,14 +1363,16 @@ } else { - Matrix retval=v2.matrix_value(); + Matrix retval = v2.matrix_value(); octave_idx_type b_nc = retval.cols (); octave_idx_type b_nr = retval.rows (); - octave_idx_type ldb=b_nr; - octave_idx_type ldc=v1.rows(); - octave_idx_type nrhs=b_nc; - octave_idx_type nels=retval.rows()*retval.cols(); - errval=rsb_spsm(transA,&rsboi_pone,v1.mtxAp,nrhs,RSB_OI_DMTXORDER,&rsboi_zero,(const RSBOI_T*)retval.data(),ldb,(RSBOI_T*)retval.data(),ldc); + octave_idx_type ldb = b_nr; + octave_idx_type ldc = v1.rows(); + octave_idx_type nrhs = b_nc; + octave_idx_type nels = retval.rows()*retval.cols(); + + errval = rsb_spsm(transA,&rsboi_pone,v1.mtxAp,nrhs,RSB_OI_DMTXORDER,&rsboi_zero,(const RSBOI_T*)retval.data(),ldb,(RSBOI_T*)retval.data(),ldc); + if(RSBOI_SOME_ERROR(errval)) { if(errval==RSB_ERR_INVALID_NUMERICAL_DATA)