diff --git a/base/modules/Makefile b/base/modules/Makefile index 89a75b5b..7cdc4a4b 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -8,10 +8,10 @@ UTIL_MODS = psb_string_mod.o \ psi_serial_mod.o psi_mod.o psb_ip_reord_mod.o\ psb_check_mod.o psb_gps_mod.o psb_linmap_mod.o psb_hash_mod.o\ psb_base_mat_mod.o psb_mat_mod.o\ - psb_s_base_mat_mod.o psb_s_csr_mat_mod.o psb_s_mat_mod.o \ - psb_d_base_mat_mod.o psb_d_csr_mat_mod.o psb_d_mat_mod.o \ - psb_c_base_mat_mod.o psb_c_csr_mat_mod.o psb_c_mat_mod.o \ - psb_z_base_mat_mod.o psb_z_csr_mat_mod.o psb_z_mat_mod.o + psb_s_base_mat_mod.o psb_s_csr_mat_mod.o psb_s_csc_mat_mod.o psb_s_mat_mod.o \ + psb_d_base_mat_mod.o psb_d_csr_mat_mod.o psb_d_csc_mat_mod.o psb_d_mat_mod.o \ + psb_c_base_mat_mod.o psb_c_csr_mat_mod.o psb_c_csc_mat_mod.o psb_c_mat_mod.o \ + psb_z_base_mat_mod.o psb_z_csr_mat_mod.o psb_z_csc_mat_mod.o psb_z_mat_mod.o MODULES=$(BASIC_MODS) $(UTIL_MODS) @@ -33,14 +33,14 @@ lib: $(BASIC_MODS) blacsmod $(UTIL_MODS) $(OBJS) $(LIBMOD) psb_base_mat_mod.o: psb_string_mod.o psb_sort_mod.o psb_ip_reord_mod.o\ psb_error_mod.o psi_serial_mod.o psb_s_base_mat_mod.o psb_d_base_mat_mod.o psb_c_base_mat_mod.o psb_z_base_mat_mod.o: psb_base_mat_mod.o -psb_s_mat_mod.o: psb_s_base_mat_mod.o psb_s_csr_mat_mod.o -psb_d_mat_mod.o: psb_d_base_mat_mod.o psb_d_csr_mat_mod.o -psb_c_mat_mod.o: psb_c_base_mat_mod.o psb_c_csr_mat_mod.o -psb_z_mat_mod.o: psb_z_base_mat_mod.o psb_z_csr_mat_mod.o -psb_s_csr_mat_mod.o: psb_s_base_mat_mod.o -psb_d_csr_mat_mod.o: psb_d_base_mat_mod.o -psb_c_csr_mat_mod.o: psb_c_base_mat_mod.o -psb_z_csr_mat_mod.o: psb_z_base_mat_mod.o +psb_s_mat_mod.o: psb_s_base_mat_mod.o psb_s_csr_mat_mod.o psb_s_csc_mat_mod.o +psb_d_mat_mod.o: psb_d_base_mat_mod.o psb_d_csr_mat_mod.o psb_d_csc_mat_mod.o +psb_c_mat_mod.o: psb_c_base_mat_mod.o psb_c_csr_mat_mod.o psb_c_csc_mat_mod.o +psb_z_mat_mod.o: psb_z_base_mat_mod.o psb_z_csr_mat_mod.o psb_z_csc_mat_mod.o +psb_s_csc_mat_mod.o psb_s_csr_mat_mod.o: psb_s_base_mat_mod.o +psb_d_csc_mat_mod.o psb_d_csr_mat_mod.o: psb_d_base_mat_mod.o +psb_dccsc_mat_mod.o psb_c_csr_mat_mod.o: psb_c_base_mat_mod.o +psb_z_csc_mat_mod.o psb_z_csr_mat_mod.o: psb_z_base_mat_mod.o psb_mat_mod.o: psb_s_mat_mod.o psb_d_mat_mod.o psb_c_mat_mod.o psb_z_mat_mod.o psb_realloc_mod.o : psb_error_mod.o psb_spmat_type.o : psb_realloc_mod.o psb_error_mod.o psb_const_mod.o psb_string_mod.o psb_sort_mod.o diff --git a/base/modules/psb_c_mat_mod.f03 b/base/modules/psb_c_mat_mod.f03 index 4719fe9e..96d8b6b9 100644 --- a/base/modules/psb_c_mat_mod.f03 +++ b/base/modules/psb_c_mat_mod.f03 @@ -2,6 +2,7 @@ module psb_c_mat_mod use psb_c_base_mat_mod use psb_c_csr_mat_mod + use psb_c_csc_mat_mod type :: psb_c_sparse_mat @@ -1426,7 +1427,6 @@ contains call a%set_dupl(psb_dupl_def_) end if - write(0,*)name,' ', present(mold), present(type),count( (/present(mold),present(type) /)) if (count( (/present(mold),present(type) /)) > 1) then info = 583 call psb_errpush(info,name,a_err='TYPE, MOLD') diff --git a/test/pargen/psb_d_csc_mat_mod.f03 b/base/modules/psb_d_csc_mat_mod.f03 similarity index 100% rename from test/pargen/psb_d_csc_mat_mod.f03 rename to base/modules/psb_d_csc_mat_mod.f03 diff --git a/base/modules/psb_d_csr_mat_mod.f03 b/base/modules/psb_d_csr_mat_mod.f03 index 8d7f8804..2d6fd62c 100644 --- a/base/modules/psb_d_csr_mat_mod.f03 +++ b/base/modules/psb_d_csr_mat_mod.f03 @@ -54,8 +54,6 @@ module psb_d_csr_mat_mod & d_mv_csr_to_fmt, d_mv_csr_from_fmt, & & d_csr_scals, d_csr_scal, d_csr_trim, d_csr_csgetrow, d_csr_get_size, & & d_csr_sizeof, d_csr_csgetptn, d_csr_get_nz_row, d_csr_reinit -!!$, & -!!$ & d_csr_mv_from, d_csr_mv_from interface diff --git a/base/modules/psb_d_mat_mod.f03 b/base/modules/psb_d_mat_mod.f03 index 19759343..ae57ad89 100644 --- a/base/modules/psb_d_mat_mod.f03 +++ b/base/modules/psb_d_mat_mod.f03 @@ -2,6 +2,7 @@ module psb_d_mat_mod use psb_d_base_mat_mod use psb_d_csr_mat_mod + use psb_d_csc_mat_mod type :: psb_d_sparse_mat @@ -1485,7 +1486,6 @@ contains call a%set_dupl(psb_dupl_def_) end if - write(0,*)name,' ', present(mold), present(type),count( (/present(mold),present(type) /)) if (count( (/present(mold),present(type) /)) > 1) then info = 583 call psb_errpush(info,name,a_err='TYPE, MOLD') diff --git a/base/modules/psb_s_mat_mod.f03 b/base/modules/psb_s_mat_mod.f03 index ed673927..c2543086 100644 --- a/base/modules/psb_s_mat_mod.f03 +++ b/base/modules/psb_s_mat_mod.f03 @@ -2,6 +2,7 @@ module psb_s_mat_mod use psb_s_base_mat_mod use psb_s_csr_mat_mod + use psb_s_csc_mat_mod type :: psb_s_sparse_mat diff --git a/base/modules/psb_tools_mod.f90 b/base/modules/psb_tools_mod.f90 index 3b681e50..453d4089 100644 --- a/base/modules/psb_tools_mod.f90 +++ b/base/modules/psb_tools_mod.f90 @@ -593,7 +593,7 @@ Module psb_tools_mod character(len=*), optional, intent(in) :: afmt class(psb_d_base_sparse_mat), intent(in), optional :: mold end subroutine psb_dspasb - subroutine psb_cspasb(a,desc_a, info, afmt, upd, dupl) + subroutine psb_cspasb(a,desc_a, info, afmt, upd, dupl,mold) use psb_descriptor_type use psb_mat_mod type(psb_c_sparse_mat), intent (inout) :: a @@ -601,8 +601,9 @@ Module psb_tools_mod integer, intent(out) :: info integer,optional, intent(in) :: dupl, upd character(len=*), optional, intent(in) :: afmt + class(psb_c_base_sparse_mat), intent(in), optional :: mold end subroutine psb_cspasb - subroutine psb_zspasb(a,desc_a, info, afmt, upd, dupl) + subroutine psb_zspasb(a,desc_a, info, afmt, upd, dupl,mold) use psb_descriptor_type use psb_mat_mod type(psb_z_sparse_mat), intent (inout) :: a @@ -610,6 +611,7 @@ Module psb_tools_mod integer, intent(out) :: info integer,optional, intent(in) :: dupl, upd character(len=*), optional, intent(in) :: afmt + class(psb_z_base_sparse_mat), intent(in), optional :: mold end subroutine psb_zspasb end interface diff --git a/base/modules/psb_z_mat_mod.f03 b/base/modules/psb_z_mat_mod.f03 index 175514ce..75271b25 100644 --- a/base/modules/psb_z_mat_mod.f03 +++ b/base/modules/psb_z_mat_mod.f03 @@ -2,6 +2,7 @@ module psb_z_mat_mod use psb_z_base_mat_mod use psb_z_csr_mat_mod + use psb_z_csc_mat_mod type :: psb_z_sparse_mat diff --git a/base/psblas/psb_cdot.f90 b/base/psblas/psb_cdot.f90 index e4db4f97..4205b440 100644 --- a/base/psblas/psb_cdot.f90 +++ b/base/psblas/psb_cdot.f90 @@ -63,7 +63,7 @@ function psb_cdot(x, y,desc_a, info, jx, jy) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, ijx, iy, ijy, iiy, jjy, i, m + & err_act, iix, jjx, ix, ijx, iy, ijy, iiy, jjy, i, m, nr complex(psb_spk_) :: dot_local complex(psb_spk_) :: cdotc character(len=20) :: name, ch_err @@ -121,9 +121,9 @@ function psb_cdot(x, y,desc_a, info, jx, jy) end if if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then - dot_local = cdotc(psb_cd_get_local_rows(desc_a),& - & x(iix:,jjx),ione,y(iiy:,jjy),ione) + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then + dot_local = cdotc(nr, x(iix:,jjx),ione,y(iiy:,jjy),ione) ! adjust dot_local because overlapped elements are computed more than once do i=1,size(desc_a%ovrlap_elem,1) idx = desc_a%ovrlap_elem(i,1) @@ -215,7 +215,7 @@ function psb_cdotv(x, y,desc_a, info) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, jx, iy, jy, iiy, jjy, i, m + & err_act, iix, jjx, ix, jx, iy, jy, iiy, jjy, i, m, nr complex(psb_spk_) :: dot_local complex(psb_spk_) :: cdotc character(len=20) :: name, ch_err @@ -258,9 +258,9 @@ function psb_cdotv(x, y,desc_a, info) end if if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then - dot_local = cdotc(psb_cd_get_local_rows(desc_a),& - & x,ione,y,ione) + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then + dot_local = cdotc(nr, x,ione,y,ione) ! adjust dot_local because overlapped elements are computed more than once do i=1,size(desc_a%ovrlap_elem,1) idx = desc_a%ovrlap_elem(i,1) @@ -352,7 +352,7 @@ subroutine psb_cdotvs(res, x, y,desc_a, info) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, iy, iiy, jjy, i, m + & err_act, iix, jjx, ix, iy, iiy, jjy, i, m,nr complex(psb_spk_) :: dot_local complex(psb_spk_) :: cdotc character(len=20) :: name, ch_err @@ -392,9 +392,9 @@ subroutine psb_cdotvs(res, x, y,desc_a, info) end if if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then - dot_local = cdotc(psb_cd_get_local_rows(desc_a),& - & x,ione,y,ione) + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then + dot_local = cdotc(nr, x,ione,y,ione) ! adjust dot_local because overlapped elements are computed more than once do i=1,size(desc_a%ovrlap_elem,1) idx = desc_a%ovrlap_elem(i,1) @@ -487,7 +487,7 @@ subroutine psb_cmdots(res, x, y, desc_a, info) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, iy, iiy, jjy, i, m, j, k + & err_act, iix, jjx, ix, iy, iiy, jjy, i, m, j, k, nr complex(psb_spk_),allocatable :: dot_local(:) complex(psb_spk_) :: cdotc character(len=20) :: name, ch_err @@ -537,10 +537,10 @@ subroutine psb_cmdots(res, x, y, desc_a, info) allocate(dot_local(k)) if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then do j=1,k - dot_local(j) = cdotc(psb_cd_get_local_rows(desc_a),& - & x(1:,j),ione,y(1:,j),ione) + dot_local(j) = cdotc(nr, x(1:,j),ione,y(1:,j),ione) ! adjust dot_local because overlapped elements are computed more than once end do do i=1,size(desc_a%ovrlap_elem,1) diff --git a/base/psblas/psb_ddot.f90 b/base/psblas/psb_ddot.f90 index 2516e221..4f24bd14 100644 --- a/base/psblas/psb_ddot.f90 +++ b/base/psblas/psb_ddot.f90 @@ -63,7 +63,7 @@ function psb_ddot(x, y,desc_a, info, jx, jy) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, ijx, iy, ijy, iiy, jjy, i, m + & err_act, iix, jjx, ix, ijx, iy, ijy, iiy, jjy, i, m, nr real(psb_dpk_) :: dot_local real(psb_dpk_) :: ddot character(len=20) :: name, ch_err @@ -121,9 +121,9 @@ function psb_ddot(x, y,desc_a, info, jx, jy) end if if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then - dot_local = ddot(psb_cd_get_local_rows(desc_a),& - & x(iix:,jjx),ione,y(iiy:,jjy),ione) + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then + dot_local = ddot(nr, x(iix:,jjx),ione,y(iiy:,jjy),ione) ! adjust dot_local because overlapped elements are computed more than once do i=1,size(desc_a%ovrlap_elem,1) idx = desc_a%ovrlap_elem(i,1) @@ -215,7 +215,7 @@ function psb_ddotv(x, y,desc_a, info) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, jx, iy, jy, iiy, jjy, i, m + & err_act, iix, jjx, ix, jx, iy, jy, iiy, jjy, i, m, nr real(psb_dpk_) :: dot_local real(psb_dpk_) :: ddot character(len=20) :: name, ch_err @@ -258,9 +258,10 @@ function psb_ddotv(x, y,desc_a, info) end if if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then - dot_local = ddot(psb_cd_get_local_rows(desc_a),& - & x,ione,y,ione) + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then + dot_local = ddot(nr, x,ione,y,ione) + ! adjust dot_local because overlapped elements are computed more than once do i=1,size(desc_a%ovrlap_elem,1) idx = desc_a%ovrlap_elem(i,1) @@ -352,7 +353,7 @@ subroutine psb_ddotvs(res, x, y,desc_a, info) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, iy, iiy, jjy, i, m + & err_act, iix, jjx, ix, iy, iiy, jjy, i, m, nr real(psb_dpk_) :: dot_local real(psb_dpk_) :: ddot character(len=20) :: name, ch_err @@ -392,9 +393,9 @@ subroutine psb_ddotvs(res, x, y,desc_a, info) end if if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then - dot_local = ddot(psb_cd_get_local_rows(desc_a),& - & x,ione,y,ione) + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then + dot_local = ddot(nr, x,ione,y,ione) ! adjust dot_local because overlapped elements are computed more than once do i=1,size(desc_a%ovrlap_elem,1) idx = desc_a%ovrlap_elem(i,1) @@ -487,7 +488,7 @@ subroutine psb_dmdots(res, x, y, desc_a, info) ! locals integer :: ictxt, np, me, idx, ndm,& - & err_act, iix, jjx, ix, iy, iiy, jjy, i, m, j, k + & err_act, iix, jjx, ix, iy, iiy, jjy, i, m, j, k, nr real(psb_dpk_),allocatable :: dot_local(:) real(psb_dpk_) :: ddot character(len=20) :: name, ch_err @@ -537,10 +538,10 @@ subroutine psb_dmdots(res, x, y, desc_a, info) allocate(dot_local(k)) if(m /= 0) then - if(psb_cd_get_local_rows(desc_a) > 0) then + nr = psb_cd_get_local_rows(desc_a) + if(nr > 0) then do j=1,k - dot_local(j) = ddot(psb_cd_get_local_rows(desc_a),& - & x(1:,j),ione,y(1:,j),ione) + dot_local(j) = ddot(nr,x(1:,j),ione,y(1:,j),ione) ! adjust dot_local because overlapped elements are computed more than once end do do i=1,size(desc_a%ovrlap_elem,1) diff --git a/base/serial/f03/Makefile b/base/serial/f03/Makefile index d1f7342b..8244430f 100644 --- a/base/serial/f03/Makefile +++ b/base/serial/f03/Makefile @@ -3,8 +3,9 @@ include ../../../Make.inc # # The object files # -FOBJS = psb_s_csr_impl.o psb_s_coo_impl.o psb_d_csr_impl.o psb_d_coo_impl.o\ - psb_c_csr_impl.o psb_c_coo_impl.o psb_z_csr_impl.o psb_z_coo_impl.o +FOBJS = psb_s_csr_impl.o psb_c_csr_impl.o psb_d_csr_impl.o psb_z_csr_impl.o\ + psb_s_coo_impl.o psb_c_coo_impl.o psb_d_coo_impl.o psb_z_coo_impl.o\ + psb_s_csc_impl.o psb_c_csc_impl.o psb_d_csc_impl.o psb_z_csc_impl.o OBJS=$(FOBJS) diff --git a/base/serial/f03/psb_c_csr_impl.f03 b/base/serial/f03/psb_c_csr_impl.f03 index e415d8e1..0b25ad0c 100644 --- a/base/serial/f03/psb_c_csr_impl.f03 +++ b/base/serial/f03/psb_c_csr_impl.f03 @@ -50,7 +50,7 @@ subroutine c_csr_csmv_impl(alpha,a,x,beta,y,info,trans) tra = (psb_toupper(trans_)=='T') ctra = (psb_toupper(trans_)=='C') - if (tra) then + if (tra.or.ctra) then m = a%get_ncols() n = a%get_nrows() else diff --git a/test/pargen/psb_d_csc_impl.f03 b/base/serial/f03/psb_d_csc_impl.f03 similarity index 99% rename from test/pargen/psb_d_csc_impl.f03 rename to base/serial/f03/psb_d_csc_impl.f03 index 208bd1ae..3de5d136 100644 --- a/test/pargen/psb_d_csc_impl.f03 +++ b/base/serial/f03/psb_d_csc_impl.f03 @@ -226,7 +226,7 @@ subroutine d_csc_csmv_impl(alpha,a,x,beta,y,info,trans) end do end if - if (alpha.eq.done) then + if (alpha == done) then do i=1,n do j=a%icp(i), a%icp(i+1)-1 @@ -235,7 +235,7 @@ subroutine d_csc_csmv_impl(alpha,a,x,beta,y,info,trans) end do enddo - else if (alpha.eq.-done) then + else if (alpha == -done) then do i=1,n do j=a%icp(i), a%icp(i+1)-1 @@ -496,7 +496,7 @@ subroutine d_csc_csmm_impl(alpha,a,x,beta,y,info,trans) end do end if - if (alpha.eq.done) then + if (alpha == done) then do i=1,n do j=a%icp(i), a%icp(i+1)-1 @@ -505,7 +505,7 @@ subroutine d_csc_csmm_impl(alpha,a,x,beta,y,info,trans) end do enddo - else if (alpha.eq.-done) then + else if (alpha == -done) then do i=1,n do j=a%icp(i), a%icp(i+1)-1 diff --git a/base/tools/psb_cspasb.f90 b/base/tools/psb_cspasb.f90 index 01544eec..a65b7f95 100644 --- a/base/tools/psb_cspasb.f90 +++ b/base/tools/psb_cspasb.f90 @@ -119,7 +119,6 @@ subroutine psb_cspasb(a,desc_a, info, afmt, upd, dupl,mold) call a%set_ncols(n_col) end if - write(0,*)name,' ', present(mold), present(afmt),count( (/present(mold),present(afmt) /)) call a%cscnv(info,type=afmt,dupl=dupl, mold=mold) diff --git a/base/tools/psb_dspasb.f90 b/base/tools/psb_dspasb.f90 index 3be9345d..7f20a1d0 100644 --- a/base/tools/psb_dspasb.f90 +++ b/base/tools/psb_dspasb.f90 @@ -118,7 +118,6 @@ subroutine psb_dspasb(a,desc_a, info, afmt, upd, dupl, mold) call a%set_ncols(n_col) end if - write(0,*)name,' ', present(mold), present(afmt),count( (/present(mold),present(afmt) /)) call a%cscnv(info,type=afmt,dupl=dupl, mold=mold) diff --git a/test/fileread/runs/cfs.inp b/test/fileread/runs/cfs.inp index bf147e2a..29ba24c4 100644 --- a/test/fileread/runs/cfs.inp +++ b/test/fileread/runs/cfs.inp @@ -3,7 +3,7 @@ young1c.mtx This (and others) from: http://math.nist.gov/MatrixMarket/ NONE http://www.cise.ufl.edu/research/sparse/matrices/index.html MM File format: MM: Matrix Market HB: Harwell-Boeing. BICGSTAB Iterative method: BiCGSTAB CGS RGMRES BiCGSTABL BICG CG -DIAG Preconditioner NONE DIAG BJAC +BJAC Preconditioner NONE DIAG BJAC CSR Storage format CSR COO JAD 0 IPART: Partition method 0: BLK 2: graph (with Metis) 2 ISTOPC diff --git a/test/pargen/Makefile b/test/pargen/Makefile index b563e0b1..08b8dc1b 100644 --- a/test/pargen/Makefile +++ b/test/pargen/Makefile @@ -16,11 +16,10 @@ EXEDIR=./runs all: ppde spde -ppde: ppde.o psb_d_csc_impl.o psb_d_csc_mat_mod.o - $(F90LINK) -pg ppde.o psb_d_csc_impl.o psb_d_csc_mat_mod.o -o ppde $(PSBLAS_LIB) $(LDLIBS) +ppde: ppde.o + $(F90LINK) -pg ppde.o -o ppde $(PSBLAS_LIB) $(LDLIBS) /bin/mv ppde $(EXEDIR) -psb_d_csc_impl.o ppde.o: psb_d_csc_mat_mod.o spde: spde.o $(F90LINK) spde.o -o spde $(PSBLAS_LIB) $(LDLIBS) diff --git a/test/pargen/ppde.f90 b/test/pargen/ppde.f90 index e936ece5..b584f5ad 100644 --- a/test/pargen/ppde.f90 +++ b/test/pargen/ppde.f90 @@ -341,7 +341,6 @@ contains ! use psb_base_mod use psb_d_mat_mod - use psb_d_csc_mat_mod implicit none integer :: idim integer, parameter :: nb=20 diff --git a/util/psb_mat_dist_mod.f90 b/util/psb_mat_dist_mod.f90 index 326e9d4b..68ff8024 100644 --- a/util/psb_mat_dist_mod.f90 +++ b/util/psb_mat_dist_mod.f90 @@ -1324,7 +1324,6 @@ contains goto 9999 end if - write(0,*)name,' Calling spasb',psb_dupl_err_,' ',afmt call psb_barrier(ictxt) t2 = psb_wtime() call psb_spasb(a,desc_a,info,dupl=psb_dupl_err_,afmt=afmt)