# HG changeset patch # User michelemartone # Date 1365439713 0 # Node ID 672c998c6620f0704a3500971207981238d5df97 # Parent e4cb1c2c39c49eb322a7ce017966681d94407b29 in a mini example / test of pcr usage in the tester. clearing some unused variables declarations. diff -r e4cb1c2c39c4 -r 672c998c6620 main/sparsersb/src/sparsersb.cc --- a/main/sparsersb/src/sparsersb.cc Mon Apr 08 11:52:52 2013 +0000 +++ b/main/sparsersb/src/sparsersb.cc Mon Apr 08 16:48:33 2013 +0000 @@ -310,7 +310,7 @@ Array IA( dim_vector(1,sm.nnz()) ); Array JA( dim_vector(1,sm.nnz()) ); rsb_err_t errval=RSB_ERR_NO_ERROR; - bool islowtri=true,isupptri=true; + /* bool islowtri=sm.is_lower_triangular(),isupptri=sm.is_upper_triangular(); */ rsb_flags_t eflags=RSBOI_RF; rsb_type_t typecode=RSB_NUMERICAL_TYPE_DOUBLE; octave_idx_type nrA = sm.rows (), ncA = sm.cols (); @@ -342,7 +342,7 @@ Array IA( dim_vector(1,sm.nnz()) ); Array JA( dim_vector(1,sm.nnz()) ); rsb_err_t errval=RSB_ERR_NO_ERROR; - bool islowtri=true,isupptri=true; + /* bool islowtri=sm.is_lower_triangular(),isupptri=sm.is_upper_triangular(); */ rsb_flags_t eflags=RSBOI_RF; rsb_type_t typecode=RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX; #if RSBOI_WANT_SYMMETRY @@ -356,10 +356,10 @@ RSBOI_0_ERROR(RSBOI_0_ALLERRMSG); } - octave_sparsersb_mtx (const ComplexMatrix &m) : octave_sparse_matrix (RSBIO_DEFAULT_CORE_MATRIX) + octave_sparsersb_mtx (const ComplexMatrix &cm) : octave_sparse_matrix (RSBIO_DEFAULT_CORE_MATRIX) { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); - this->alloc_rsb_mtx_from_csc_copy(SparseComplexMatrix(m)); + this->alloc_rsb_mtx_from_csc_copy(SparseComplexMatrix(cm)); } octave_sparsersb_mtx (const SparseComplexMatrix &sm, rsb_type_t typecode=RSBOI_TYPECODE) : octave_sparse_matrix (RSBIO_DEFAULT_CORE_MATRIX) @@ -543,10 +543,11 @@ { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); idx_vector i = idx.front() (0).index_vector (); +#if defined(RSB_LIBRSB_VER) && (RSB_LIBRSB_VER< 10100) octave_idx_type ii=i(0); -#if defined(RSB_LIBRSB_VER) && (RSB_LIBRSB_VER< 10100) RSBOI_ERROR(""); #elif defined(RSB_LIBRSB_VER) && (RSB_LIBRSB_VER>=10100) + octave_idx_type ii=i(0); RSBOI_DEBUG_NOTICE("get_element (%d)\n",ii); if(is_real_type()) { @@ -800,7 +801,6 @@ default: panic_impossible (); } -skipimpl: return retval; } @@ -897,7 +897,7 @@ for(nzi=0;nzi "<<((RSBOI_T*)rcm.VA)[nzi]<<"\n"; newline(os); -done: RSBIO_NULL_STATEMENT_FOR_COMPILER_HAPPINESS + RSBIO_NULL_STATEMENT_FOR_COMPILER_HAPPINESS } octave_value diag (octave_idx_type k) const @@ -916,14 +916,12 @@ if(this->is_real_type()) { Matrix DA(this->rows(),1); - //errval=rsb_getdiag (this->mtxAp,(RSBOI_T*)DA.data()); errval = rsb_mtx_get_vec(this->mtxAp,(RSBOI_T*)DA.data(),RSB_EXTF_DIAG); retval=(DA); } else { ComplexMatrix DA(this->rows(),1); - //errval=rsb_getdiag (this->mtxAp,(void*)DA.data()); errval = rsb_mtx_get_vec(this->mtxAp,(RSBOI_T*)DA.data(),RSB_EXTF_DIAG); retval=(DA); } @@ -937,8 +935,6 @@ octave_value rsboi_get_scaled_copy_inv(const RSBOI_T alpha)const { - rsb_err_t errval=RSB_ERR_NO_ERROR; - octave_sparsersb_mtx * m = NULL; RSBOI_T one=1.0; RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); return rsboi_get_scaled_copy(one/alpha);/* FIXME: is this correct ? */ @@ -947,8 +943,6 @@ #if RSBOI_WANT_DOUBLE_COMPLEX octave_value rsboi_get_scaled_copy_inv(const Complex alpha)const { - rsb_err_t errval=RSB_ERR_NO_ERROR; - octave_sparsersb_mtx * m = NULL; Complex one=1.0; RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); return rsboi_get_scaled_copy(one/alpha);/* FIXME: is this correct ? */ @@ -958,7 +952,6 @@ octave_value rsboi_get_scaled_copy(const RSBOI_T alpha)const { rsb_err_t errval=RSB_ERR_NO_ERROR; - octave_sparsersb_mtx * m = NULL; RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); struct rsb_mtx_t*mtxBp=NULL; if(is_real_type()) @@ -974,8 +967,7 @@ #else {RSBOI_0_ERROR(RSBOI_0_NOCOERRMSG);} #endif - m = new octave_sparsersb_mtx( mtxBp ); - return m; + return new octave_sparsersb_mtx( mtxBp ); } #if RSBOI_WANT_DOUBLE_COMPLEX @@ -1009,7 +1001,6 @@ static octave_base_value * default_numeric_conversion_function (const octave_base_value& a) { - rsb_err_t errval=RSB_ERR_NO_ERROR; RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); CAST_CONV_ARG (const octave_sparsersb_mtx&); RSBOI_WARN(RSBOI_O_MISSIMPERRMSG); @@ -1020,10 +1011,10 @@ return new octave_sparse_complex_matrix (v.sparse_complex_matrix_value()); } -DEFINE_OCTAVE_ALLOCATOR (octave_sparsersb_mtx); +DEFINE_OCTAVE_ALLOCATOR (octave_sparsersb_mtx) DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_sparsersb_mtx, RSB_OI_TYPEINFO_STRING, -RSB_OI_TYPEINFO_TYPE); +RSB_OI_TYPEINFO_TYPE) DEFCONV (octave_triangular_conv, octave_sparsersb_mtx, matrix) { @@ -1137,9 +1128,13 @@ if(RSBOI_SOME_ERROR(errval)) { if(errval==RSB_ERR_INVALID_NUMERICAL_DATA) + { RSBOI_PERROR(errval);// FIXME: need a specific error message here + } else + { RSBOI_PERROR(errval);// FIXME: generic case, here + } for(octave_idx_type i=0;imtxAp)goto ret;/* FIXME: error handling missing here */ + if(!osmp || !osmp->mtxAp) + goto ret;/* FIXME: error handling missing here */ if(strlen(mis)==0) { mis="RSB_MIF_MATRIX_INFO__TO__CHAR_P"; diff -r e4cb1c2c39c4 -r 672c998c6620 main/sparsersb/src/sparsersbtester.m --- a/main/sparsersb/src/sparsersbtester.m Mon Apr 08 11:52:52 2013 +0000 +++ b/main/sparsersb/src/sparsersbtester.m Mon Apr 08 16:48:33 2013 +0000 @@ -200,6 +200,37 @@ testmsg(match,"pcg"); end +function match=testpcrm(OM,XM) + # FIXME! This test ignores OM and XM ! + match=1; + A=sparse ([11,12;21,23]);X=[11;22];B=A*X;X=[0;0]; + [OX, OFLAG, ORELRES, OITER, ORESVEC]=pcr(A,B); + A=sparsersb([11,12;21,23]);X=[11;22];B=A*X;X=[0;0]; + [XX, XFLAG, XRELRES, XITER, XRESVEC]=pcr(A,B); + match&=(OFLAG==XFLAG);# FIXME: a very loose check! + match&=(OITER==XITER);# FIXME: a very loose check! + # + # http://www.gnu.org/software/octave/doc/interpreter/Iterative-Techniques.html#Iterative-Techniques + #n = 10; + n = 10+size(XM)(1,1) + clear A OX XX; + A = diag (sparse (1:n)); + A = A + A'; # we want symmetric matrices + b = rand (n, 1); + [l, u, p, q] = luinc (A, 1.e-3); + [OX, OFLAG, ORELRES, OITER, ORESVEC]= pcr ( A ,b); + [XX, XFLAG, XRELRES, XITER, XRESVEC]= pcr (sparsersb(A),b); + match&=(sum(OX-XX)==0.0);# FIXME: a very brittle check! + # + #function y = apply_a (x) + # y = [1:N]' .* x; + #endfunction + [OX, OFLAG, ORELRES, OITER, ORESVEC]= pcr ( A ,b, 1.e-6, 500, l); + [XX, XFLAG, XRELRES, XITER, XRESVEC]= pcr (sparsersb(A),b, 1.e-6, 500, l); + match&=(sum(OX-XX)==0.0);# FIXME: a very brittle check! + testmsg(match,"pcr"); +end + function match=testmult(OM,XM) match=1; B=ones(rows(OM),1); @@ -333,6 +364,7 @@ match&=testasgn(OM,XM); if nnz(OM)>1 match&=testpcgm(OM,XM); + match&=testpcrm(OM,XM); match&=testmult(OM,XM); match&=testspsv(OM,XM); match&=testnorm(OM,XM);